home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Windows Gam…ming Gurus (2nd Edition) / Disc2.iso / msdn_vcb / samples / vc98 / sdk / graphics / directx / ffdonuts / ffdonuts.h < prev    next >
Encoding:
C/C++ Source or Header  |  1997-07-15  |  5.0 KB  |  225 lines

  1. /*==========================================================================
  2.  *
  3.  *  Copyright (C) 1995-1996 Microsoft Corporation. All Rights Reserved.
  4.  *
  5.  *  File:       ffdonuts.h
  6.  *  Content:    main include file
  7.  *
  8.  *
  9.  ***************************************************************************/
  10.  
  11. #ifndef DONUTS_INCLUDED
  12. #define DONUTS_INCLUDED
  13.  
  14. #undef WIN32_LEAN_AND_MEAN
  15. #define WIN32_LEAN_AND_MEAN
  16. #include <windows.h>
  17. #include <windowsx.h>
  18. #include <mmsystem.h>
  19. #include <ddraw.h>
  20. #include <stdio.h>
  21. #include <stdlib.h>
  22. #include <io.h>
  23. #include <float.h>
  24. #include "resource.h"
  25. #include "ddutil.h"
  26. #include "input.h"
  27. #ifdef USE_DSOUND
  28.     #include <dsound.h>
  29.     #include "dsutil.h"
  30. #endif
  31.  
  32. #define DEF_SHOW_DELAY     (2000)
  33.  
  34. #define IS_NUM(c)     ((c) >= '0' && (c) <= '9')
  35. #define IS_SPACE(c)   ((c) == ' ' || (c) == '\r' || (c) == '\n' || (c) == '\t' || (c) == 'x')
  36.  
  37. enum
  38. {
  39.     OBJ_DONUT = 0,
  40.     OBJ_PYRAMID,
  41.     OBJ_CUBE,
  42.     OBJ_SPHERE,
  43.     OBJ_SHIP,
  44.     OBJ_BULLET
  45. };
  46.  
  47.  
  48. // program states
  49. enum
  50. {
  51.     PS_SPLASH,
  52.     PS_ACTIVE,
  53.     PS_BEGINREST,
  54.     PS_REST
  55. };
  56.  
  57. #define     MAX_SCREEN_X    (ScreenX-1)
  58. #define     MAX_SCREEN_Y    (ScreenY-1)
  59. #define     MAX_DONUT_X     MAX_SCREEN_X - 64
  60. #define     MAX_DONUT_Y     MAX_SCREEN_Y - 64
  61. #define     MAX_DONUT_FRAME 30
  62. #define     MAX_PYRAMID_X     MAX_SCREEN_X - 32
  63. #define     MAX_PYRAMID_Y     MAX_SCREEN_Y - 32
  64. #define     MAX_PYRAMID_FRAME 40
  65. #define     MAX_SPHERE_X     MAX_SCREEN_X - 16
  66. #define     MAX_SPHERE_Y     MAX_SCREEN_Y - 16
  67. #define     MAX_SPHERE_FRAME 40
  68. #define     MAX_CUBE_X     MAX_SCREEN_X - 16
  69. #define     MAX_CUBE_Y     MAX_SCREEN_Y - 16
  70. #define     MAX_CUBE_FRAME 40
  71. #define     MAX_SHIP_X     MAX_SCREEN_X - 32
  72. #define     MAX_SHIP_Y     MAX_SCREEN_Y - 32
  73. #define     MAX_SHIP_FRAME 40
  74. #define     MAX_BULLET_X    MAX_SCREEN_X - 3;
  75. #define     MAX_BULLET_Y    MAX_SCREEN_Y - 3;
  76. #define     MAX_BULLET_FRAME 400
  77.  
  78.  
  79. // Offsets for the bullet bitmap
  80. #define     BULLET_X    304
  81. #define     BULLET_Y    0
  82.  
  83.  
  84. /*
  85.  * structures
  86.  */
  87.  
  88. /*
  89.  * DBLNODE - a node in a generic doubly-linked list
  90.  */
  91. typedef struct _DBLNODE
  92. {
  93.     struct  _DBLNODE    FAR *next;  // link to next node
  94.     struct  _DBLNODE    FAR *prev;  // link to previous node
  95.     SHORT               type;       // type of object
  96.     double              posx, posy; // actual x and y position
  97.     double              velx, vely; // x and y velocity (pixels/millisecond)
  98.     double              frame;      // current frame
  99.     double              delay;      // frame/millisecond
  100.     RECT                src, dst;   // source and destination rects
  101.     LPDIRECTDRAWSURFACE surf;       // surface containing bitmap
  102. } DBLNODE;
  103. typedef DBLNODE FAR *LPDBLNODE;
  104.  
  105. double      Dirx[40] =
  106. {
  107.     0.000000,
  108.     0.156434,
  109.     0.309017,
  110.     0.453991,
  111.     0.587785,
  112.     0.707107,
  113.     0.809017,
  114.     0.891007,
  115.     0.951057,
  116.     0.987688,
  117.     1.000000,
  118.     0.987688,
  119.     0.951057,
  120.     0.891007,
  121.     0.809017,
  122.     0.707107,
  123.     0.587785,
  124.     0.453990,
  125.     0.309017,
  126.     0.156434,
  127.     0.000000,
  128.     -0.156435,
  129.     -0.309017,
  130.     -0.453991,
  131.     -0.587785,
  132.     -0.707107,
  133.     -0.809017,
  134.     -0.891007,
  135.     -0.951057,
  136.     -0.987688,
  137.     -1.000000,
  138.     -0.987688,
  139.     -0.951056,
  140.     -0.891006,
  141.     -0.809017,
  142.     -0.707107,
  143.     -0.587785,
  144.     -0.453990,
  145.     -0.309017,
  146.     -0.156434
  147. };
  148.  
  149. double      Diry[40] =
  150. {
  151.     -1.000000,
  152.     -0.987688,
  153.     -0.951057,
  154.     -0.891007,
  155.     -0.809017,
  156.     -0.707107,
  157.     -0.587785,
  158.     -0.453990,
  159.     -0.309017,
  160.     -0.156434,
  161.     0.000000,
  162.     0.156434,
  163.     0.309017,
  164.     0.453991,
  165.     0.587785,
  166.     0.707107,
  167.     0.809017,
  168.     0.891007,
  169.     0.951057,
  170.     0.987688,
  171.     1.000000,
  172.     0.987688,
  173.     0.951057,
  174.     0.891006,
  175.     0.809017,
  176.     0.707107,
  177.     0.587785,
  178.     0.453990,
  179.     0.309017,
  180.     0.156434,
  181.     0.000000,
  182.     -0.156435,
  183.     -0.309017,
  184.     -0.453991,
  185.     -0.587785,
  186.     -0.707107,
  187.     -0.809017,
  188.     -0.891007,
  189.     -0.951057,
  190.     -0.987688
  191. };
  192.  
  193.  
  194. /*
  195.  * fn prototypes
  196.  */
  197. void    DestroyGame( void );
  198. BOOL    InitializeGame( void );
  199. void    makeFontStuff( void );
  200. void    UpdateFrame( void );
  201. BOOL    CleanupAndExit( char *err );
  202. BOOL    RestoreSurfaces( void );
  203. BOOL    isDisplayListEmpty( void );
  204. void    initShip( BOOL delay );
  205. void    initLevel( int level );
  206. void    addObject( SHORT type, double x, double y, double vx, double vy );
  207. void    linkObject( LPDBLNODE new );
  208. void    linkLastObject( LPDBLNODE new );
  209. void    UpdateDisplayList( void );
  210. void    DrawDisplayList( void );
  211. int     randInt( int low, int high );
  212. double  randDouble( double low, double high );
  213. void    DeleteFromList( LPDBLNODE this );
  214. void    CheckForHits( void );
  215. void    bltScore( char *num, int x, int y );
  216. void    DisplayFrameRate( void );
  217. void    bltSplash( void );
  218. void    EraseScreen( void );
  219. void    FlipScreen( void );
  220. void    DisplayLevel( void );
  221. void    InitializeSound( void );
  222. void    DestroySound( void );
  223.  
  224. #endif
  225.