java小游戏2
一游戏介绍
二图像准备
墙、箱子、人、箱子目的地,人左边、人右边、人上边、人下边
三结构准备
地图是什么,我们把地图想象成一个网格,每个格子就是工人每次移动的步长,也是箱子移动的距离,设置一个二维数组,对于格子的x,y坐标由二维数组坐标公式 leftx+j*30,lefty+i*30,
定义一些常量,final byte wall=1这个是代表墙,box=2这个是代表箱子,boxend=3是代表放到目的地,mandow=5代表向下的人,manlef向左的人。。。。。
四判断
在玩家通过键盘控制工人推箱子的过程中。需要按照游戏规定进行判断是否响应该按键指示
如果前方是通道或目的地,工人进入p1方格,修改相关位置格子的状态值
地图数据
然后取出数据
地图是记录了人的坐标,就相当于我们每移动一步。需要保存当前游戏状态。也就是保存人的位置和游戏地图的当前状态,所以在撤销移动时,恢复地图也是通过此类获取需要人的位置。地图当前状态和关卡数
下面是游戏代码和解释部分
1——这是gamefram.java
public class GameFrame extends JFrame implements ActionListener, MouseListener// 主面板类
创建的类是继承了jframe这个父类,意味的可以使用这个父类的功能如jframe,jpanel.就是swing里面的组件学习。并且实现了actionlister接口,下面是这个接口的注释
您提供的代码是Java的ActionListener接口的官方文档注释和定义。这个接口是Java AWT(Abstract Window Toolkit)事件监听器体系的一部分,用于处理动作事件,如按钮点击或菜单选择等。
以下是ActionListener接口的关键点:
ActionListener 是一个标记接口,意味着它不包含任何方法之外的内容,只是简单地标记实现它的类能够处理动作事件。
该接口继承自 EventListener,这是一个标记接口,表明任何实现它的类都是事件监听器。
接口定义了一个方法 actionPerformed(ActionEvent e),当注册了这个监听器的组件触发了一个动作事件时,这个方法就会被调用。
actionPerformed 方法接收一个 ActionEvent 类型的参数,这个参数包含了关于事件的信息,比如事件源、事件类型以及与事件相关的任何额外信息。
使用 ActionListener 的类必须实现 actionPerformed 方法,以便在事件发生时执行相应的操作。
你可以通过调用组件的 addActionListener 方法来注册一个 ActionListener。
下面是一个简单的例子,展示了如何实现 ActionListener 接口:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class ButtonClickListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
// 当按钮被点击时,这里的代码会被执行
System.out.println("Button was clicked!");
}
}
在上述代码中,ButtonClickListener 类实现了 ActionListener 接口,并提供了 actionPerformed 方法的实现。当与这个监听器关联的按钮被点击时,控制台会打印出 "Button was clicked!"。
然后是定义一些常规的类属性
private int grade = 0;这个是相当第几关,能上到第几关
// row,column记载人的行号 列号
// leftX,leftY 记载左上角图片的位置 避免图片从(0,0)坐标开始
private int row = 7, column = 7, leftX = 0, leftY = 0;
// 记载地图的行列数
private int mapRow = 0, mapColumn = 0;
// width,height 记载屏幕的大小
private int width = 0, height = 0;
private boolean acceptKey = true;//这个是看到如超过了所进行的关卡,那么开始改变
// 程序所用到的图片
private Image pic[] = null;//存储地图的图片
// 定义一些常量,对应地图的元素
final byte WALL = 1, BOX = 2, BOXONEND = 3, END = 4, MANDOWN = 5,
MANLEFT = 6, MANRIGHT = 7, MANUP = 8, GRASS = 9, MANDOWNONEND = 10,
MANLEFTONEND = 11, MANRIGHTONEND = 12, MANUPONEND = 13;。因为地图是用二维数组表示的,所以用数字填充,占据位置
private byte[][] map = null;
private ArrayList list = new ArrayList();。这里是用来存储地图的状态,如撤销,重新进行下一关
Sound sound;,声音模块
下面是类中的方法
public void getManPosition() {
for (int i = 0; i < map.length; i++)
for (int j = 0; j < map[0].length; j++)
if (map[i][j] == MANDOWN || map[i][j] == MANDOWNONEND
|| map[i][j] == MANUP || map[i][j] == MANUPONEND
|| map[i][j] == MANLEFT || map[i][j] == MANLEFTONEND
|| map[i][j] == MANRIGHT || map[i][j] == MANRIGHTONEND) {
row = i;
column = j;
break;
}
}
getmanposition,这个是为了获得人的位置,这里相当于是
[[1,1,1,1,1,1]
[ 1,1,1,1,1,1],
[1,1,1,1,1,1]
这样的行列结构。第一次是有多少行,第二次多少列。判断一下mandown,manup的位置在地图的哪个方向
将地图的那个位置标记为找到玩家后
row = i;
column = j;然后break
信息框提示
public void DisplayToast(String str) {
JOptionPane.showMessageDialog(null, str, "提示",
JOptionPane.ERROR_MESSAGE);
}
撤销移动的undo.java
public void undo() {
if (acceptKey) {
// 撤销
if (list.size() > 0) {
// 若要撤销 必须走过
Map priorMap = (Map) list.get(list.size() - 1);
map = priorMap.getMap();
row = priorMap.getManX();
column = priorMap.getManY();
repaint();
list.remove(list.size() - 1);
} else
DisplayToast("不能再撤销!");
} else {
DisplayToast("此关已完成,不能撤销!");
}
}
这里有个accepkey.如果通过了所有关卡,那么就没必要撤销了
然后如果listsize大于0,这个时候必须要走了一步或几步的样子,才能实现undo
然后定义一个map环境的promap对象,
Map priorMap = (Map) list.get(list.size() - 1);
list.get(list.size() - 1)
: 这行代码从list
中获取最后一个元素。list
是一个列表,它存储了游戏状态的快照,每次玩家移动时,当前的游戏状态都会被添加到这个列表的末尾。list.size() - 1
计算出列表的最后一个元素的索引。
(Map)
: 这是一个类型转换操作,它将list.get(list.size() - 1)
返回的对象强制转换为Map
类型。这里假设list
是一个List
,它存储了Map
类型的对象,每个对象代表游戏在某个特定时刻的状态。
priorMap
: 这是一个局部变量,用于存储从列表中获取的最后一个地图状态。现在priorMap
包含了游戏在最后一次移动之前的状态,包括玩家的位置、箱子的位置以及地图的其他元素。
所以list相当于是存储走的,然后获取走的最后一步
2下面这个是map类
public class Map {
int manX=0;
int manY=0;
byte map[][];
int grade;
// 此构造方法用于撤销操作
//撤销操作只需要人的位置和地图的当前状态(人的位置也可以不要,为了方便而加入)
public Map(int manX,int manY,byte [][]map)
{
this.manX=manX;
this.manY=manY;
int row=map.length;
int column=map[0].length;
byte temp[][]=new byte[row][column];
for(int i=0;i<row;i++)
for(int j=0;j<column;j++)
temp[i][j]=map[i][j];
this.map=temp;
}
// 此构造方法用于保存操作
//恢复地图时需要人的位置,地图当前状态,关卡数(关卡切换时此为基数)
public Map(int manX,int manY,byte [][]map,int grade)
{
this(manX,manY,map);
this.grade=grade;
}
public int getManX() {
return manX;
}
public int getManY() {
return manY;
}
public byte[][] getMap() {
return map;
}
public int getGrade() {
return grade;
}
}
所以我们可以看到用了
public Map(int manX,int manY,byte [][]map)
{
this.manX=manX;
this.manY=manY;
int row=map.length;
int column=map[0].length;
byte temp[][]=new byte[row][column];
for(int i=0;i<row;i++)
for(int j=0;j<column;j++)
temp[i][j]=map[i][j];
this.map=temp;
}这里会复制一个真正的map类相当于记录map类的状态
这里的构造方法,并将list类型赋值为了map类,将map,column,row都设置好了后。用
repaint();重新绘制
nextgrade方法,java
public void nextGrade() {
// grade++;
if (grade >= MapFactory.getCount() - 1) {
DisplayToast("恭喜你完成所有关卡!");
acceptKey = false;
} else {
grade++;
initMap();
repaint();
acceptKey = true;
}
}
这里如果关卡没通过,然后递增grade++,后面是调用方法intmap()
intmap方法
public void initMap() {
map = getMap(grade);
list.clear();
getMapSizeAndPosition();
getManPosition();
// Map currMap=new Map(row, column, map);
// list.add(currMap);
}
这里有个getmap(gtade)就是找到下一关。
其中getmap方法是
public byte[][] getMap(int grade) {
return MapFactory.getMap(grade);
}
mapfactory.getmap方法是放在mapfactory里面
public static byte[][] getMap(int grade)
{ byte temp[][];//一个缓存区
if(grade>=0 && grade<count)
temp=map[grade];
else
temp=map[0];
int row=temp.length;
int column=temp[0].length;//这个第一关的长度,
byte[][] result=new byte[row][column];
for(int i=0;i<row;i++)
for(int j=0;j<column;j++)
result[i][j]=temp[i][j];
return result;
}
选择这里面的存储的关卡
priorgrade.java
public void priorGrade() {
grade--;
acceptKey = true;
if (grade < 0)
grade = 0;
initMap();
repaint();
}
这个是退回前面一关,这里也是grade--,然后初始化,然后重绘
下面是构造器gamframe.java
public GameFrame() {
super("推箱子游戏带音乐版");
setSize(600, 600);
setVisible(true);
setResizable(false);
setLocation(300, 20);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container cont = getContentPane();
cont.setLayout(null);
cont.setBackground(Color.black);
// 最初始13张图片
getPic();
width = this.getWidth();
height = this.getHeight();
this.setFocusable(true);
initMap();
// 构造方法执行时从优先数据中恢复游戏
// 关卡切换时调用initMap()
// resumeGame();
this.addKeyListener(this);
this.addMouseListener(this);
sound = new Sound();
sound.loadSound();
}
//其中getpic方法是获得
public void getPic() {
pic = new Image[14];
for (int i = 0; i <= 13; i++) {
pic[i] = Toolkit.getDefaultToolkit().getImage(
"images\\pic" + i + ".JPG");
}
}加载一下pic列表
然后initmap初始化地图数据
为其增加监听方法。并且加载声音类
this.addKeyListener(this);
this.addMouseListener(this);
sound = new Sound();
sound.loadSound();
后面是获取地图的位置,这是为了让地图在窗口居中显示
然后是grassorend方法
public byte grassOrEnd(byte man) {
byte result = GRASS;
if (man == MANDOWNONEND || man == MANLEFTONEND || man == MANRIGHTONEND
|| man == MANUPONEND)
result = END;
return result;
}
这个实在移动时候来判断人向左,向右,向前走的时候将
人刚才站的地方变成 grassOrEnd(map[row][column])
map[row][column] = grassOrEnd(map[row][column]);
人在站是时侯会替换掉
人刚才站的地方变成 grassOrEnd(map[row][column])
map[row][column] = grassOrEnd(map[row][column]);
就是相当于是 人 p1 p2,这里人移动到了p1那么原先占据的位置变成了通道,p1就变成了人
下面是重要的方法
move.方法
private void moveUp() {
// 上一位p1为WALL
if (map[row - 1][column] == WALL)
return;
// 上一位p1为 BOX,BOXONEND,须考虑P2
if (map[row - 1][column] == BOX || map[row - 1][column] == BOXONEND) {
// 上上一位p2为 END,GRASS则向上一步,其他不用处理
if (map[row - 2][column] == END || map[row - 2][column] == GRASS) {
Map currMap = new Map(row, column, map);
list.add(currMap);
byte boxTemp = map[row - 2][column] == END ? BOXONEND : BOX;
byte manTemp = map[row - 1][column] == BOX ? MANUP : MANUPONEND;
// 箱子变成temp,箱子往前一步
map[row - 2][column] = boxTemp;
// 人变成MANUP,往上走一步
map[row - 1][column] = manTemp;
// 人刚才站的地方变成GRASS或者END
map[row][column] = grassOrEnd(map[row][column]);
// 人离开后修改人的坐标
row--;
}
} else {
// 上一位为 GRASS,END,不须考虑P2。其他情况不用处理
if (map[row - 1][column] == GRASS || map[row - 1][column] == END) {
Map currMap = new Map(row, column, map);
list.add(currMap);
byte temp = map[row - 1][column] == END ? MANUPONEND : MANUP;
// 人变成temp,人往上走一步
map[row - 1][column] = temp;
// 人刚才站的地方变成GRASS或者END
map[row][column] = grassOrEnd(map[row][column]);
// 人离开后修改人的坐标
row--;
}
}
}
请注意,这里我们是moveup向上走的,那么这个时候我们的原先的位置就属于下面,如
[1,1,1,1,1,1,1,1,]
[1,1,1,1,1,1,1,1,]
若玩家在2,2位置的话,向上判断1,2是不是墙。
后面是如果是box或者是boxend。这个时候直接弄完了
if (map[row - 1][column] == BOX || map[row - 1][column] == BOXONEND) {
// 上上一位p2为 END,GRASS则向上一步,其他不用处理
if (map[row - 2][column] == END || map[row - 2][column] == GRASS) {
Map currMap = new Map(row, column, map);
list.add(currMap);
byte boxTemp = map[row - 2][column] == END ? BOXONEND : BOX;
byte manTemp = map[row - 1][column] == BOX ? MANUP : MANUPONEND;
// 箱子变成temp,箱子往前一步
map[row - 2][column] = boxTemp;
// 人变成MANUP,往上走一步
map[row - 1][column] = manTemp;
// 人刚才站的地方变成GRASS或者END
map[row][column] = grassOrEnd(map[row][column]);
// 人离开后修改人的坐标
row--;
}
}
map,
Map currMap = new Map(row, column, map); list.add(currMap);这里
这行代码创建了一个新的地图对象 currMap
,它保存了当前玩家的位置和地图状态。这是为了实现悔棋功能,允许玩家撤销到之前的状态。
这里为了
byte boxTemp = map[row - 2][column] == END ? BOXONEND : BOX;
byte manTemp = map[row - 1][column] == BOX ? MANUP : MANUPONEND;
// 箱子变成temp,箱子往前一步
map[row - 2][column] = boxTemp;
// 人变成MANUP,往上走一步
map[row - 1][column] = manTemp;
// 人刚才站的地方变成GRASS或者END
map[row][column] = grassOrEnd(map[row][column]);
// 人离开后修改人的坐标
row--;
这段代码是为了实现推箱子游戏中玩家推动箱子的逻辑。具体来说,它执行以下步骤:
确定箱子移动后的状态:
byte boxTemp = map[row - 2][column] == END ? BOXONEND : BOX;
如果箱子移动后的位置是目的地(END),则箱子状态更新为 BOXONEND。
如果箱子移动后的位置是空地(GRASS),则箱子状态保持为 BOX。
确定玩家移动后的状态:
byte manTemp = map[row - 1][column] == BOX ? MANUP : MANUPONEND;
如果玩家原本站在箱子上,则玩家移动后的状态更新为 MANUP(表示玩家现在站在空地上)。
如果玩家原本不在箱子上,则玩家移动后的状态更新为 MANUPONEND(表示玩家现在站在目的地)。
更新地图状态以反映箱子的移动:
map[row - 2][column] = boxTemp;
将箱子移动到新位置,并更新该位置的状态。
更新地图状态以反映玩家的移动:
map[row - 1][column] = manTemp;
将玩家移动到新位置,并更新该位置的状态。
更新玩家原来站立的位置:
map[row][column] = grassOrEnd(map[row][column]);
调用 grassOrEnd 方法来决定玩家离开后,原来位置的状态。如果该位置原来是目的地(END),则保持不变;否则,更新为空地(GRASS)。
修改玩家的坐标以反映其移动:
row--;
将玩家的行坐标减一,表示玩家向上移动了一步。
整体来看,这段代码实现了以下功能:
玩家推动箱子向上移动一步。
箱子移动到新位置,并更新其状态。
玩家跟随箱子向上移动一步,并更新其状态。
玩家原来的位置根据 grassOrEnd 方法的返回值更新状态。
更新玩家的位置坐标。
这是推箱子游戏中处理玩家推动箱子动作的标准逻辑。
- 玩家推动箱子的情况:玩家和箱子都需要移动,且箱子的新位置必须是END或GRASS。
- 玩家单独移动的情况:玩家移动到的位置必须是END或GRASS,而不涉及箱子。。分两种情况了 ,推了箱子和自己走
再来解释一下map类
public class Map {
int manX=0;
int manY=0;
byte map[][];
int grade;
// 此构造方法用于撤销操作
//撤销操作只需要人的位置和地图的当前状态(人的位置也可以不要,为了方便而加入)
public Map(int manX,int manY,byte [][]map)
{
this.manX=manX;
this.manY=manY;
int row=map.length;
int column=map[0].length;
byte temp[][]=new byte[row][column];
for(int i=0;i<row;i++)
for(int j=0;j<column;j++)
temp[i][j]=map[i][j];
this.map=temp;
}
// 此构造方法用于保存操作
//恢复地图时需要人的位置,地图当前状态,关卡数(关卡切换时此为基数)
public Map(int manX,int manY,byte [][]map,int grade)
{
this(manX,manY,map);
this.grade=grade;
}
public int getManX() {
return manX;
}
public int getManY() {
return manY;
}
public byte[][] getMap() {
return map;
}
public int getGrade() {
return grade;
}
}
在mapfactory里面
import java.io.InputStream;
public class MapFactory {
static byte map[][][]={
{
{ 0, 0, 1, 1, 1, 0, 0, 0 },
{ 0, 0, 1, 4, 1, 0, 0, 0 },
{ 0, 0, 1, 9, 1, 1, 1, 1 },
{ 1, 1, 1, 2, 9, 2, 4, 1 },
{ 1, 4, 9, 2, 5, 1, 1, 1 },
{ 1, 1, 1, 1, 2, 1, 0, 0 },
{ 0, 0, 0, 1, 4, 1, 0, 0 },
{ 0, 0, 0, 1, 1, 1, 0, 0 }
},
{
{ 1, 1, 1, 1, 1, 0, 0, 0, 0 },
{ 1, 9, 9, 5, 1, 0, 0, 0, 0 },
{ 1, 9, 2, 2, 1, 0, 1, 1, 1 },
{ 1, 9, 2, 9, 1, 0, 1, 4, 1 },
{ 1, 1, 1, 9, 1, 1, 1, 4, 1 },
{ 0, 1, 1, 9, 9, 9, 9, 4, 1 },
{ 0, 1, 9, 9, 9, 1, 9, 9, 1 },
{ 0, 1, 9, 9, 9, 1, 1, 1, 1 },
{ 0, 1, 1, 1, 1, 1, 0, 0, 0 }
},
{
{ 0, 1, 1, 1, 1, 1, 1, 1, 0, 0 },
{ 0, 1, 9, 9, 9, 9, 9, 1, 1, 1 },
{ 1, 1, 2, 1, 1, 1, 9, 9, 9, 1 },
{ 1, 5, 9, 9, 2, 9, 9, 2, 9, 1 },
{ 1, 9, 4, 4, 1, 9, 2, 9, 1, 1 },
{ 1, 1, 4, 4, 1, 9, 9, 9, 1, 0 },
{ 0, 1, 1, 1, 1, 1, 1, 1, 1, 0 }
},
{
{ 0, 1, 1, 1, 1, 0 },
{ 1, 1, 9, 9, 1, 0 },
{ 1, 9, 5, 2, 1, 0 },
{ 1, 1, 2, 9, 1, 1 },
{ 1, 1, 9, 2, 9, 1 },
{ 1, 4, 2, 9, 9, 1 },
{ 1, 4, 4, 3, 4, 1 },
{ 1, 1, 1, 1, 1, 1 }
},
{
{ 0, 1, 1, 1, 1, 0, 0, 0 },
{ 0, 1, 5, 9, 1, 1, 1, 0 },
{ 0, 1, 9, 2, 9, 9, 1, 0 },
{ 1, 1, 1, 9, 1, 9, 1, 1 },
{ 1, 4, 1, 9, 1, 9, 9, 1 },
{ 1, 4, 2, 9, 9, 1, 9, 1 },
{ 1, 4, 9, 9, 9, 2, 9, 1 },
{ 1, 1, 1, 1, 1, 1, 1, 1 }
},
{
{ 0, 0, 0, 1, 1, 1, 1, 1, 1, 1 },
{ 0, 0, 1, 1, 9, 9, 1, 9, 5, 1 },
{ 0, 0, 1, 9, 9, 9, 1, 9, 9, 1 },
{ 0, 0, 1, 2, 9, 2, 9, 2, 9, 1 },
{ 0, 0, 1, 9, 2, 1, 1, 9, 9, 1 },
{ 1, 1, 1, 9, 2, 9, 1, 9, 1, 1 },
{ 1, 4, 4, 4, 4, 4, 9, 9, 1, 0 },
{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 0 }
},
{
{ 0, 0, 0, 1, 1, 1, 1, 1, 1, 0 },
{ 0, 1, 1, 1, 9, 9, 9, 9, 1, 0 },
{ 1, 1, 4, 9, 2, 1, 1, 9, 1, 1 },
{ 1, 4, 4, 2, 9, 2, 9, 9, 5, 1 },
{ 1, 4, 4, 9, 2, 9, 2, 9, 1, 1 },
{ 1, 1, 1, 1, 1, 1, 9, 9, 1, 0 },
{ 0, 0, 0, 0, 0, 1, 1, 1, 1, 0 }
},
{
{ 0, 0, 1, 1, 1, 1, 1, 1 },
{ 0, 0, 1, 9, 9, 9, 9, 1 },
{ 1, 1, 1, 2, 2, 2, 9, 1 },
{ 1, 5, 9, 2, 4, 4, 9, 1 },
{ 1, 9, 2, 4, 4, 4, 1, 1 },
{ 1, 1, 1, 1, 9, 9, 1, 0 },
{ 0, 0, 0, 1, 1, 1, 1, 0 }
},
{
{ 0, 0, 1, 1, 1, 1, 1, 0 },
{ 1, 1, 1, 9, 9, 9, 1, 0 },
{ 1, 9, 9, 2, 4, 9, 1, 1 },
{ 1, 9, 9, 4, 2, 4, 5, 1 },
{ 1, 1, 1, 9, 3, 2, 9, 1 },
{ 0, 0, 1, 9, 9, 9, 1, 1 },
{ 0, 0, 1, 1, 1, 1, 1, 0 }
},
{
{ 0, 0, 1, 1, 1, 1, 0, 0 },
{ 0, 0, 1, 4, 4, 1, 0, 0 },
{ 0, 1, 1, 9, 4, 1, 1, 0 },
{ 0, 1, 9, 9, 2, 4, 1, 0 },
{ 1, 1, 9, 2, 9, 9, 1, 1 },
{ 1, 9, 9, 1, 2, 2, 9, 1 },
{ 1, 9, 9, 5, 9, 9, 9, 1 },
{ 1, 1, 1, 1, 1, 1, 1, 1 }
},
{
{ 1, 1, 1, 1, 1, 1, 1, 1 },
{ 1, 9, 9, 1, 9, 9, 9, 1 },
{ 1, 9, 2, 4, 4, 2, 9, 1 },
{ 1, 5, 2, 4, 3, 9, 1, 1 },
{ 1, 9, 2, 4, 4, 2, 9, 1 },
{ 1, 9, 9, 1, 9, 9, 9, 1 },
{ 1, 1, 1, 1, 1, 1, 1, 1 }
},
{
{ 0, 0, 1, 1, 1, 1, 1, 1, 0, 0 },
{ 0, 0, 1, 9, 9, 9, 9, 1, 1, 1 },
{ 0, 0, 1, 9, 2, 9, 9, 9, 9, 1 },
{ 1, 1, 1, 9, 2, 9, 1, 1, 9, 1 },
{ 1, 4, 4, 4, 9, 2, 9, 9, 9, 1 },
{ 1, 4, 4, 4, 2, 1, 2, 9, 1, 1 },
{ 1, 1, 1, 1, 9, 1, 9, 2, 9, 1 },
{ 0, 0, 0, 1, 9, 9, 5, 9, 9, 1 },
{ 0, 0, 0, 1, 1, 1, 1, 1, 1, 1 }
},
{
{ 1, 1, 1, 1, 1, 1, 0, 0, 0 },
{ 1, 9, 9, 5, 9, 1, 0, 0, 0 },
{ 1, 9, 2, 2, 2, 1, 1, 0, 0 },
{ 1, 9, 9, 1, 4, 4, 1, 1, 1 },
{ 1, 1, 9, 9, 4, 4, 2, 9, 1 },
{ 0, 1, 9, 9, 9, 9, 9, 9, 1 },
{ 0, 1, 1, 1, 1, 1, 1, 1, 1 }
},
{
{ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1 },
{ 0, 0, 1, 9, 9, 9, 1, 4, 9, 1 },
{ 0, 1, 1, 9, 9, 2, 4, 4, 4, 1 },
{ 0, 1, 9, 9, 2, 9, 1, 3, 4, 1 },
{ 1, 1, 9, 1, 1, 2, 1, 9, 1, 1 },
{ 1, 9, 9, 9, 2, 9, 9, 2, 9, 1 },
{ 1, 9, 9, 9, 1, 9, 9, 9, 9, 1 },
{ 1, 1, 1, 1, 1, 1, 1, 5, 9, 1 },
{ 0, 0, 0, 0, 0, 0, 1, 1, 1, 1 }
},
{
{ 0, 1, 1, 1, 1, 1, 1, 1, 0, 0 },
{ 0, 1, 4, 4, 4, 4, 9, 1, 0, 0 },
{ 1, 1, 1, 4, 4, 4, 2, 1, 1, 1 },
{ 1, 9, 9, 2, 1, 2, 9, 2, 9, 1 },
{ 1, 9, 2, 2, 9, 9, 1, 2, 9, 1 },
{ 1, 9, 9, 9, 9, 1, 9, 9, 9, 1 },
{ 1, 1, 1, 1, 5, 9, 9, 1, 1, 1 },
{ 0, 0, 0, 1, 1, 1, 1, 1, 0, 0 }
},
{
{ 1, 1, 1, 1, 1, 1, 1 },
{ 1, 4, 4, 2, 4, 4, 1 },
{ 1, 4, 4, 1, 4, 4, 1 },
{ 1, 9, 2, 2, 2, 9, 1 },
{ 1, 9, 9, 2, 9, 9, 1 },
{ 1, 9, 2, 2, 2, 9, 1 },
{ 1, 9, 9, 1, 8, 9, 1 },
{ 1, 1, 1, 1, 1, 1, 1 }
},
{
{ 0, 1, 1, 1, 1, 1, 0, 0 },
{ 0, 1, 9, 5, 9, 1, 1, 1 },
{ 1, 1, 9, 1, 2, 9, 9, 1 },
{ 1, 9, 3, 4, 9, 4, 9, 1 },
{ 1, 9, 9, 2, 2, 9, 1, 1 },
{ 1, 1, 1, 9, 1, 4, 1, 0 },
{ 0, 0, 1, 9, 9, 9, 1, 0 },
{ 0, 0, 1, 1, 1, 1, 1, 0 }
},
{
{ 1, 1, 1, 1, 1, 1 },
{ 1, 9, 9, 9, 9, 1 },
{ 1, 9, 2, 9, 9, 1 },
{ 1, 1, 3, 9, 5, 1 },
{ 1, 9, 3, 9, 1, 1 },
{ 1, 9, 3, 9, 1, 0 },
{ 1, 9, 3, 9, 1, 0 },
{ 1, 9, 4, 9, 1, 0 },
{ 1, 1, 1, 1, 1, 0 }
},
{
{ 0, 0, 1, 1, 1, 1, 0 },
{ 0, 0, 1, 9, 9, 1, 0 },
{ 1, 1, 1, 2, 9, 1, 1 },
{ 1, 9, 9, 3, 9, 9, 1 },
{ 1, 9, 9, 3, 9, 9, 1 },
{ 1, 9, 9, 3, 9, 1, 1 },
{ 1, 1, 1, 3, 9, 1, 0 },
{ 0, 0, 1, 4, 1, 1, 0 },
{ 0, 0, 1, 1, 1, 0, 0 }
},
{
{ 1, 1, 1, 1, 1, 0, 0, 0, 0 },
{ 1, 9, 9, 9, 1, 1, 1, 1, 1 },
{ 1, 9, 1, 9, 1, 9, 9, 9, 1 },
{ 1, 9, 2, 9, 9, 9, 2, 9, 1 },
{ 1, 4, 4, 1, 2, 1, 2, 1, 1 },
{ 1, 4, 5, 2, 9, 9, 9, 1, 0 },
{ 1, 4, 4, 9, 9, 1, 1, 1, 0 },
{ 1, 1, 1, 1, 1, 1, 0, 0, 0 }
}
};
static int count=map.length;//判断有几个地图
/*public static byte[][] getMap(int grade)
{
if(grade>=0 && grade<count-1)
return map[grade].clone();
return map[0].clone();
}*/
public static byte[][] getMap(int grade)
{ byte temp[][];//一个缓存区
if(grade>=0 && grade<count)
temp=map[grade];
else
temp=map[0];
int row=temp.length;
int column=temp[0].length;//这个第一关的长度,
byte[][] result=new byte[row][column];
for(int i=0;i<row;i++)
for(int j=0;j<column;j++)
result[i][j]=temp[i][j];
return result;
}
public static int getCount()
{
return count;
}
}