Chinaunix首页 | 论坛 | 博客
  • 博客访问: 103718100
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类: LINUX

2008-05-09 23:36:21

作者: lanterns     出自:
首先,从玩家的角度来看俄罗斯方块游戏。这个游戏由几种基本形状的砖头,依照一定的速度下降到窗口的底部。在下落过程中,砖头是可以翻转和移动的。当底部有砖头衔接,占据了一整条行的时候,就可以被消除掉。所以,我们的实现就分这么两大部分:后台处理部分和用户界面显示部分。

先看后台处理部分。游戏的核心数据结构是一个m*n的矩阵。每种样式的砖头出现的时候,都占据着矩阵中的几个个位置。

根据这些被占据的位置,我们把矩阵相应的位置的值设置为1。没有砖头的地方,矩阵的值就是0。同样,沉到底部的砖头占据的位置的矩阵元素的值也都设置为1。每到一定时间,定时器超时,或用户输入了命令,上方的砖头状态就要发生变化。或移动,或翻转,或下降。这个动作能否成功,取决于目标位置有没有障碍物,也就是说砖头的目标区域,有没有已经被设置为1的矩阵元素,或超出矩阵边界。如果不冲突,根据砖头的行为,调整矩阵的数值就可以了。

再看界面处理。界面的刷新,是由定时器超时,用户输入命令而触发的。每次相应事件发生的时候,对应的矩阵的元素数值就会发生变化。界面刷新并不管是什么原因造成矩阵数值变化,它只是简单根据现在矩阵的数值,把用户界面重新画一遍。更优化一些的算法可以是当定时器超时,或有用户命令的时候,这些事件把自己修改的矩阵范围传递给界面刷新程序。这样,界面刷新程序可以根据这个范围,只更新失效的界面区域,而不用把整个界面都重新更新。最后看看实现工具。后台处理部分,就是简单的数据结构的处理。用标准C或其它语言都可以实现。而界面实现部分,根据不同的平台,选择不同的实现工具。如果是window,就用microsoft提供的界面实现工具,如果是linux,可以选择GTK,或结合底层的xlib一起来实现。

出差在外,终于有大片的自己的时间,定定心心地,居然几天,把这个想了很久的linux下的俄罗斯方块给编写完了。

虽然还很粗糙,但是已经没有动力再往下写了。就这样告一段落吧。

本来想把源文件压缩,放上来

在Linux下用下面的命令进行编译:gcc -g -o russia Russia.c `pkg-config --libs --cflags gtk+-2.0`

注意,是`(反点),而不是'(引号)。

然后运行./russia就可以。空格变换方位,箭头进行移动。
阅读(482) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~