//----------------------------------------------------------------------------- // File: ffdonuts.h // // Desc: DirectInput ForceFeedback version of Donuts game // // Copyright (C) 1995-1999 Microsoft Corporation. All Rights Reserved. //----------------------------------------------------------------------------- #ifndef FFDONUTS_H #define FFDONUTS_H // Program states enum{ PS_SPLASH, PS_ACTIVE, PS_BEGINREST, PS_REST }; // Game object types enum{ OBJ_DONUT=0, OBJ_PYRAMID, OBJ_CUBE, OBJ_SPHERE, OBJ_SHIP, OBJ_BULLET }; // Object dimensions and fixed properties #define MAX_SCREEN_X (g_dwScreenWidth-1) #define MAX_SCREEN_Y (g_dwScreenHeight-1) #define DONUT_WIDTH 64 #define DONUT_HEIGHT 64 #define PYRAMID_WIDTH 32 #define PYRAMID_HEIGHT 32 #define SPHERE_WIDTH 16 #define SPHERE_HEIGHT 16 #define CUBE_WIDTH 16 #define CUBE_HEIGHT 16 #define SHIP_WIDTH 32 #define SHIP_HEIGHT 32 #define BULLET_WIDTH 3 #define BULLET_HEIGHT 3 #define MAX_DONUT_FRAME 30 #define MAX_PYRAMID_FRAME 40 #define MAX_SPHERE_FRAME 40 #define MAX_CUBE_FRAME 40 #define MAX_SHIP_FRAME 40 #define MAX_BULLET_FRAME 400 #define BULLET_XOFFSET 304 #define BULLET_YOFFSET 0 #define NO_PLAYER -1 //----------------------------------------------------------------------------- // Name: struct DisplayObject // Desc: A game object that goes in the display list //----------------------------------------------------------------------------- struct DisplayObject { DisplayObject* next; // Link to next object DisplayObject* prev; // Link to previous object BOOL bVisible; // Whether the object is visible SHORT type; // Type of object FLOAT posx, posy; // X and y position FLOAT velx, vely; // X and y velocity (pixels/second) FLOAT frame; // Current animation frame FLOAT delay; // Frame/second RECT rcSrc, rcDst; // Source and destination rects LPDIRECTDRAWSURFACE7 pddsSurface; // Surface containing bitmap int Player; //which player the pbject belongs to -- only for bullets and ships }; FLOAT Dirx[40] = { 0.000000f, 0.156434f, 0.309017f, 0.453991f, 0.587785f, 0.707107f, 0.809017f, 0.891007f, 0.951057f, 0.987688f, 1.000000f, 0.987688f, 0.951057f, 0.891007f, 0.809017f, 0.707107f, 0.587785f, 0.453990f, 0.309017f, 0.156434f, 0.000000f, -0.156435f, -0.309017f, -0.453991f, -0.587785f, -0.707107f, -0.809017f, -0.891007f, -0.951057f, -0.987688f, -1.000000f, -0.987688f, -0.951056f, -0.891006f, -0.809017f, -0.707107f, -0.587785f, -0.453990f, -0.309017f, -0.156434f }; FLOAT Diry[40] = { -1.000000f, -0.987688f, -0.951057f, -0.891007f, -0.809017f, -0.707107f, -0.587785f, -0.453990f, -0.309017f, -0.156434f, 0.000000f, 0.156434f, 0.309017f, 0.453991f, 0.587785f, 0.707107f, 0.809017f, 0.891007f, 0.951057f, 0.987688f, 1.000000f, 0.987688f, 0.951057f, 0.891006f, 0.809017f, 0.707107f, 0.587785f, 0.453990f, 0.309017f, 0.156434f, 0.000000f, -0.156435f, -0.309017f, -0.453991f, -0.587785f, -0.707107f, -0.809017f, -0.891007f, -0.951057f, -0.987688f }; //----------------------------------------------------------------------------- // Function prototypes //----------------------------------------------------------------------------- HRESULT InitializeGame( HWND hWnd ); HRESULT InitializeSound( HWND hWnd ); HRESULT InitializeInput( HWND hWnd ); VOID DestroyGame(); VOID DestroySound(); VOID DestroyInput(); VOID UpdateFrame(LPDIRECTDRAWSURFACE7 lpddsConfigDlg = NULL); VOID CleanupAndDisplayError( CHAR* strError ); HRESULT RestoreSurfaces(); BOOL IsDisplayListEmpty(); BOOL IsDisplayListEmptyExceptShips(); VOID InitializeShips(); VOID AdvanceLevel(); VOID UpdateDisplayList(); VOID DrawDisplayList(LPDIRECTDRAWSURFACE7 lpConfigDlgSurf = NULL); FLOAT rnd( FLOAT low=-1.0f, FLOAT high=1.0f ); VOID CheckForHits(); VOID BltBitmappedText( CHAR* strScore, int x, int y ); HRESULT DisplaySplashScreen(); VOID EraseScreen(); HRESULT FlipScreen(); VOID DisplayLevelIntroScreen( DWORD dwLevel ); DisplayObject* CreateObject( SHORT type, FLOAT x, FLOAT y, FLOAT vx, FLOAT vy, int Player ); VOID AddToList( DisplayObject* pObject ); VOID DeleteFromList( DisplayObject* pObject ); VOID GetDeviceInput(DWORD input[]); #endif