Android ---snake
源代码分析
前言:
snake代码分析将分成几个部分,先从snake中几个关键技术点分析起,之后是源代码结构性的分析,snake的结构将会以uml图的方式分析。最后我会把东西整成一份word文档。今天先把源代码分析弄上来。完整分析在附件中。
/**
*
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.
*
*/
翻译:
这个一个每个人都喜欢的简单的小游戏
Snake
是游戏的实现类,通过控制小蛇在花园中游走寻找苹果,注意,每吃掉一个苹果,小蛇身体不但会变的更长,还会移动的更敏捷,一旦撞上四周的墙或是碰到自己就会结束这次游戏。
代码结构分析:
Snake
:
主游戏窗口
SnakeView
:
游戏视图类,是实现游戏的主体类
TileView
:
一个处理图片或其它
Coordinate
:这是一个包括两个参数,用于记录
X
轴和
Y
轴简单类,其中包括一个比较函数
.
RefshHandler
:用于更新视图
源代码分析
Snake
状态分析:
在
snakeView
中定义了
snake
游戏的几种状态:
private int mMode = READY ;
public static final int PAUSE = 0; // 暂定
public static final int READY = 1; // 准备好了
public static final int RUNNING = 2; // 正在运行
public static final int LOSE = 3; // 结束 , 输了游戏
各种游戏状态
以上状态是通过:
void
setMode(int
newMode)
函数实现。
如何实现画出小方块:
参看:
http://yuefeng.iteye.com/blog/206706
public class DrawView extends View {
private final int mTileSize = 12;
private final String TAG = "DEMO" ;
private Paint pa = new Paint();
private Bitmap mTileArray ;
void loadImage(){
Resources r = this .getContext().getResources();
Drawable tile = r.getDrawable(R.drawable. redstar );
Bitmap bitmap = Bitmap.createBitmap ( mTileSize , mTileSize ,
Bitmap.Config. ARGB_8888 );
Canvas canvas = new Canvas(bitmap);
tile.setBounds(0, 0, mTileSize , mTileSize );
tile.draw(canvas);
mTileArray = bitmap;
}
public DrawView(Context context, AttributeSet attrs, int defStyle) {
super (context, attrs, defStyle);
// TODO Auto-generated constructor stub
loadImage();
x = 10;
y = 10;
Log.i ( TAG , "DrawView 2" );
}
// 如果没有这段代码,大家可以试一下,改用上面的代码,程序能否通过。
public DrawView(Context context, AttributeSet attrs) {
super (context, attrs);
// TODO Auto-generated constructor stub
loadImage();
Log.i ( TAG , "DrawView 3" );
}
@Override
protected void onDraw(Canvas canvas) {
super .onDraw(canvas);
Log.i ( TAG , "onDraw 1" );
canvas.drawBitmap( mTileArray , x , y , pa );
}
}
通过上面的文章可以画出小方块,但注意到
SnakeView
一共有两构造函数,那个函数才真正起作用呢?
public SnakeView(Context context, AttributeSet attrs)
public SnakeView(Context context, AttributeSet attrs, int defStyle)
通过加
log
的方式,判断是第一个构造函数起作用。
在第一个构造函数上方有一段注释:通过
XML
文件构造出
SnakeView
*
Constructs
a
SnakeView
based
on
inflation
from
XML
如果不使用这个构造函数,将会造成错误,可以试一下,看一下结果是怎样!本人得到如下的错误提示:
05-21 14:13:26.079: ERROR/AndroidRuntime(711):
Caused by: java.lang.NoSuchMethodException: DrawView
<!--
按键处理:
public boolean onKeyDown( int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
if (keyCode == KeyEvent. KEYCODE_DPAD_UP ) {
Log.i ( TAG , "KEYCODE_DPAD_UP" );
}
return super .onKeyDown(keyCode, event);
}
如何让我们的小方块动起来?
实现小方块动起来的秘密在于
view
的
public void
invalidate
()
大家可以参看
SDK
文档中关于
View
中
Drawing
中的一小段话
To force a view to draw, call invalidate()
.//
为了让
view
重画,可以调用
invalidate
函数
方法:
在
DrawView
类中添加两个成员:
private
int
x
,
y
;
同时实现
get,set
方法,
在构造函数中添加他们的初始值,
修改
onDraw
@Override
protected void onDraw(Canvas canvas) {
super .onDraw(canvas);
Log.i ( TAG , "onDraw 1" );
canvas.drawBitmap( mTileArray , x , y , pa );
}
4
.修改
onKeyDown
函数
@Override
public boolean onKeyDown( int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
if (keyCode == KeyEvent. KEYCODE_DPAD_UP ) {
Log.i ( TAG , "KEYCODE_DPAD_UP" );
dv .setX( dv .getX()+10);
dv .invalidate();
}
return super .onKeyDown(keyCode, event);
}
最后运行结果如下图:
我把第一阶段的代码放在hello.rar文中,由于是对snake游戏的试验性的分析,就在原来的hello工程中改写,下次会弄一个干净的工程。我尽量把分析的事例代码写的简单,所以只做加up事件,大家可以自行完善。
- 大小: 313.8 KB
- 大小: 6.7 KB
- 大小: 17.2 KB
- 大小: 20.8 KB
- 大小: 20.8 KB
- 大小: 20.9 KB
- 大小: 23.6 KB
分享到:
相关推荐
《Android ---snake 源代码分析》这篇文章主要探讨的是经典的Android游戏——Snake的实现。Snake是一款简单而受欢迎的游戏,玩家通过控制一条小蛇在虚拟空间中移动,寻找食物(通常是苹果)。每当小蛇吃到食物,它的...
在Android平台上,Snake游戏是一款经典的小游戏,它的源码分析对于理解Android游戏开发和自定义View的实现非常有帮助。本文将深入探讨Snake游戏的源码结构,主要关注关键类的功能和交互。 首先,Snake类作为主游戏...
通过对这个源代码的分析和学习,开发者不仅可以掌握Android游戏开发的基本流程,还能深入了解Android UI组件、多线程编程、图形绘制和事件处理等方面的知识。同时,这也是一个很好的实践项目,可以帮助开发者提高...
【Android代码-Snake.zip】是一个与Android平台相关的项目压缩包,主要包含了一个经典游戏"Snake"的源代码实现。这个项目可能是一个教学示例,用于帮助开发者了解如何在Android平台上构建一个简单的游戏应用。接下来...
通过阅读和理解其源代码,可以深入了解Android动画系统的原理,以及如何利用自定义View来实现复杂的效果。这有助于提升开发者在UI/UX设计方面的技能,为今后的项目开发提供更多可能性。 在实际应用中,"android-...
1. "代写论文要求.doc":这可能是一个文档,包含了关于如何编写与贪吃蛇源代码相关的学术论文的要求,比如研究背景、技术实现、性能分析等方面,对于学习者来说,可以帮助他们理解如何将项目转化为学术成果。...
下面,我们将对这个"Android 贪吃蛇游戏源代码"进行深入的分析和探讨。 首先,我们来看项目结构。在Eclipse环境下,导入这个项目后,你将看到包括`MainActivity.java`、`SnakeView.java`、`GameLoopThread.java`等...
snake-and-ladder:Android游戏源代码
"Android 游戏开发入门:贪吃蛇源代码分析" 本文档主要讲解了 Android 游戏开发入门的知识点,通过分析贪吃蛇游戏的源代码,了解 Android 应用的基本架构、面向对象的思想,以及代码的简洁明了。该游戏的实现是基于...
《Android游戏开发入门:贪吃蛇源代码分析》 贪吃蛇是一款深受玩家喜爱的经典游戏,其简单易懂的操作和直观的游戏机制使其成为初学者学习游戏开发的理想选择。本文将深入解析Android平台上的贪吃蛇游戏源代码,帮助...
项目结构通常遵循Maven或Gradle的约定,包括src/main目录下的java和res目录,分别存放源代码和资源文件。 通过学习和分析这个项目,开发者不仅可以掌握Android游戏开发的基础,还能深化对Canvas绘图、事件处理、...
【Android 贪吃蛇 Eclipse 源代码详解】 Android平台以其开源性和强大的开发环境吸引着众多开发者。Eclipse作为早期流行的Android开发工具,提供了完善的集成开发环境(IDE)支持,使得开发者能够方便地创建、调试...
在`TSnake-master`这个项目中,我们可以找到对应的源代码文件,包括游戏的主要类(如`SnakeGame`、`Snake`、`Food`等),以及相关的布局文件和资源。通过阅读和分析这些代码,可以进一步理解`SurfaceView`在实际项目...
通过分析这个“snake”项目,开发者可以学习到如何在Android平台上进行游戏开发,包括: 1. **Android生命周期管理**:了解如何在Activity的不同状态间切换,并处理用户输入。 2. **视图操作**:学习如何使用View和...
【Android贪食蛇应用程序源代码】是一个典型的移动游戏开发示例,主要展示了如何在Android平台上构建一个简单但经典的贪食蛇游戏。这个源代码库包含了实现这个游戏所需的所有组件,包括图形用户界面、游戏逻辑和事件...
通过分析这个MFC实现的贪吃蛇源码,我们可以深入理解Windows应用开发、C++编程、图形用户界面设计等多个领域,并且可以将这些知识应用于其他类型的游戏或软件开发中。对于初学者来说,这是一个很好的实践项目,可以...
4. 将源码文件导入项目,通常包括Java源代码和资源文件。 三、游戏核心机制解析 贪吃蛇游戏的核心部分主要包括以下几个方面: 1. 游戏逻辑:蛇的移动、食物生成、碰撞检测。蛇的位置通过数组或链表存储,每次移动后...
在Snake.zip压缩包中,我们看到的主要文件是“Snake”这个项目,它遵循了标准的Android项目布局:包括`src`目录(存放Java源代码)、`res`目录(存放资源文件如布局、图片等)、`AndroidManifest.xml`(应用配置文件...
首先,我们关注到的文件夹`proj_snake`,这很可能是项目的主目录,包含了整个Android工程的配置文件、资源文件和Java源代码。在这里,开发者可能定义了游戏的主Activity,处理用户输入,控制游戏的启动和关闭,以及...