文档详情

【贪吃蛇—Java程序员写Android游戏】系列.doc

发布:2017-12-11约8.56千字共14页下载文档
文本预览下载声明
【贪吃蛇—Java程序员写Android游戏】系列 1.Android SDK Sample-Snake详解 (2011-03-31 15:32:43) 转载 标签: 贪吃蛇 android 游戏 sdk snake it 分类: 1.Android SnakeNokia蓝屏机的王牌游戏之一。Android SDK 1.5就有了它的身影。我们这里就来详细解析一下Android SDK Sample中的Snake工程。本工程基于SDK 2.3.3版本中的工程,路径为:%Android_SDK_HOME% /samples/android-10/Snake 一、Eclipse工程 通过File-New Project-Android-Android Project,选择“Create project from existing sample”创建自己的应用SnakeAndroid,如下图: 运行效果如下图: 二、工程结构和类图 其实Snake的工程蛮简单的,源文件就三个:Snake.java SnakeView.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 package com.deaboway.snake; import android.app.Activity; import android.os.Bundle; import android.widget.TextView; // 贪吃蛇: 经典游戏,在一个花园中找苹果吃,吃了苹果会变长,速度变快。碰到自己和墙就挂掉。 public class Snake extends Activity { private SnakeView mSnakeView; private static String ICICLE_KEY = snake-view; // 在 activity 第一次创建时被调用 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.snake_layout); mSnakeView = (SnakeView) findViewById(R.id.snake); mSnakeView.setTextView((TextView) findViewById(R.id.text)); // 检查存贮状态以确定是重新开始还是恢复状态 if (savedInstanceState == null) { // 存储状态为空,说明刚启动可以切换到准备状态 mSnakeView.setMode(SnakeView.READY); } else { // 已经保存过,那么就去恢复原
显示全部
相似文档