没有合适的资源?快使用搜索试试~ 我知道了~
首页阅读贪吃蛇源码j2me
阅读贪吃蛇源码j2me
需积分: 3 45 浏览量
更新于2023-05-24
评论
收藏 64KB DOC 举报
游戏wormgame是wtk里面自带的demo程序,虽然游戏很简单也很老,就是一般很常见的贪吃蛇游戏。但是既然作为demo程序,那么里面就有很多东西值得我们去思考,去学习。
资源详情
资源评论
资源推荐

游戏 是 里面自带的 程序,虽然游戏很简单也很老,就
是一般很常见的贪吃蛇游戏。但是既然作为 程序,那么里面就有很多东
西值得我们去思考,去学习。
首先看看这个游戏所采用的数据结构。如果没有看过贪吃蛇的源码,让我们
自己选择数据结构,那我们如何选择一个在空间和性能上都很好的数据结构呢。
可能很多人首先想到的是链表,符合游戏中的蛇长度的动态增加和减少。但是
我们讨论的是用 写的,如果采用链表的话自己需要去封装很多方法。有
没有 本来已经封装好的数据结构可以用呢?对,!这是 的
一个非常常用而且重要的数据结构。
如果就让我们用 来做这个游戏,那 里面我们放什么呢?很多
人会自然的想到,以组成贪吃蛇的每一个小方格子(在 中用的是 ,
英文不好,不知道该用什么词)为对象,然后放到 里面去,这样就可
以实现贪吃蛇长度的增加和减少,因为增加对应 ,减少对应
。如果这样做的话,那么每一个对象该定义什么数据成员
以及封装哪些方法呢?这样做是不是浪费空间了呢?因为当贪吃蛇的长度增长
以后,处于中间的小方格子似乎没有起到什么作用。那还有没有更好的方法呢?
让我们现在来看看这个 是怎么做的吧!
关于贪吃蛇的数据结构方面的类有两个 和 ,在
的开头作者就写了一段注释:
!"#$%
&"%'%
&(&%#
所以可以从这里就可以知道作者并不是将每个方格作为对象存到 里
面的,而是将贪吃蛇的一部份存进去的,其实真正存进去的只是一个带着这个
贪吃蛇的很多信息的对象。
的数据成员为 :
)'&*
*
&*

其中封装的方法有(以下只举例我认为比较重要的几个方法):
%+
%
,
,
)'&
%是增加长度,被封装到这个类里面,因为每个对象都携
带了从它开始的长度信息,同理 %也是的,至于它们的具体
实现,将在下文讲到画图的时候再具体讲。
,,,的作用是获得贪吃蛇尾部的坐标,从这个方法就可
以看出作者的高明之处,并不需要将每个方格子都存到 中去。比如初
始状态时贪吃蛇的长度为 -. 的话,就不需要向 里面存入 -. 个对象,
只需要将一个代表的对象存进去就可以了,然后通过 ,,,
来获取尾部的信息。这样做既节约空间又方便了以后的处理,特别是画图的处
理。
是碰撞检测简单的函数,在这个游戏里面的碰撞是比较简单的。
下面看类 '我们主要看几个重要的函数,同时从这几个函数的处理上
面可以看出作者在设计这个游戏时的高明之处。
!"#
"$%&'&()*&'&(+*

&'&(%"'*
&'&(,&#
-
,./#
0.#
".#
1'20.#
3
3
这是一个初始化的函数,当游戏开始或者从来一次时被调用的函数,这个函
数的作用很明显,在此就不作过多的解释了。
下面结合贪吃蛇最简单的移动,从左到右横向移动来说明函数
,。
我们先看 :
4
$%#
25*26*5*6#
#
-
./#7 #88
.$%!#
25.)#
26.")#
5.+#

6."+#
.%#
%*25*5*26*6*#
3
3
其中函数 的主要作用就是从 )- 到 )/ 或者 &- 到 &/ 画 个小方
格子,至于其具体实现就不再列出了。
从这个 函数可以确定我们刚才的推断是正确的,就是整条贪吃蛇是一
段一段被存放到 里面去的,画图的时候又一段一段的画出来的,
对象 有多少个元素就存在着多少段。
下面在来看 函数,其实 也是一个画图函数,但是奇怪的是,
为什么这个游戏不象别的游戏一样,将所有的画图都放在 里面呢?这里
单独定义一个画图函数的作用又是什么呢?其实我们从这个函数的函数名就可
以看出答案了,这个函数的作用是在于更新图像,但是又不是更新整个贪吃蛇,
而是根据头和尾部,来部分更新,这样就没有别要在画图的时候,每次都重画
整个屏幕,只需要更新贪吃蛇的部分就可以了,这也是一种节省系统开销的方
法。虽然对于这个游戏本身来说性能不会有太明显的区别,但是对于一些复杂
的游戏,画面丰富的游戏来说,这样做的效果就非常明显了。在后面的
类 0 里面调用这两个函数的时候,我们可以更加清楚地看到
这个作用。
下面讲解 函数的具体实现:
4$"2
$%*#
)*+#
-
剩余16页未读,继续阅读

















安全验证
文档复制为VIP权益,开通VIP直接复制

评论0