【贪吃蛇—Java程序员写Android游戏】系列 1.Android SDK Sample-Snake详解
来源:互联网 发布:电脑网络电话软件 编辑:程序博客网 时间:2024/05/17 09:42
Snake也是一个经典游戏了,Nokia蓝屏机的王牌游戏之一。AndroidSDK 1.5就有了它的身影。我们这里就来详细解析一下Android SDKSample中的Snake工程。本工程基于SDK 2.3.3版本中的工程,路径为:%Android_SDK_HOME%/samples/android-10/Snake
一、Eclipse工程
通过File-New Project-Android-Android Project,选择“Create project fromexisting sample”创建自己的应用SnakeAndroid,如下图:
运行效果如下图:
二、工程结构和类图
其实Snake的工程蛮简单的,源文件就三个:Snake.javaSnakeView.java TileView.java。Snake类是这个游戏的入口点,TitleView类进行游戏的绘画,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关闭游戏释放内存,那么当用户返回游戏界面的时候恢复到上次离开时的界面。
三、源码解析
详细解析下源代码,由于代码量不大,以注释的方式列出如下:
1、Snake.java
2、SnakeView.java
3、TileView.java
四、工程文件下载
为了方便大家阅读,可以到如下地址下载工程源代码:
http://download.csdn.net/source/3145349
五、小结及下期预告:
本次详细解析了Android SDK 自带Sample——Snake的结构和功能。下次将会把这个游戏移植到J2ME平台上,并且比较Android和J2ME的区别和相通之处,让从事过J2ME开发的朋友对Android开发有个更加直观的认识。
- 【贪吃蛇—Java程序员写Android游戏】系列 1.Android SDK Sample-Snake详解
- 【贪吃蛇—Java程序员写Android游戏】系列 3. 用J2ME实现Android的Snake Sample详解
- 【贪吃蛇—Java程序员写Android游戏】系列 2. 用J2ME实现Android的Snake Sample预览
- 【贪吃蛇—Java程序员写Android游戏】系列 0. 前言几句话
- 【贪吃蛇—Java程序员写Android游戏】系列 0. 前言几句话
- 【贪吃蛇—Java程序员写Android游戏】系列 0. 前言几句话
- 【贪吃蛇—Java程序员写Android游戏】系列 0. 前言几句话
- 【贪吃蛇—Java程序员写Android游戏】系列 4.用Google SVN管理开源的Android项目
- 【贪吃蛇—Java程序员写Android游戏】系列5.Android新浪微博客户端实现——准备篇
- Snake on a phone——Android开源项目实战,贪吃蛇游戏
- android 项目实训—贪吃蛇Snake(一)
- Android SDK实例之Snake游戏深入解析(一)
- 开源小游戏-基于android sample snake
- Android SDK sample 之 SoftKeyboard 详解
- Android制作贪吃蛇游戏
- Android 贪吃蛇游戏小结
- java贪吃蛇Snake类的书写
- android SDK sample说明
- 转:C++多线程调试和测试的注意事项
- PHP on IIS7.5 (Win7)
- MySQL的基本使用
- 批量启用邮箱!
- Activity 之间实现自定义动画跳转
- 【贪吃蛇—Java程序员写Android游戏】系列 1.Android SDK Sample-Snake详解
- job 定时任务
- PHP webservice 身份认证 客户端与服务端实现
- BREW 与BREWMP的区别
- 格式化json串的网址
- 已排序的i个最大数
- java操作Excel
- makefile那些事儿
- 8个超棒的学习jQuery的网站