推箱子游戏(黄臻,潘方舟)

来源:互联网 发布:淘宝专业秒杀电话 编辑:程序博客网 时间:2024/06/10 00:33
经典的推箱子是一个来自日本的古老游戏,目的是在训练你的逻辑思考能力。在一个狭小的仓库中,要求把木箱放到指定的位置,稍不小心就会出现箱子无法移动或者通道被堵住的情况,所以需要巧妙的利用有限的空间和通道,合理安排移动的次序和位置,才能顺利的完成任务。
推箱子游戏界面


性能测试:








程序设计的思路
 
我们把地图想象成一个网格,每个格子就是工人每次移动的步长(这里为30像素),也是箱子移动的距离,这样问题就简化多了。首先我们设计一个mapRow *mapColumn的二维数组map。按照这样的框架来思考。对于格子的(X,Y)两个屏幕像素坐标,可以由二维数组下标(i,j)换算。
换算公式为:leftX + j * 30, leftY + i* 30
每个格子状态值分别用枚举类型值:
    // 定义一些常量,对应地图的元素
    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;
 
每个格子状态值分别用枚举类型值:
    // 定义一些常量,对应地图的元素
    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;
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)站在目的地向上的人。
存储的原始地图中格子的状态值数组采用相应的整数形式存放。
 
游戏规则
 
可以假设工人移动趋势方向向右,其他方向原理是一致的。P1,P2分别代表工人移动趋势方向前两个方格。
 
1.前方P1是围墙
如果工人前方是围墙(即阻挡工人的路线)
{
    退出规则判断,布局不做任何改变;
}
2.前方P1是通道(GRASS)或目的地(END)
如果工人前方是通道或目的地
{
    工人可以进到P1方格;修改相关位置格子的状态值。
}




