zyzx的小窝

C/C++,GUI,个人移动存储,zyzx_lsl@163.com

 

N(4) 双缓存与脏矩形:记偶的贪吃蛇游戏实现

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
Tanchishe_H.png

tanchishe.cpp
Tanchishe_A_CPP.png
Tanchishe_B_CPP.png

如下是第6关的效果(尺寸没调好)
TanchesheTest.png

posted on 2009-04-27 17:10 zyzx 阅读(1367) 评论(1)  编辑 收藏 引用 所属分类: C/C++体会

评论

# re: N(4) 双缓存与脏矩形:记偶的贪吃蛇游戏实现[未登录] 2012-08-09 11:50 路人甲

学习了  回复  更多评论   


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


导航

统计

常用链接

留言簿(1)

随笔分类

随笔档案

常用链接

搜索

最新评论

阅读排行榜

评论排行榜