Android自带示例程序--Snake

本文解析了Android SDK中的Snake游戏示例程序,介绍了如何使用自定义View类DrawSnakeNode绘制游戏中的基本元素,并通过ControlSnake类控制游戏蛇的移动。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Android示例程序------->Snake解析(1)

2011-05-11 19:40:02

Android SDK中自带的有很多示例程序,这是我我们提高的很好的途径,多看这些文档对我们提高很有帮助。

此篇是对Snake的初步分析,后续还会更新较完整的解析。由于本人是初学Android 如果有错的地方或者更好的实现方法,

请不吝赐教,帮助处于新手阶段的我们。

分析Snake的程序,此程序的主体都是一个一个的小方块的东西实现的,android程序中叫TileView(切片),只是颜色不同而已。所以此篇我们从画一个TileView学起。

下面来看代码部分:

1.先自己定义一个类DrawSnakeNode继承View 用来画出一个方块;

package com.yin.snake; import android.content.Context; import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.drawable.Drawable; import android.util.AttributeSet; import android.view.View; public class DrawSnakeNode extends View { //每个Node(节点)的大小 private final int mTileSize =12; // private static String TAG = "SnakeDemo"; //新建一个画笔 private static Paint paint = new Paint(); private Bitmap mBitmap; //Node的坐标(x,y) private int x; private int y; public DrawView(Context context) { super(context); //获得一个Bitmap对象 mBitmap = loadTile(); } //继承自View的类的构造函数,必须重载,否则会抛出异常 public DrawView(Context context, AttributeSet attrs) { super(context, attrs); } //继承自View的类的构造函数,必须重载,否则会抛出异常 public DrawView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } public Bitmap loadTile(){ Resources r = getResources(); //获取图片的资源,Snake程序自带的有此图片 Drawable tile = r.getDrawable(R.drawable.greenstar); /** * 创建一个Bitmap *width : The width of the bitmap *height :The height of the bitmap *config :The bitmap config to create. * */ Bitmap bitmap = Bitmap.createBitmap(mTileSize, mTileSize,Bitmap.Config.ARGB_8888 ); Canvas canvas = new Canvas(bitmap); //设置图像的边界 tile.setBounds(0, 0, mTileSize, mTileSize); tile.draw(canvas); return bitmap; } //每次重画调用此方法 protected void onDraw(Canvas canvas) { super.onDraw(canvas); canvas.drawBitmap(mBitmap, x, y, paint); } public int getX() { return x; } public void setX(int x) { this.x = x; } public int getY() { return y; } public void setY(int y) { this.y = y; } }


2.创建一个控制类来控制Snake的移动 此篇是方块的移动

package com.yin.snake; import android.app.Activity; import android.os.Bundle; import android.view.KeyEvent; public class ContralSnake extends Activity { DrawSnakeNode dsn; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); dsn = new DrawView(getApplicationContext()); // setContentView(R.layout.main); setContentView(dsn); } public boolean onKeyDown(int keyCode, KeyEvent event) { if(keyCode == KeyEvent.KEYCODE_DPAD_UP){ dv.setY(dv.getY()-10); }else if(keyCode == KeyEvent.KEYCODE_DPAD_DOWN){ dv.setY(dv.getY()+10); }else if(keyCode == KeyEvent.KEYCODE_DPAD_LEFT){ dv.setX(dv.getX()-10); }else if(keyCode == KeyEvent.KEYCODE_DPAD_RIGHT){ dv.setX(dv.getX()+10); } //强制重画(跟新当前画面) dv.invalidate(); return super.onKeyDown(keyCode, event); } }


由于Bitmap等很多画图是来自JAVA中,不是很熟悉,可能写的有错误的地方,请积极指出,多多交流。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值