红联Linux门户
Linux帮助

linux下的俄罗斯方块游戏思路

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

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

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

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

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

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

本来想把源文件压缩,放上来http://bigstone1998.googlepages.com/russiabrick.rar

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

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

然后运行./russia就可以。空格变换方位,箭头进行移动。
文章评论

共有 3 条评论

  1. wjh173069597 于 2009-11-25 20:45:14发表:

    学习学习学习~

  2. 国民贾 于 2009-06-28 20:10:44发表:

    谢谢LZ方向,要是有教程就更好了!

  3. BMVR 于 2009-06-28 10:32:12发表:

    谢谢楼主,很好的学习模板!