Snake是Android
SDK例子程序中的一个小游戏,工程源代码:android-sdk-windows-1.5_r2\platforms\android-1.1
\samples\Snake。这个小游戏在手机、游戏机、电脑中都出现过,游戏具体的玩法想必大家都知道,我主要是从Android开发应用程序的角度
来分析这个游戏的框架、结构等。
首先将工程添加到Eclipes中,看源代码,分析类之间的关系,如下:
整个工程主体也就3个类:Snake,SnakeView,TitleView。Activity,View,Handler是Android
SDK提供的基础类,Coordinate,RefreshHandler是2个辅助类,也是SnakeView类中的内部类。其
中,Coordinate就相当于是一个点的坐标(x,y),RefreshHandler的主要功能是将RefreshHandler对象绑定某个线程
并与给它发送消息。Snake类是这个游戏的入口点,TitleView类负责游戏的绘画,SnakeView类负责对游戏控制操作的处理。类的结构在上
图中已经清晰说明,主要接口解析如下:
TitleView extends View |
继承的接口 |
onSizeChanged() |
在视图大小改变的时候调用,比如说手机由垂直旋转为水平 |
onDraw() |
在视图需要重画的时候调用,比如说使用invalidate刷新界面上的某个矩形区域 |
|
|
|
Snake extends TitleView |
继承的接口 |
onKeyDown() |
监听用户键盘操作,并处理这些操作 |
新增加的接口 |
restoreState()/saveState() |
恢复/保存游戏的数据 |
|
update() |
重新计算当前游戏的数据 |
|
|
|
然后具体分析整个游戏的框架,任何一个游戏都需要有个引擎来推动游戏的运行,最简化的游戏引擎就是:在一个线程中While循环,检测用户操作,对
用户的操作作出反应,更新游戏的界面,直到用户退出游戏。先解析下RefreshHandler这个辅助类的作用,RefreshHandler继承至
Handler,其主要作用就是把RefreshHandler与当前线程进行绑定,然后就可以直接给线程发送消息并处理消息,有一点需要强调的
是:Handle对消息的处理都是异步。RefreshHandler在Handler的基础上增加sleep()接口,其主要作用就是每隔一个时间段后
给当前线程发送一个消息;而handleMessage()则就是在接受消息后,让界面对当前的游戏状态作出处理,运行机制如下:
实际上以上就相当于一个定时器,在特定的时刻发送消息,根据消息处理相应的事件。Update()与Sleep()这2个函数间接的相互调用就构成
了一个循环。需要注意的是:mRedrawHandle绑定的是Avtivity所在的线程,也就是程序的主线程;另外由于sleep()是个异步函数,
所以Update()与Sleep()之间的相互调用才没有构成死循环。
最后分析下游戏数据的保存机制,如下:
以上主要考虑了Activity的生命周期:如果用户在游戏期间离开游戏界面,游戏暂停;如果由于内存比较紧张,Android关闭游戏释放内存,那么当用户返回游戏界面的时候恢复到上次离开时的界面。
Snake源代码的内部细节,就不额外说明,在了解了框架后,再阅读代码就轻松多了。
总结说明
通过学习Snake这个简单的游戏,初步学习了如何开发游戏的界面、如何处理游戏的交互、如何保存游戏的数据等,这为我们以后开发更加复杂的游戏打好坚实的基础。
分享到:
相关推荐
《Android上的Snake游戏源代码解析》 在移动设备上,Snake游戏是一款经典的休闲娱乐游戏,深受用户喜爱。本文将深入探讨一个特别针对Android平台优化的Snake游戏源代码,旨在帮助开发者理解和学习如何在Android环境...
接下来,我们将深入探讨Android开发基础知识以及如何在Android上创建Snake游戏。 1. **Android开发环境搭建** 在开始编写Android代码之前,首先需要安装Android Studio,它是Google官方提供的集成开发环境(IDE)...
本篇将深入探讨一款基于Android SDK 1.6 和 Eclipse 开发的贪吃蛇游戏源码,帮助你了解Android游戏开发的基本原理和实践技巧。 一、Android SDK 1.6 环境介绍 Android SDK 1.6,代号Donut,是Android系统的一个早期...
本篇文章将详细解析如何制作SnakeGame,主要涉及以下几个核心知识点: 1. **游戏框架构建**: SnakeGame基于Java Swing构建,首先需要创建一个名为SnakeGame的类,这个类继承自JFrame,以利用JFrame提供的窗口功能...
本篇文章将深入解析一款名为"Snake_snake_贪吃蛇_"的简单贪吃蛇源代码,帮助读者理解游戏背后的编程逻辑和实现方法。 首先,我们来看游戏的核心组成部分:蛇的移动与增长。贪吃蛇的基本原理是,蛇头会按照预设的...
"Snake(j2me).rar"这个压缩包中包含了使用J2ME编写的贪吃蛇游戏源码,对于想要了解或深入学习J2ME游戏开发的程序员来说,这是一个非常宝贵的资源。 J2ME是Java平台的一个子集,专为资源有限的嵌入式设备设计,如...
【标题解析】:“windows_snake.zip_c++做贪吃蛇_snake_windows api游戏”这个标题表明,这是一个使用C++编程语言开发的、基于Windows API的游戏项目,具体是经典的“贪吃蛇”游戏。该游戏被封装在一个名为“windows...
本文将深入解析这段源代码,探讨其中的关键知识点。 首先,C语言是编程的基础,它以其简洁、高效和高度可移植性而被广泛使用。在贪吃蛇游戏中,C语言的特性得到了充分的体现。源代码snake.c主要由结构体、循环、...
《Snake-Haskell:Haskell语言中的经典Snake游戏实现解析》 Snake-Haskell是一个利用Haskell编程语言和Gloss游戏库创建的Snake游戏实现项目。在这个项目中,开发者借助Haskell的强大功能和Gloss库的图形渲染能力,...
《DOS Snake游戏:C++实现与类的设计思想解析》 在计算机编程的历史长河中,经典的DOS操作系统孕育了许多经典的小游戏,其中"Snake"(贪吃蛇)无疑是深受玩家喜爱的一款。本文将深入探讨一个用C++语言在DOS环境下...
《Snake游戏源码解析》 Snake游戏,作为一款经典的像素级游戏,自1976年诞生以来,就以其简单的规则和高度的可玩性深受玩家喜爱。在本篇文章中,我们将深入探讨Snake游戏的源码,理解其背后的编程逻辑和技术实现。 ...
### 贪吃蛇Snake游戏开发详解:Java版 #### 引言 贪吃蛇(Snake)是一款经典的益智游戏,玩家控制一条蛇在屏幕上移动,吃掉屏幕上的食物来增长身体长度,同时避免撞到自己的身体或边界。本文将深入解析如何使用Java...
《贪吃蛇游戏源码解析》 贪吃蛇游戏,作为一个经典的计算机程序,深受程序员和游戏爱好者的喜爱。"skyblue_Snake"这个项目,就是一款基于编程语言实现的贪吃蛇游戏的源代码。它为我们提供了一个深入理解游戏逻辑、...
《基于Go语言的终端Snake游戏开源项目解析》 在当今的编程世界中,开源项目扮演着至关重要的角色,它们促进了技术的共享与创新。今天我们要探讨的开源项目是"DyegoCosta-snake-game",这是一款在终端上运行的Go语言...
【文件解析】"Color snake.doc" 文件可能包含以下内容:游戏背景介绍,详细的游戏规则,如何操作蛇移动,如何得分,可能存在的特殊机制,如颜色与游戏功能的关联,以及一些游戏提示和技巧。此外,还可能有开发者对于...
标题"Snake:用python 3.7.2的tkinter编写的经典Snake游戏"表明这是一个使用Python编程语言的3.7.2版本,结合Tkinter图形库开发的 Snake 游戏项目。Snake游戏是一款广为人知的早期计算机游戏,玩家通过控制一条不断...
在snake游戏中,会涉及到触摸屏事件、按键事件等,需要解析事件处理代码,理解它们如何响应用户操作。 5. **线程管理**:游戏通常需要在独立的线程中运行,以避免阻塞主线程。因此,我们要关注Handler、Looper和...
"Snake_snake_基于Qt5的贪吃蛇游戏实现_QT5_" 这个标题明确指出我们要讨论的是一个使用Qt5框架开发的贪吃蛇游戏项目。Qt5是一个跨平台的C++应用程序开发框架,特别适合创建图形用户界面(GUI)应用。贪吃蛇是一款...
《Snake游戏——C++编程实践解析》 "Snake--cPP.rar_snake"这个压缩包文件,是一个关于经典游戏“Snake”(贪吃蛇)的C++编程实例。通过学习和理解这个实例,初学者可以快速掌握C++编程的基础知识,并了解到如何...