www.pudn.com > Snakes.rar > UnitSnake.h


//--------------------------------------------------------------------------- 
 
#ifndef UnitSnakeH 
#define UnitSnakeH 
//--------------------------------------------------------------------------- 
#include  
//--------------------------------------------------------------------------- 
 
class TSnakeBuf 
{ 
public: 
  static const UnitX=28, UnitY=21, StageCount=10; 
 
  enum TDirection 
   { 
     sdUp    = VK_UP, 
     sdDown  = VK_DOWN, 
     sdLeft  = VK_LEFT, 
     sdRight = VK_RIGHT, 
   }; 
 
  enum TBmpNo 
   { 
     sbnNone   =  0, 
     sbnWall   =  1, 
     sbnBean   =  2, 
     sbnSuper  =  3, 
     sbnHead   =  4, 
     sbnHorz   =  5, 
     sbnVert   =  6, 
     sbnCornUL =  7, 
     sbnCornUR =  8, 
     sbnCornDL =  9, 
     sbnCornDR = 10, 
     sbnTailU  = 11, 
     sbnTailD  = 12, 
     sbnTailL  = 13, 
     sbnTailR  = 14, 
     sbnStage  = 15, 
   }; 
 
  enum TScore 
   { 
     ssEat = 1, //吃豆给分 
     ssStage = 0, //过关给分 
   }; 
 
  typedef struct TSnakeNode 
   { 
     int x; 
     int y; 
     TSnakeNode *Next; 
     TSnakeNode *Prev; 
   } TSnakeNode; 
 
  typedef struct 
   { 
     int x1; 
     int y1; 
     int x2; 
     int y2; 
   } TWall; 
 
  typedef union 
   { 
     struct 
      { 
        POINT Wall; 
        POINT Bean; 
        POINT Super; 
        POINT Head; 
        POINT Horz; 
        POINT Vert; 
        POINT CornUL; 
        POINT CornUR; 
        POINT CornDL; 
        POINT CornDR; 
        POINT TailU; 
        POINT TailD; 
        POINT TailL; 
        POINT TailR; 
        POINT Stage; 
      }; 
     POINT Pos[1]; 
   } TBmpPos; 
 
  static TWall Wall0[], Wall1[], Wall2[], Wall3[], Wall4[]; 
  static TWall Wall5[], Wall6[], Wall7[], Wall8[], Wall9[]; 
  static TWall *Walls[]; 
  static TBmpPos BmpPos[]; 
 
  void ClearScore(void); 
  void InitStage(int StgNum); 
  void StepMove(int d); 
  int GetDispBuf(int x, int y); 
 
  __property int Score = { read = _iScore }; 
  __property bool GameOver = { read = _bGameOver }; 
  __property bool EndStage = { read = _bEndStage }; 
  __property bool Running = { read = fGetRunning }; 
 
  TSnakeBuf(); 
  ~TSnakeBuf(); 
 
private: 
  TSnakeNode *_Snake; 
  int _iBeanNo, _iStageBeans, _iScore; 
  bool _bGameOver, _bEndStage; 
  int _Units[UnitY][UnitX]; 
  int _DispBuf[UnitY][UnitX]; 
 
  void ClearSnake(void); 
  void InitSnake(void); 
  int GetUnit(int x, int y); 
  void SetUnit(int x, int y, int n); 
  void DrawSnake(void); 
  bool GenBean(void); 
  void GenWalls(int StgNum); 
  bool fGetRunning(void); 
}; 
//--------------------------------------------------------------------------- 
 
class TSnakeTimer:public TThread 
{ 
public: 
  __property DWORD Interval = { read = dwWaitTime, write = fSetInterval }; 
  __fastcall TSnakeTimer(); 
  void __fastcall DestroyTimer(void); 
  void __fastcall TriggerTimer(int iWait=0); 
  void __fastcall (__closure *OnTimer)(TObject *Sender); 
protected: 
  void __fastcall Execute(void); 
private: 
  void __fastcall SyOnStart(void); 
  void __fastcall SyOnExit(void); 
  void __fastcall SyOnTimer(void); 
  HANDLE hTimer; 
  DWORD dwWaitTime, dwTimeToWait; 
  int iSkipUserEvent; 
  void __fastcall fSetInterval(DWORD dwIntv); 
}; 
//--------------------------------------------------------------------------- 
#endif