用VC++编写扫雷游戏(2)
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中获得当前时间,减去游戏开始时的时间,在显示时间的客户区域显示得到的时间差(用数字位图),当游戏结束时(排完全部雷或被炸死)关闭定时器,停止显示。
- 上一篇:浅析Windows消息机制
- 下一篇:用VC制作非常酷的工具条