利用二维数组不同数字表示不同含义,然后在根据数字画出该位置的图像。
MapList.java(工具包,能够得到总共有多少关,得到各关的二维数组)
package edu.phshbox;public class MapList { /** * 用不同的数字表示不同的含义,用三维数组表示各个关卡, * 其中每个二维数组表示一关 * 0 nothing * 1 wall * 2 goal * 3 road * 4 box * 5 box at goal * 6 worker * */ public static int[][][] map = { { { 0, 0, 1, 1, 1, 0, 0, 0 }, { 0, 0, 1, 2, 1, 0, 0, 0 }, { 0, 0, 1, 3, 1, 1, 1, 1 }, { 1, 1, 1, 4, 3, 4, 2, 1 }, { 1, 2, 3, 4, 6, 1, 1, 1 }, { 1, 1, 1, 1, 4, 1, 0, 0 }, { 0, 0, 0, 1, 2, 1, 0, 0 }, { 0, 0, 0, 1, 1, 1, 0, 0 } }, { { 1, 1, 1, 1, 1, 0, 0, 0, 0 }, { 1, 6, 3, 3, 1, 0, 0, 0, 0 }, { 1, 3, 4, 4, 1, 0, 1, 1, 1 }, { 1, 3, 4, 3, 1, 0, 1, 2, 1 }, { 1, 1, 1, 3, 1, 1, 1, 2, 1 }, { 0, 1, 1, 3, 3, 3, 3, 2, 1 }, { 0, 1, 3, 3, 3, 1, 3, 3, 1 }, { 0, 1, 3, 3, 3, 1, 1, 1, 1 }, { 0, 1, 1, 1, 1, 1, 0, 0, 0 } } }; //总共有多少关 public static int count = map.length; public static int getCount() { return count; } //得到第几关的图 public static int[][] getMap(int grade) { if(grade<0&&grade>=count) grade=0; int row=map[grade].length; int col=map[grade][0].length; int[][] result=new int[row][col]; for(int i=0;i
GameMain.java
package edu.phshbox;import android.os.Bundle;import android.app.Activity;public class GameMain extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.game_main); }}
GameView.java
package edu.phshbox;import android.content.Context;import android.graphics.Bitmap;import android.graphics.Canvas;import android.graphics.Paint;import android.graphics.drawable.Drawable;import android.util.AttributeSet;import android.util.Log;import android.view.View;import android.view.WindowManager;public class GameView extends View { int width = 0; int oxOff=15; int oyOff=30; GameMain gameMain = null; public final int WALL=1; public final int GOAL=2; public final int ROAD=3; public final int BOX=4; public final int BOX_AT_GOAL=5; public final int WORKER=6; public static int picSize=30; private int map[][]=null; private int row=0; private int col=0; private static int grade=0; private Bitmap picture[]=null; public GameView(Context context, AttributeSet attrs) { super(context, attrs); gameMain = (GameMain) context; WindowManager win = gameMain.getWindowManager(); width = win.getDefaultDisplay().getWidth(); initMap(); reset(); initPicture(); } public void reset(){ row=map.length; col=map[0].length; picSize=(int)Math.floor((width-oxOff-oyOff)/col); Log.d("width",width+""); Log.d("pageSize",picSize+""); } //初始化地图 private void initMap() { map=MapList.getMap(grade); //resetRowCol(); } private void initPicture() { //resetPicSize(); picture=new Bitmap[7]; loadPicture(WALL,R.drawable.wall); loadPicture(GOAL,R.drawable.goal); loadPicture(ROAD,R.drawable.road); loadPicture(BOX,R.drawable.box); loadPicture(BOX_AT_GOAL,R.drawable.box_at_goal); loadPicture(WORKER,R.drawable.worker); } //加载图片 private void loadPicture(int key, int pictureId) { Drawable drawable=getResources().getDrawable(pictureId); Bitmap bitMap=Bitmap.createBitmap(picSize,picSize, Bitmap.Config.ARGB_8888); drawable.setBounds(0, 0, picSize, picSize); Canvas canvas=new Canvas(bitMap); drawable.draw(canvas); picture[key]=bitMap; } //根据所在位置的数字不同,画不同的图片到相应的位置上 @Override protected void onDraw(Canvas canvas) { Paint paint=new Paint(); for(int i=0;i0) canvas.drawBitmap(picture[map[i][j]], oxOff+picSize*j, oyOff+picSize*i, paint); } } super.onDraw(canvas); }}
运行结果: