Android 贪吃蛇源码分析

Android 贪吃蛇源码分析 ackage com.example.android.snake;import android.app.Activity;import android.os.Bundle;import android.util.Log;import android.view.Window;import android.widget... ### Android贪吃蛇源码分析 #### 概述 在本次源码分析中,我们将深入研究一个基于Android平台的经典游戏“贪吃蛇”的实现细节。这款游戏通过简单的规则和直观的操作吸引了大量的用户。本文将从包结构、类设计、生命周期管理等方面进行详细解析。 #### 包与导入 该程序位于`com.example.android.snake`包下,这是典型的Android应用程序命名方式,以反向域名的形式定义。主要导入了以下包: - `android.app.Activity`: Activity是Android四大组件之一,负责界面的显示与交互。 - `android.os.Bundle`: 用于保存与恢复Activity的状态。 - `android.util.Log`: 提供日志打印功能,便于调试。 - `android.view.Window`: 用于控制Activity窗口的属性和行为。 - `android.widget.TextView`: 显示文本信息的视图组件。 #### Snake类详解 `Snake`类继承自`Activity`,它是整个游戏的入口点,负责初始化游戏界面并处理Activity的生命周期事件。 - **静态变量定义**: - `TAG`: 日志标记字符串,通常用于标识日志来源。 - `ICICLE_KEY`: 用于保存和恢复状态时的键名。 - **成员变量声明**: - `mSnakeView`: 主要的游戏逻辑和渲染视图。 - `mSnakeView`: `SnakeView`类型的实例,负责游戏的具体实现。 #### onCreate()方法 此方法在Activity被创建时调用,执行以下任务: - 关闭标题栏:通过调用`requestWindowFeature(Window.FEATURE_NO_TITLE)`隐藏默认的标题栏,提供更加沉浸式的游戏体验。 - 设置布局:通过`setContentView(R.layout.snake_layout)`设置主布局。 - 初始化`SnakeView`:获取布局中的`SnakeView`实例,并关联到`mSnakeView`变量。 - 根据保存实例状态设置模式: - 如果没有保存实例状态(即新启动),则设置为`READY`模式准备开始新游戏。 - 如果有保存实例状态,则尝试恢复状态;如果恢复失败,则设置为`PAUSE`模式。 #### onPause()方法 当Activity暂停时调用此方法,主要用于暂停游戏逻辑。具体操作为设置`mSnakeView`的模式为`PAUSE`。 #### onSaveInstanceState()方法 当系统需要保存Activity状态时调用此方法。它负责保存当前游戏状态,以便在Activity被销毁后重建时可以恢复。这里通过`mSnakeView.saveState()`方法保存状态,并将其放入`Bundle`对象中。 #### SnakeView类简介 `SnakeView`是游戏的主要视图组件,负责绘制游戏画面和处理游戏逻辑。根据上下文推测,它可能实现了`View`或其子类,并重写了相关方法以支持自定义绘图和触摸事件处理。其中包含游戏状态管理、碰撞检测、移动逻辑等功能。 #### 总结 通过以上分析,我们可以看出这款“贪吃蛇”游戏的实现相对简洁明了,遵循了良好的软件工程实践,如合理利用Activity生命周期、有效管理游戏状态等。此外,源码中还体现了Android开发的一些基本概念,如布局资源的使用、状态保存与恢复机制等。对于初学者来说,这是一个很好的学习案例,有助于理解Android应用的基本构建方式以及如何实现简单的游戏逻辑。



























import Android.app.Activity;
import Android.os.Bundle;
import Android.util.Log;
import Android.view.Window;
import Android.widget.TextView;
/**
* Snake: a simple game that everyone can enjoy.
*
* This is an implementation of the classic Game "Snake", in which you control a
* serpent roaming around the garden looking for apples. Be careful, though,
* because when you catch one, not only will you become longer, but you'll move
* faster. Running into yourself or the walls will end the game.
*
*/
public class Snake extends Activity {
private final static String TAG = "**** ***Snake***** *****";
private SnakeView mSnakeView;
private static String ICICLE_KEY = "snake-view";
/**
* Called when Activity is first created. Turns off the title bar, sets up
* the content views, and fires up the SnakeView.
*
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// No Title bar
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.snake_layout);
mSnakeView = (SnakeView) findViewById(R.id.snake);
mSnakeView.setTextView((TextView) findViewById(R.id.text));
if (savedInstanceState == null) {
// We were just launched -- set up a new game
mSnakeView.setMode(SnakeView.READY);
} else {
// We are being restored
Bundle map = savedInstanceState.getBundle(ICICLE_KEY);
if (map != null) {
mSnakeView.restoreState(map);
} else {
mSnakeView.setMode(SnakeView.PAUSE);
}
}
}
@Override
protected void onPause() {
剩余30页未读,继续阅读

- 粉丝: 1
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 用VB制作学生成绩管理系统.doc
- 互联网金融时代的企业融资方式方法与典型案例.ppt
- 互联网+时代运用新媒体创新高职学生创业就业教育探析.docx
- 大型石化企业内部网络防毒策略.docx
- 公路水路交通运输信息化“十”发展规划.doc
- 网络安全技术在铁通计费管理网中的应用.docx
- 物联网在物流仓储管理中的运用探究.docx
- 进控制在建设工程项目管理中的应用.doc
- java网络编程技术课程方案设计书.doc
- 可信网络安全架构.doc
- C兼容微处理器单片机PWM控制器设计方案.doc
- 《项目管理》教学大纲.doc
- 软件工程试卷试卷(二).doc
- PLC的全自动灌溉控制系统的设计方案.doc
- 基于ASP的精英培训网站的设计与实现.doc
- 利用卷积神经网络智能识别技术实现餐厅自助结账.docx



- 1
- 2
前往页