龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > VC开发 >

用VC++编写扫雷游戏(2)

时间:2009-12-30 15:42来源:未知 作者:admin 点击:
分享到:
5. 游戏的主要工作就是呈现不断变换的图形或动画,并按用户的输入交互进行显示,而Windows文档-----视窗构架中的视窗的功能正是接受用户输入并负责显示

  5. 游戏的主要工作就是呈现不断变换的图形或动画,并按用户的输入交互进行显示,而Windows文档-----视窗构架中的视窗的功能正是接受用户输入并负责显示,因此由CView类来完成扫雷的大部分工作。在CBombView中定义下列成员变量记录相关操作的结果或对象的状态。
Bomb m_bomb[30][30]; //最大的地雷区域

CString m_CurrentTime; //用于记录并显示扫雷时间

CTime m_BeginTime;//记录游戏开始时的时间

BOOL m_TimerBegin;//定时器是否开启

int m_iBomNum;//雷的数目

int m_iRow;//雷的行数

int m_iColumn;//雷的列数

int m_iBombFound;//指示被认为是雷的数目

CBitmapButton m_bitButton;//控制区的位图按钮

int m_CurrentLevel;//指示当前游戏的级别

BOOL m_bIsColor;//指示当前是彩色还是单色

CBitmap m_bmBomb[12];//用于存放12个小位图

int m_iGameOver;//游戏未结束置0,已清除所有的雷置1,被炸死置2。

  重载CBombView中OnCreate函数创建位图按钮,该位图按钮的两幅位图对应了正常、排雷正确两种状态,当要显示被炸死的状态时应动态销毁该按钮,并重新创建一位图对应正常和被炸死两种状态,将该位图按钮的ID号定为ID_GAME_BEGIN,这样一来当点击按钮时便可重新开始游戏,部分代码如下。

CRect rcclient;

GetClientRect(&rcclient);

CRect rect(rcclient.cx/2-8,10,rcclient.cx/2+8,20);

m_Button.Create("New",BS_DEFPUSHBUTTON|WS_VISIBLE|

BS_OWNERDRAW,rect,this,ID_GAME_BEGIN);

m_Button.LoadBitmaps(IDB_FACE1, IDB_FACE2);
 
  显示时间的功能相对比较简单,在响应第一个WM_LBUTTOMDOWN消息时开启定时器,并记录游戏开始的时间,在WM_TIME消息响应函数OnTimer中获得当前时间,减去游戏开始时的时间,在显示时间的客户区域显示得到的时间差(用数字位图),当游戏结束时(排完全部雷或被炸死)关闭定时器,停止显示。

精彩图集

赞助商链接