Game.h
上传用户:may_xy
上传日期:2007-08-09
资源大小:1519k
文件大小:4k
源码类别:

游戏

开发平台:

C/C++

  1. //主窗口句柄;
  2. extern HWND hWnd;
  3. class CMainFrame;
  4. //主窗口类指针;设为全局变量便于各个类访问其方法;
  5. extern CMainFrame* pCMainFrame;
  6. //关于Direct设备的类;
  7. //DirectInput设备接口指针;
  8. class CMyDirectInput;
  9. extern CMyDirectInput* pInput;
  10. //DirectDraw设备接口指针;
  11. class CMyDirectDraw;
  12. extern CMyDirectDraw* pDraw;
  13. extern LPDIRECTDRAWSURFACE7  lpddsprimary;   // 主表面;
  14. extern LPDIRECTDRAWSURFACE7  lpddsback;   //后缓冲表面;
  15. extern LPDIRECTDRAWSURFACE7  lpddsbg_Game;       //存放游戏界面的离屏表面;
  16. //游戏主体框架类;
  17. class CGame;
  18. //class CSingle_Game;
  19. extern CGame* pGame;
  20. //一张扑克;
  21. class CCard;
  22. //所有的牌;
  23. extern CCard g_cAllCards[54];
  24. //存储玩家信息的类;
  25. class CPlayerInfo;
  26. extern CPlayerInfo* pCenterPlayer;
  27. extern CPlayerInfo* pLeftPlayer;
  28. extern CPlayerInfo* pRightPlayer;
  29.   
  30. //扑克数据和算法类;
  31. class CPlayingCards;
  32. extern CPlayingCards* pLeftCards;     //左边玩家的牌对象;
  33. extern CPlayingCards* pCenterCards;   //主机玩家的牌对象;
  34. extern CPlayingCards* pRightCards;   //右边玩家的牌对象;
  35. //关于其他精灵的绘制引擎;
  36. class CDrawItemEngine;
  37. extern CDrawItemEngine* pDrawItem;
  38. //关于扑克绘制的引擎;
  39. class CDrawCardsEngine;
  40. extern CDrawCardsEngine* pDrawCards;
  41. //游戏牌面坐标系统;
  42. class CCardsMap;
  43. extern CCardsMap* pCardsMap;
  44. //网络设备;
  45. class CLink;
  46. extern  CLink* pServerLink1;  //连接客户1;
  47. extern  CLink* pServerLink2;  //连接客户2;
  48. extern  CLink* pClientLink;   //客户端1;
  49. //位置坐标;
  50. extern int  Screen_Width, Screen_Height;  //屏幕长,宽;
  51. extern int  Cards_Width,  Cards_Height;  //扑克长宽;
  52. //中间玩家未出的牌的起始位置;
  53. extern int Center_x0, Center_y0;  
  54. //中间玩家已经出过的牌;
  55. extern int  Center_x1, Center_y1;
  56. //中间玩家刚出的牌;
  57. extern int  Center_x2,     Center_y2; 
  58. //左边玩家未出的牌;
  59. extern int Left_x0, Left_y0;
  60. //左边玩家已经出过的牌;
  61. extern int Left_x1, Left_y1;
  62. //左边玩家刚出的牌;
  63. extern int Left_x2, Left_y2;
  64. //右边玩家未出的牌;
  65. extern int Right_x0, Right_y0; 
  66. //右边玩家已经出过的牌;
  67. extern int Right_x1, Right_y1;  
  68. //右边玩家刚出的牌;
  69. extern int Right_x2, Right_y2;  
  70. extern int Lord_Card1_x,  Lord_Card1_y;
  71. extern int Lord_Card2_x,  Lord_Card2_y;
  72. extern int Lord_Card3_x,  Lord_Card3_y;
  73. //发牌的起始位置;
  74. extern int Card_x;     
  75. extern int  Card_y;
  76. //左,右玩家未出与已出牌的间距:
  77. extern int Card_Distance0;
  78. //中间玩家未出的牌的间距;
  79. extern int Card_Distance1;
  80. //刚出的牌的间距
  81. extern int Card_Distance2;
  82. //中间扑克选择后突出的高度;
  83. extern int Card_Up;
  84. //游戏屏幕刷新函数;
  85. //bSprimary参数表示是否将重画显示到主表面,默认是显示到主表面;
  86. int RedrawGame(BOOL bSprimary = 1);
  87. class CPlayerInfo
  88. {
  89. public:
  90. int m_nPlayerType;   //0表示单人游戏,1表示服务器,2表示客户端;
  91. int m_nFaceID;
  92. char m_szName[6];
  93. int m_nScore; //得分;
  94. int m_nWin; //胜;
  95. int m_nLose; //负; 
  96. public:
  97. CPlayerInfo();
  98. };
  99. enum Who_Is_Lord{ no_player = -1, left_player = 0, center_player = 1, right_player = 2 };
  100. //游戏主体框架类;
  101. class CGame
  102. {
  103. public:
  104. //0代表左边玩家(电脑)是地主;1代表中间(本机)玩家,2代表右边玩家(电脑);
  105. int m_nCurrentLord; //当前地主;
  106. protected:
  107. int m_nDefaultLord; //默认地主;
  108. int m_nLordLock; //地主出牌锁定,
  109. //0表示左边锁定,1表示中间锁定,2表示右边锁定,-1解开;
  110. BOOL m_bButton; //延时锁;
  111. BOOL m_bOperate ; //是否允许用户选择牌;
  112. int m_nRoundCounter;    //计算一轮内出牌次数;
  113. int m_nBombCounter; //计算炸弹个数;
  114. int m_nGameCounter;     //计算牌局数; 
  115.     CRect m_cCardsRect; //未出牌区域;
  116. CRect m_cCardsUpRect; //提前牌区域;
  117. //注意:常量大写,加前缀,可加下划线;
  118. const CRect m_cOK_RECT; //出牌按钮;  
  119. const CRect m_cYES_RECT; //选择是否当地主; 是;
  120. const CRect m_cNO_RECT; //选择是否当地主; 否;
  121. const CRect m_cEXIT_RECT;   //退出游戏;
  122. protected:
  123. void ShuffleCards();
  124. void NewGame(); //开始新的牌局,洗牌;
  125. int CompareCards();     //比较当前牌是否为合法;
  126. void AccountScore(int player);
  127. virtual int CenterDoing() = 0; //本机(中间)玩家的出牌处理;
  128. virtual int LeftDoing() = 0; //左边玩家(电脑)思考,并决定要出的牌;
  129. virtual int RightDoing() = 0; //右边玩家(电脑)思考,并决定要出的牌;
  130. public:
  131. CGame();
  132. virtual ~CGame();
  133. void Init(); //游戏初始化
  134. int RefreshMyTurn(); //当轮到本机玩家出牌时的屏幕刷新函数;
  135. //要被其他用户调用,所以设为公有;
  136. //刷新菜单控制整个游戏生命周期的线程函数;
  137. static DWORD WINAPI RefreshMenu(LPVOID pParam);
  138. virtual int Run() = 0; //整个游戏过程的中枢;
  139. };