用VC++编写扫雷游戏
2008-11-13 19:30:42 来源:WEB开发网重载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中获得当前时间,减去游戏开始时的时间,在显示时间的客户区域显示得到的时间差(用数字位图),当游戏结束时(排完全部雷或被炸死)关闭定时器,停止显示。
WM_LBUTTOMDOWN消息响应函数OnLButtomDown是处理用户输入的主要执行者,函数首先判断点中位置是否是雷,是则关闭定时器,销毁原位图按钮,创建一对应正常和被炸死两种状态的新位图按钮,并调用SetState将其设置为PUSHDOWN(小人哭的状态),将m_bGameOver,置为TRUE标志游戏结束,否则先调用SetState 设置位图按钮为PUSHDOWN (小人笑的状态),并在OnLButtomUp中设置位图按钮为正常状态,然后调用Caculate函数记下周围雷的数目,最后调用Invalidate使客户区无效,迫使OnDraw函数重绘客户区域,在调用Invalidate时不应重画背景,避免闪烁,这样就完成了在雷区按下左键的响应动作。
WM_RBUTTOMDOWN消息响应函数OnLButtomDown将被认为有雷位置的m_iBombNum.findbomb置一,减少左上角的雷记数,然后判断是否真正全部排完了雷,是则结束游戏弹出INPUT对话框,让扫雷的人输入姓名,在响应IDOK通知码时将其写入注册表,没有全部排完则使客户区无效,迫使OnDraw函数重绘客户区域完成在雷区按下右键的动作。
更多精彩
赞助商链接