tag:C,双缓存,脏矩形,Win32,API
/* Create by zyzx
* Created 2008-07-02
* Modified 2008-07-03
*/
翻开学生时代的作品,真是百味俱全啊。在追求编程真谛的道路上,迷茫过,痛苦过,也兴奋过,至今也持续这些感觉,可惜不再那么的强烈。
看了看大二那会做的东东:贪吃蛇游戏,感觉就像小孩子过家家纯粹好玩。虽然编程手法上,就那个样,但它确实令我拨开了编程的面纱。又看了大一那会也做的个玩意(用VB做的),终于知道囧字咋写的了,显示一个物体用一个PictureBox框,结果屏幕上N多PictureBox框框,程序没多大,却卡得不行,呵呵。
贪吃蛇的基本思路:用一个循环链表(可增减)记录蛇,标记蛇头、蛇尾。蛇的移动,对于程序内部来说,只是蛇头和蛇尾的标记发生变化。碰撞检查,也就是检查蛇头将前行的一个位置,是否在蛇本身或出界或不可通过点。用一个二维数组标记不可通过点。
UI表现:准备一个画布(与HDC相兼容的DC或是Image等),首先绘制背景,然后绘制遮挡物体(不可通过点),最后绘制贪吃蛇。完成绘制后将画布复制粘贴到屏幕上。这就是双缓存思想了,可叹咱刚开始为解决屏幕闪烁问题苦苦思索了几个星期。当时咱压根不知道网上有这多知识可以查到,寝室联个网,除了上门户网站就是打游戏了,呵呵。
这里如果要再提高帧速率,还可以使用“脏矩形”,原理即:由于画面后一张与前面一张只有某些部分变化,因此只需要更新这些部分即可。典型的如Window的窗口系统就是使用的“脏矩形”技术局部更新。
用户操作:玩家使用上下左右箭头控制,这里使用的是定时器控制帧率。比如每隔N毫秒检查一次方向键盘的状态,确定移动方向,判断能否移动。。。
此处由于做的东西比较小,耗时不是很多,所以没有碰到帧率过快或过慢而影响控制的问题。实际的大型游戏中,这里可是比较关键的部分啊,搞得不好就像曾经“传奇”的加速外挂那样,一秒种内砍几千下,呵呵。。
整个程序文件如下:一个头文件和一个实现文件。
程序是基于Win32的API编程的,所以使用了Window的编程模板。按钮绘图动画等等都是直接使用Win32的API实现。
tanchishe.h