当前位置:文档之家› 贪吃蛇游戏开发

贪吃蛇游戏开发

十一、贪吃蛇游戏开发
贪吃蛇:经典游戏,在一个花园中找苹果吃,吃了苹果会变长,速度变快。

碰到自己和墙就挂掉。

1:布局文件:使用了FrameLayout布局,FrameLayout内嵌套RelativeLayout。

2:自定义了TileView与SnakeView,TileView继承View,SnakeView继承TileView。

3:工程结构和类图
其实Snake的工程蛮简单的,源文件就三个:Snake.java SnakeView.java TileView.java。

Snake类是Activity,是这个游戏的入口点,TileView类进行游戏的绘画,SnakeView类则是对游戏控制操作的处理。

Coordinate,RefreshHandler是2个辅助类,也是SnakeView类中的内部类。

其中,Coordinate 是一个点的坐标(x,y),RefreshHandler将RefreshHandler对象绑定某个线程并给它发送消息。

如下图:
任何游戏都需要有个引擎来推动游戏的运行,最简化的游戏引擎就是:在一个线程中 While循环,检测用户操作,对用户的操作作出反应,更新游戏的界面,直到用户退出游戏。

在 Snake这个游戏中,辅助类 RefreshHandler继承自 Handler,用来把RefreshHandler与当前线程进行绑定,从而可以直接给线程发送消息并处理消息。

注意一点: Handle对消息的处理都是异步。

RefreshHandler在 Handler 的基础上增加 sleep()接口,用来每隔一个时间段后给当前线程发送一个消息。

handleMessage()方法在接受消息后,根据当前的游戏状态重绘界面,运行机制
如下:
运行机制 :
这比较类似定时器的概念,在特定的时刻发送消息,根据消息处理相应的事件。

update()与 sleep()间接的相互调用就构成了一个循环。

这里要注意:mRedrawHandle绑定的是 Avtivity所在的线程,也就是程序的主线程;另外由于 sleep()是个异步函数,所以 update()与 sleep()之间的相互调用才没有构成死循环。

最后分析下游戏数据的保存机制,如下:
这里考虑了 Activity的生命周期:如果用户在游戏期间离开游戏界面,游戏暂停;或者由于内存比较紧张, Android关闭游戏释放内存,那么当用户返回游戏界面的时候恢复到上次离开时的界面。

4、源码解析
贪吃蛇游戏使用了三个主类和两个内部类。

1)TitleView :一个游戏贴片(Tile)类,是我们的自定义View。

是它实现游戏画面的贴片计算、贴片的种类定义、贴片的绘制等和Tile相关的方法。

2)SnakeView :是TileView的子类,是游戏的主体类。

定义游戏状态、操作方式、游戏规则、初始化游戏、刷新视图、处理打电话导致游戏暂停时保存状态,接收焦点时恢复状态等等工作都在这个类中进行,注意它还是个View。

3)Snake :游戏窗口类,负责载入SnakeView,为SnakeView服务。

4)SnakeView.RefreshHandler : Handler类,刷新View
5) SnakeView.Coordinate : 坐标类,简化问题。

相关主题