home *** CD-ROM | disk | FTP | other *** search
/ NEXT Generation 27 / NEXT27.iso / pc / demos / emperor / dx3.exe / SDK / SAMPLES / DONUTS / DONUTS.H < prev    next >
C/C++ Source or Header  |  1996-08-28  |  5KB  |  239 lines

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