`
xusaomaiss
  • 浏览: 615663 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

Android ---snake源代码分析

阅读更多

 

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
5
2
分享到:
评论
1 楼 android_mini 2010-08-14  

我刚好在看贪吃蛇的游戏,下来研究研究

相关推荐

    android--snake分析

    《Android ---snake 源代码分析》这篇文章主要探讨的是经典的Android游戏——Snake的实现。Snake是一款简单而受欢迎的游戏,玩家通过控制一条小蛇在虚拟空间中移动,寻找食物(通常是苹果)。每当小蛇吃到食物,它的...

    android--snake分析.doc

    在Android平台上,Snake游戏是一款经典的小游戏,它的源码分析对于理解Android游戏开发和自定义View的实现非常有帮助。本文将深入探讨Snake游戏的源码结构,主要关注关键类的功能和交互。 首先,Snake类作为主游戏...

    Android上snake游戏源代码

    通过对这个源代码的分析和学习,开发者不仅可以掌握Android游戏开发的基本流程,还能深入了解Android UI组件、多线程编程、图形绘制和事件处理等方面的知识。同时,这也是一个很好的实践项目,可以帮助开发者提高...

    Android代码-Snake.zip

    【Android代码-Snake.zip】是一个与Android平台相关的项目压缩包,主要包含了一个经典游戏"Snake"的源代码实现。这个项目可能是一个教学示例,用于帮助开发者了解如何在Android平台上构建一个简单的游戏应用。接下来...

    android-snake-menu-炫酷动画菜单.zip

    通过阅读和理解其源代码,可以深入了解Android动画系统的原理,以及如何利用自定义View来实现复杂的效果。这有助于提升开发者在UI/UX设计方面的技能,为今后的项目开发提供更多可能性。 在实际应用中,"android-...

    android安卓贪吃蛇源代码

    1. "代写论文要求.doc":这可能是一个文档,包含了关于如何编写与贪吃蛇源代码相关的学术论文的要求,比如研究背景、技术实现、性能分析等方面,对于学习者来说,可以帮助他们理解如何将项目转化为学术成果。...

    Android 贪吃蛇游戏源代码

    下面,我们将对这个"Android 贪吃蛇游戏源代码"进行深入的分析和探讨。 首先,我们来看项目结构。在Eclipse环境下,导入这个项目后,你将看到包括`MainActivity.java`、`SnakeView.java`、`GameLoopThread.java`等...

    snake-and-ladder:Android游戏源代码-Android game source code

    snake-and-ladder:Android游戏源代码

    android游戏开发入门: 贪吃蛇 源代码分析.docx

    "Android 游戏开发入门:贪吃蛇源代码分析" 本文档主要讲解了 Android 游戏开发入门的知识点,通过分析贪吃蛇游戏的源代码,了解 Android 应用的基本架构、面向对象的思想,以及代码的简洁明了。该游戏的实现是基于...

    android游戏开发入门: 贪吃蛇 源代码分析.pdf

    《Android游戏开发入门:贪吃蛇源代码分析》 贪吃蛇是一款深受玩家喜爱的经典游戏,其简单易懂的操作和直观的游戏机制使其成为初学者学习游戏开发的理想选择。本文将深入解析Android平台上的贪吃蛇游戏源代码,帮助...

    android-snake-game:一个基于画布的简单android蛇游戏

    项目结构通常遵循Maven或Gradle的约定,包括src/main目录下的java和res目录,分别存放源代码和资源文件。 通过学习和分析这个项目,开发者不仅可以掌握Android游戏开发的基础,还能深化对Canvas绘图、事件处理、...

    Android 贪吃蛇 eclipse 源代码

    【Android 贪吃蛇 Eclipse 源代码详解】 Android平台以其开源性和强大的开发环境吸引着众多开发者。Eclipse作为早期流行的Android开发工具,提供了完善的集成开发环境(IDE)支持,使得开发者能够方便地创建、调试...

    Android-androidSurfaceView做的贪吃蛇

    在`TSnake-master`这个项目中,我们可以找到对应的源代码文件,包括游戏的主要类(如`SnakeGame`、`Snake`、`Food`等),以及相关的布局文件和资源。通过阅读和分析这些代码,可以进一步理解`SurfaceView`在实际项目...

    2011.09.20——— android sample之snake

    通过分析这个“snake”项目,开发者可以学习到如何在Android平台上进行游戏开发,包括: 1. **Android生命周期管理**:了解如何在Activity的不同状态间切换,并处理用户输入。 2. **视图操作**:学习如何使用View和...

    android 贪食蛇 应用程序 源代码

    【Android贪食蛇应用程序源代码】是一个典型的移动游戏开发示例,主要展示了如何在Android平台上构建一个简单但经典的贪食蛇游戏。这个源代码库包含了实现这个游戏所需的所有组件,包括图形用户界面、游戏逻辑和事件...

    Snake 贪吃蛇 源码

    通过分析这个MFC实现的贪吃蛇源码,我们可以深入理解Windows应用开发、C++编程、图形用户界面设计等多个领域,并且可以将这些知识应用于其他类型的游戏或软件开发中。对于初学者来说,这是一个很好的实践项目,可以...

    snake android游戏 源码

    4. 将源码文件导入项目,通常包括Java源代码和资源文件。 三、游戏核心机制解析 贪吃蛇游戏的核心部分主要包括以下几个方面: 1. 游戏逻辑:蛇的移动、食物生成、碰撞检测。蛇的位置通过数组或链表存储,每次移动后...

    安卓Android源码——Snake.zip

    在Snake.zip压缩包中,我们看到的主要文件是“Snake”这个项目,它遵循了标准的Android项目布局:包括`src`目录(存放Java源代码)、`res`目录(存放资源文件如布局、图片等)、`AndroidManifest.xml`(应用配置文件...

    Android程序源码--贪吃蛇.zip

    首先,我们关注到的文件夹`proj_snake`,这很可能是项目的主目录,包含了整个Android工程的配置文件、资源文件和Java源代码。在这里,开发者可能定义了游戏的主Activity,处理用户输入,控制游戏的启动和关闭,以及...

Global site tag (gtag.js) - Google Analytics