这几天看侯SIR的《深入浅出MFC》,看完了觉得如果就这么放下可能效果不好,就做了个贪吃蛇,本来打算做另一个东西呢,结果发现现在知识储备还不够,还得看看书,再说吧!
贪吃蛇实现得比较简单,SDI,单线程,没用位图,因为我没搞明白怎么编辑和使用位图,而且在网上看到一个也没用位图的贪吃蛇范例,很好看,就用简单地矩形填充做了。
做的过程中遇到的问题大概记录一下:
首先是定时器,贪吃蛇肯定要定时器,用以推进游戏进度。MFC中定时器的用法是:
SetTimer()用以设置定时器,指定定时间隔和消息处理函数,改变时间间隔可以改变游戏难度,如果不指定消息处理函数则由framework调用OnTimer(),这也是一般的做法;
OnTimer()用以响应,在此中完成该做的工作;
KillTimer()使用结束杀掉定时器。
需要注意的是,只有CWnd的派生类才能接受定时器消息,所以只能在CMyView和CMainFrm中使用。SetTimer()必须在窗口完全产生之后调用,KillTimer()必须在窗口销毁之前调用,因此要掌握好时机,否则会导致一个ASSERT FAILED。
有了定时器,蛇就可以走了,由于贪吃蛇每次前进时全身所有点都向前挪一位,就相当于尾部节点接到头结点前面而其它节点不动,而这样做移动的效率就很高,为了适应这种操作,选用了CList<CPoint>作为描述Snake的数据结构。
改变蛇的运动方向要靠响应键盘信息,响应ON_COMMAND的WM_KEY_DOWN,如果响应WM_KEY_UP的话灵敏度不太够。
对于设置背景颜色、改变窗口风格也都轻车熟路了,多亏了侯SIR的书。
发现很多东西上网搜就可以,只要你明白它的原理,真的不用非得记住。
唉呀呀,上境界了。
赶紧抓紧看书吧!