DONUTS.H
/*========================================================================== 
 * 
 *  Copyright (C) 1995-1997 Microsoft Corporation. All Rights Reserved. 
 * 
 *  File:       donuts.h 
 *  Content:    main include file 
 * 
 * 
 ***************************************************************************/ 
 
#ifndef DONUTS_INCLUDED 
#define DONUTS_INCLUDED 
 
#undef WIN32_LEAN_AND_MEAN 
#define WIN32_LEAN_AND_MEAN 
#include <windows.h> 
#include <windowsx.h> 
#include <mmsystem.h> 
#include <ddraw.h> 
#ifdef USE_DSOUND 
#include <dsound.h> 
#endif 
#include <stdio.h> 
#include <stdlib.h> 
#include <io.h> 
#include "resource.h" 
#include "ddutil.h" 
#ifdef USE_DSOUND 
#include "dsutil.h" 
#endif 
#include "input.h" 
 
#define DEF_SHOW_DELAY     (2000) 
 
#define IS_NUM(c)     ((c) >= '0' && (c) <= '9') 
#define IS_SPACE(c)   ((c) == ' ' || (c) == '\r' || (c) == '\n' || (c) == '\t' || (c) == 'x') 
 
 
enum 
{ 
    OBJ_DONUT = 0, 
    OBJ_PYRAMID, 
    OBJ_CUBE, 
    OBJ_SPHERE, 
    OBJ_SHIP, 
    OBJ_BULLET 
}; 
 
 
// program states 
enum 
{ 
    PS_SPLASH, 
    PS_ACTIVE, 
    PS_BEGINREST, 
    PS_REST 
}; 
 
#define     MAX_SCREEN_X    (ScreenX-1) 
#define     MAX_SCREEN_Y    (ScreenY-1) 
#define     MAX_DONUT_X     MAX_SCREEN_X - 64 
#define     MAX_DONUT_Y     MAX_SCREEN_Y - 64 
#define     MAX_DONUT_FRAME 30 
#define     MAX_PYRAMID_X     MAX_SCREEN_X - 32 
#define     MAX_PYRAMID_Y     MAX_SCREEN_Y - 32 
#define     MAX_PYRAMID_FRAME 40 
#define     MAX_SPHERE_X     MAX_SCREEN_X - 16 
#define     MAX_SPHERE_Y     MAX_SCREEN_Y - 16 
#define     MAX_SPHERE_FRAME 40 
#define     MAX_CUBE_X     MAX_SCREEN_X - 16 
#define     MAX_CUBE_Y     MAX_SCREEN_Y - 16 
#define     MAX_CUBE_FRAME 40 
#define     MAX_SHIP_X     MAX_SCREEN_X - 32 
#define     MAX_SHIP_Y     MAX_SCREEN_Y - 32 
#define     MAX_SHIP_FRAME 40 
#define     MAX_BULLET_X    MAX_SCREEN_X - 3; 
#define     MAX_BULLET_Y    MAX_SCREEN_Y - 3; 
#define     MAX_BULLET_FRAME 400 
 
 
// Offsets for the bullet bitmap 
#define     BULLET_X    304 
#define     BULLET_Y    0 
 
 
/* 
 * structures 
 */ 
 
/* 
 * DBLNODE - a node in a generic doubly-linked list 
 */ 
typedef struct _DBLNODE 
{ 
    struct  _DBLNODE    FAR *next;  // link to next node 
    struct  _DBLNODE    FAR *prev;  // link to previous node 
    SHORT               type;       // type of object 
    double              posx, posy; // actual x and y position 
    double              velx, vely; // x and y velocity (pixels/millisecond) 
    double              frame;      // current frame 
    double              delay;      // frame/millisecond 
    RECT                src, dst;   // source and destination rects 
    LPDIRECTDRAWSURFACE surf;       // surface containing bitmap 
} DBLNODE; 
typedef DBLNODE FAR *LPDBLNODE; 
 
double      Dirx[40] = 
{ 
    0.000000, 
    0.156434, 
    0.309017, 
    0.453991, 
    0.587785, 
    0.707107, 
    0.809017, 
    0.891007, 
    0.951057, 
    0.987688, 
    1.000000, 
    0.987688, 
    0.951057, 
    0.891007, 
    0.809017, 
    0.707107, 
    0.587785, 
    0.453990, 
    0.309017, 
    0.156434, 
    0.000000, 
    -0.156435, 
    -0.309017, 
    -0.453991, 
    -0.587785, 
    -0.707107, 
    -0.809017, 
    -0.891007, 
    -0.951057, 
    -0.987688, 
    -1.000000, 
    -0.987688, 
    -0.951056, 
    -0.891006, 
    -0.809017, 
    -0.707107, 
    -0.587785, 
    -0.453990, 
    -0.309017, 
    -0.156434 
}; 
 
double      Diry[40] = 
{ 
    -1.000000, 
    -0.987688, 
    -0.951057, 
    -0.891007, 
    -0.809017, 
    -0.707107, 
    -0.587785, 
    -0.453990, 
    -0.309017, 
    -0.156434, 
    0.000000, 
    0.156434, 
    0.309017, 
    0.453991, 
    0.587785, 
    0.707107, 
    0.809017, 
    0.891007, 
    0.951057, 
    0.987688, 
    1.000000, 
    0.987688, 
    0.951057, 
    0.891006, 
    0.809017, 
    0.707107, 
    0.587785, 
    0.453990, 
    0.309017, 
    0.156434, 
    0.000000, 
    -0.156435, 
    -0.309017, 
    -0.453991, 
    -0.587785, 
    -0.707107, 
    -0.809017, 
    -0.891007, 
    -0.951057, 
    -0.987688 
}; 
 
 
/* 
 * fn prototypes 
 */ 
void    DestroyGame( void ); 
BOOL    InitializeGame( void ); 
void    makeFontStuff( void ); 
void    UpdateFrame( void ); 
BOOL    CleanupAndExit( char *err ); 
BOOL    RestoreSurfaces( void ); 
BOOL    isDisplayListEmpty( void ); 
void    initShip( BOOL delay ); 
void    initLevel( int level ); 
void    addObject( SHORT type, double x, double y, double vx, double vy ); 
void    linkObject( LPDBLNODE new ); 
void    linkLastObject( LPDBLNODE new ); 
void    UpdateDisplayList( void ); 
void    DrawDisplayList( void ); 
int     randInt( int low, int high ); 
double  randDouble( double low, double high ); 
void    DeleteFromList( LPDBLNODE this ); 
void    CheckForHits( void ); 
void    bltScore( char *num, int x, int y ); 
void    DisplayFrameRate( void ); 
void    bltSplash( void ); 
void    EraseScreen( void ); 
void    FlipScreen( void ); 
void    DisplayLevel( void ); 
void    InitializeSound( void ); 
void    DestroySound( void ); 
 
#endif