贪吃蛇游戏开发

发布时间:2014-08-05 11:06:53   来源:文档文库   
字号:

十一、贪吃蛇游戏开发

贪吃蛇: 经典游戏,在一个花园中找苹果吃,吃了苹果会变长,速度变快。碰到自己和墙就挂掉。

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

2:自定义了TileViewSnakeViewTileView继承ViewSnakeView继承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 : 坐标类,简化问题

本文来源:https://www.2haoxitong.net/k/doc/4dc236b3172ded630b1cb65b.html

《贪吃蛇游戏开发.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式