计算机113 蒋镇阳
一、游戏分析
1、你需要考虑以下问题:
a) 界面
墙
蛇
苹果
b) 游戏逻辑
蛇走动
蛇的控制
苹果随机出现
蛇吃掉苹果
蛇长度增加
游戏在运行中,蛇的走动,转弯,吃掉苹果,怎么计算?二维数组实现,一个地图:map[x][y],墙边界、蛇的走边,吃苹果,都依靠坐标定位。
本游戏中有三种类型图片:墙,苹果(绿色) ,蛇头(红色),蛇身(黄色)
贪吃蛇游戏在游戏开发中碰撞检测属于“地图格子划分检测”。
即在游戏开发时,把屏幕划分成点阵的格子组成。
二、图形绘制
动态图形绘制:
动态图形绘制的基本思路:创建一个类继承View类(或继承SurfaceView类),覆盖onDraw方法,使用Canvas()对象在界面上绘制不同的图形,使用invalidate()方法刷新界面。
Canvas 画布 android.graphics 提供一些画图形的方法
Paint 画笔 用来描述图形的颜色和网格
Color 颜色 颜色常量和创建颜色的方法 RGB
Path 指定路径 如要画圆时,需要指定圆心和半径,Path一般用来从某个点移动到另一个点连线
三、游戏实现
1、初始化地图坐标。
前提一:屏幕的宽和高,在程序一开始就获取屏幕的宽和高。
protected void onSizeChanged(int w, int h, int oldw, int oldh){....}
w,h即为屏幕的宽和高。
前提二:地图的行数和列数,初始化地图数组map。
这些初始化的工作,在第一次加载时会首先调用onSizeChanged方法。
xcount =(int)Math.floor(w/size);
ycount = (int)Math.floor(h/size);
xoffset = (w-(xcount*size))/2;
yoffset = (h-(ycount*size))/2;
map = new int[xcount][ycount];
2、把图片加载进来,将用不同类型的图片绘制墙,蛇和苹果
public void loadPic(int key, Drawable drawable){
Bitmap bitmap = Bitmap.createBitmap(size,size,Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
drawable.setBounds(0, 0, size, size);
drawable.draw(canvas);
pics[key]=bitmap;
}
3、为地图数组赋值的方法:
public void setTile(int picIndex,int x,int y){
map[x][y]= picIndex;
}
4、 初始化边界墙。计算出边界,对map进行赋值。
public void buildWall(){
//横向
for (int x = 0; x < xcount; x++) {
setTile(GREEN_STAR, x, 0);
setTile(GREEN_STAR, x, ycount-1);
}
//纵向
for (int y = 0; y < ycount; y++) {
setTile(GREEN_STAR, 0, y);
setTile(GREEN_STAR, xcount-1, y );
}
}
5、绘制墙(边界)交给onDraw()方法。实际上蛇的走动,苹果出现,就是由此方法画出来。
for (int x = 0; x < xcount; x++) {
for (int y = 0; y < ycount; y++) {
//理解map[x][y]==0的情况
if(map[x][y]>0){
canvas.drawBitmap(pics[map[x][y]],
xoffset+x*size,
yoffset+y*size,
paint);
}
}
}