程序设计的步骤:
1.设计地图数据类(MapFactory.java)地图数据类保存所有关卡的原始地图数据,每关数据类保存所有关卡的原始地图数据,每关数据为一个二维数组。所以此处map是三维数组。
2.设计地图类(Map.java)由于每移动一步,需要保存当前的游戏状态,所以此处定义此地图类,保存人的位置和游戏地图的当前状态。撤销移动时,恢复地图是通过此类获取需要人的位置,地图当前状态,关卡数。
3.设计游戏面板类(GameFrame.java)
游戏面板类完成游戏的界面刷新显示,以及相应鼠标键盘相关事件。
事后总结:在这次与黄臻的合作中,我体会到了团队合作的重要性。同时,也对Java游戏编程有了更深的了解,此次编程借鉴的是其他人的代码,由于刚刚接触游戏编程,还没有能力在此基础上进行创新(仅仅做到看懂并运行测试),望老师谅解。
提出过程改进计划:在下一次团队合作中,一定要注意分工明确这一点。同时,应提高自身的编程能力,及思考视野。
整个游戏的源文件说明:
GameFrame.java:游戏界面视图。
//6-18完成
//推箱子带音乐版
//右键单击--悔棋功能
//用时1:40分钟
import java.awt.Color;
import java.awt.Container;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.io.File;
import java.util.ArrayList;
import javax.sound.midi.MidiSystem;
import javax.sound.midi.Sequence;
import javax.sound.midi.Sequencer;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
public class GameFrame extends JFrame implements ActionListener, MouseListener// 主面板类
  , KeyListener {
 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;
    }
 }
 
 public void DisplayToast(String str) {
  JOptionPane.showMessageDialog(null, str, "提示",
    JOptionPane.ERROR_MESSAGE);
 }
 // 撤销移动
 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("此关已完成,不能撤销!");
  }
 }
 public void nextGrade() {
  // grade++;
  if (grade >= MapFactory.getCount() - 1) {
   DisplayToast("恭喜你完成所有关卡!");
   acceptKey = false;
  } else {
   grade++;
   initMap();
   repaint();
   acceptKey = true;
  }
 }
 public void priorGrade() {
  grade--;
  acceptKey = true;
  if (grade < 0)
   grade = 0;
  initMap();
  repaint();
 }
 public void initMap() {
  map = getMap(grade);
  list.clear();
  getMapSizeAndPosition();
  getManPosition();
  // Map currMap=new Map(row, column, map);
  // list.add(currMap);
 }
 
 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();
 }
 private void getMapSizeAndPosition() {
  // TODO Auto-generated method stub
  mapRow = map.length;
  mapColumn = map[0].length;
  leftX = (width - map[0].length * 30) / 2;
  leftY = (height - map.length * 30) / 2;
  System.out.println(leftX);
  System.out.println(leftY);
  System.out.println(mapRow);
  System.out.println(mapColumn);
 }
 public void getPic() {
  pic = new Image[14];
  for (int i = 0; i <= 13; i++) {
   pic[i] = Toolkit.getDefaultToolkit().getImage(
     "images\\pic" + i + ".JPG");
  }
 }
 public byte grassOrEnd(byte man) {
  byte result = GRASS;
  if (man == MANDOWNONEND || man == MANLEFTONEND || man == MANRIGHTONEND
    || man == MANUPONEND)
   result = END;
  return result;
 }
 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--;
   }
  }
 }
 private void moveDown() {
  // 下一位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 ? MANDOWN
      : MANDOWNONEND;
    // 箱子变成boxTemp,箱子往下一步
    map[row + 2][column] = boxTemp;
    // 人变成manTemp,往下走一步
    map[row + 1][column] = manTemp;
    // 人刚才站的地方变成 grassOrEnd(map[row][column])
    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 ? MANDOWNONEND
      : MANDOWN;
    // 人变成temp,人往下走一步
    map[row + 1][column] = temp;
    // 人刚才站的地方变成 grassOrEnd(map[row][column])
    map[row][column] = grassOrEnd(map[row][column]);
    row++;
   }
  }
 }
 private void moveLeft() {
  // 左一位p1为WALL
  if (map[row][column - 1] == WALL)
   return;
  // 左一位p1为 BOX,BOXONEND
  if (map[row][column - 1] == BOX || map[row][column - 1] == BOXONEND) {
   // 左左一位p2为 END,GRASS则向左一步,其他不用处理
   if (map[row][column - 2] == END || map[row][column - 2] == GRASS) {
    Map currMap = new Map(row, column, map);
    list.add(currMap);
    byte boxTemp = map[row][column - 2] == END ? BOXONEND : BOX;
    byte manTemp = map[row][column - 1] == BOX ? MANLEFT
      : MANLEFTONEND;
    // 箱子变成boxTemp,箱子往左一步
    map[row][column - 2] = boxTemp;
    // 人变成manTemp,往左走一步
    map[row][column - 1] = manTemp;
    // 人刚才站的地方变成 grassOrEnd(map[row][column])
    map[row][column] = grassOrEnd(map[row][column]);
    column--;
   }
  } else {
   // 左一位为 GRASS,END,其他情况不用处理
   if (map[row][column - 1] == GRASS || map[row][column - 1] == END) {
    Map currMap = new Map(row, column, map);
    list.add(currMap);
    byte temp = map[row][column - 1] == END ? MANLEFTONEND
      : MANLEFT;
    // 人变成temp,人往左走一步
    map[row][column - 1] = temp;
    // 人刚才站的地方变成 grassOrEnd(map[row][column])
    map[row][column] = grassOrEnd(map[row][column]);
    column--;
   }
  }
 }
 private void moveRight() {
  // 右一位p1为WALL
  if (map[row][column + 1] == WALL)
   return;
  // 右一位为 BOX,BOXONEND
  if (map[row][column + 1] == BOX || map[row][column + 1] == BOXONEND) {
   // 右右一位p2为 END,GRASS则向右一步,其他不用处理
   if (map[row][column + 2] == END || map[row][column + 2] == GRASS) {
    Map currMap = new Map(row, column, map);
    list.add(currMap);
    byte boxTemp = map[row][column + 2] == END ? BOXONEND : BOX;
    byte manTemp = map[row][column + 1] == BOX ? MANRIGHT
      : MANRIGHTONEND;
    // 箱子变成boxTemp,箱子往右一步
    map[row][column + 2] = boxTemp;
    // 人变成manTemp,往右走一步
    map[row][column + 1] = manTemp;
    // 人刚才站的地方变成 grassOrEnd(map[row][column])
    map[row][column] = grassOrEnd(map[row][column]);
    column++;
   }
  } else {
   // 右一位为 GRASS,END,其他情况不用处理
   if (map[row][column + 1] == GRASS || map[row][column + 1] == END) {
    Map currMap = new Map(row, column, map);
    list.add(currMap);
    byte temp = map[row][column + 1] == END ? MANRIGHTONEND
      : MANRIGHT;
    // 人变成temp,人往右走一步
    map[row][column + 1] = temp;
    // 人刚才站的地方变成 grassOrEnd(map[row][column])
    map[row][column] = grassOrEnd(map[row][column]);
    column++;
   }
  }
 }
 public boolean isFinished() {
  for (int i = 0; i < mapRow; i++)
   for (int j = 0; j < mapColumn; j++)
    if (map[i][j] == END || map[i][j] == MANDOWNONEND
      || map[i][j] == MANUPONEND || map[i][j] == MANLEFTONEND
      || map[i][j] == MANRIGHTONEND)
     return false;
  return true;
 }
 public void paint(Graphics g)// 绘图
 {
  for (int i = 0; i < mapRow; i++)
   for (int j = 0; j < mapColumn; j++) {
    // 画出地图 i代表行数,j代表列数
    if (map[i][j] != 0)
     g.drawImage(pic[map[i][j]], leftX + j * 30, leftY + i * 30,
       this);
   }
  g.setColor(Color.RED);
  g.setFont(new Font("楷体_2312", Font.BOLD, 30));
  g.drawString("现在是第", 150, 140);
  g.drawString(String.valueOf(grade + 1), 310, 140);
  g.drawString("关", 360, 140);
 }
 public int getManX() {
  return row;
 }
 public int getManY() {
  return column;
 }
 public int getGrade() {
  return grade;
 }
 public byte[][] getMap(int grade) {
  return MapFactory.getMap(grade);
 }
 public void actionPerformed(ActionEvent arg0) {
  // TODO Auto-generated method stub
 }
 public void itemStateChanged(ItemEvent arg0) {
  // TODO Auto-generated method stub
 }
 public void keyReleased(KeyEvent arg0) {
  // TODO Auto-generated method stub
 }
 public void keyTyped(KeyEvent arg0) {
  // TODO Auto-generated method stub
 }
 public void keyPressed(KeyEvent e)// 键盘事件
 {
  if (e.getKeyCode() == KeyEvent.VK_UP) {
   // 向上
   moveUp();
  }
  if (e.getKeyCode() == KeyEvent.VK_DOWN) {
   // 向下
   moveDown();
  }
  if (e.getKeyCode() == KeyEvent.VK_LEFT) { // 向左
   moveLeft();
  }
  if (e.getKeyCode() == KeyEvent.VK_RIGHT) { // 向右
   moveRight();
  }
  repaint();
  if (isFinished()) {
   // 禁用按键
   acceptKey = false;
   if (grade == 10) {
    JOptionPane.showMessageDialog(this, "恭喜您通过最后一关!!!");
   } else {
    // 提示进入下一关
    String msg = "恭喜您通过第" + grade + "关!!!\n是否要进入下一关?";
    int type = JOptionPane.YES_NO_OPTION;
    String title = "过关";
    int choice = 0;
    choice = JOptionPane.showConfirmDialog(null, msg, title, type);
    if (choice == 1)
     System.exit(0);
    else if (choice == 0) {
     // 进入下一关
     acceptKey = true;
     nextGrade();
    }
   }
  }
 }
 public static void main(String[] args) {
  new GameFrame();
 }
 public void mouseClicked(MouseEvent e) {
  // TODO Auto-generated method stub
  if (e.getButton() == MouseEvent.BUTTON3) // 右键撤销移动
  {
   undo();// 撤销移动
  }
 }
 public void mouseEntered(MouseEvent arg0) {
  // TODO Auto-generated method stub
 }
 public void mouseExited(MouseEvent arg0) {
  // TODO Auto-generated method stub
 }
 public void mousePressed(MouseEvent arg0) {
  // TODO Auto-generated method stub
 }
 public void mouseReleased(MouseEvent arg0) {
  // TODO Auto-generated method stub
 }
}
class Sound// 播放背景音乐
{
 String path = new String("musics\");
 String file = new String("nor.mid");
 Sequence seq;
 Sequencer midi;
 boolean sign;
 void loadSound() {
  try {
   seq = MidiSystem.getSequence(new File(path + file));
   midi = MidiSystem.getSequencer();
   midi.open();
   midi.setSequence(seq);
   midi.start();
   midi.setLoopCount(Sequencer.LOOP_CONTINUOUSLY);
  } catch (Exception ex) {
   ex.printStackTrace();
  }
  sign = true;
 }
 void mystop() {
  midi.stop();
  midi.close();
  sign = false;
 }
 boolean isplay() {
  return sign;
 }
 void setMusic(String e) {
  file = e;
 }
}
Map.java:封装游戏当前状态。
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
   for(int j=0;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.java:提供地图数据。
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)
 {byte temp[][];
  if(grade>=0 && grade
   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
   for(int j=0;j
    result[i][j]=temp[i][j];
  return result;
 }
 
 public static int getCount()
 {
  return count;
 }
 
}

0 0
原创粉丝点击