System.out.println(\"请输入地图行数,以回车键结束.\"); setRow(scanner.nextInt()+2);
System.out.println(\"请输入地图列数,以回车键结束.\"); setCol(scanner.nextInt()+2);
System.out.println(\"请输入需完成目标数,以回车键结束.\"); setBox_count(scanner.nextInt()); gameCore = new int[this.row][this.col]; createBoxGame(); player(); }
public BoxGame(int row, int col, int box_count) { if (row < 2 || col < 2 || box_count < 1) }
throw new RuntimeException(\"参数异常,导致地图创建失败!\"); this.row = row + 2;// 多加二行,用于制造墙壁 this.col = col + 2;// 多加二列,用于制造墙壁 this.box_count = box_count;
gameCore = new int[this.row][this.col];
public void createBoxGame() { int type = 0; for (int i = 0; i < this.row; i++) { for (int j = 0; j < this.col; j++) { type = RANDOM.nextInt(10); // 初始化地图 if (type < 1 || i == 0 || i == this.row - 1 || j == 0 || j == this.col - 1) { gameCore[i][j] = 1;// 墙壁 } else { gameCore[i][j] = 0;// 空地 } }
}
}
//人
gameCore[1][1] = 5; // 往地图上放星星 makeStar(); // 往地图上放箱子 makeBox();
// 往地图上放星星 private void makeStar() { int row = 0; int col = 0; for (int i = 0; i < box_count; i++) { row = RANDOM.nextInt(this.row); col = RANDOM.nextInt(this.col); }
}
// 判断构建的星星在地图上是否合法 if (gameCore[row][col] == 0) { // 合法 gameCore[row][col] = 2;// 记录星星的位置 } else { }
i--;//添加失败,次数还原
// 往地图上放箱子 private void makeBox() { int row = -1; int col = -1; int type = -1; for (int i = 0; i < box_count; i++) { row = RANDOM.nextInt(this.row); col = RANDOM.nextInt(this.col); }
}
// 检查箱子的合法性及可行性 type = checkBox(row, col); if(type != -1){ gameCore[row][col]=type; }else{ i--; }
private int checkBox(int row, int col) { if (gameCore[row][col] == 1 || gameCore[row][col] == 3 || gameCore[row][col] == 4 ||gameCore[row][col] == 5) return -1; if(gameCore[row][col] == 2) return 4;
}
// 判断是否是死角
if ((gameCore[row + 1][col] == 1 || gameCore[row - 1][col] == 1) && (gameCore[row][col + 1] == 1 || gameCore[row][col - 1] == 1)) return -1;
return 3;
public int getRow() { return row; }
public void setRow(int row) { this.row = row; }
public int getCol() { return col; }
public void setCol(int col) { this.col = col; }
public int getBox_count() { return box_count; }
public void setBox_count(int box_count) { this.box_count = box_count; }
public int[][] getGameCore() { return gameCore; }
public void setGameCore(int[][] gameCore) { this.gameCore = gameCore; }
public void player(){ Person p = new Person(getGameCore(), 1, 1,box_count); p.printMap(); int dir = -1;
System.out.println(\"游戏说明:\"); System.out.println(\" 〓:墙壁 £:is you ◎:箱子 ☆:目标 ★:成功\"); System.out.println(\" 上:8 下:5 or 2 左:4 右:6\"); System.out.println(\" 退出:7 下一关:9\"); System.out.println(\"请输入你接下来的操作:\"); do { if(isWin){ isWin=false; init(); break; } dir = scanner.nextInt(); if(dir == 7) break; else if(dir == 9){ init(); break; } p.move(dir); } while (true); } public static void main(String[] args) { new BoxGame(); } }
class Person { private int row, col;// 小人所在的位置,注意这里的row、col和BoxGame中row、col的区别,完全不是一个概念 private int[][] gameCore;// 游戏核心 二维地图 private int box_count;//目标数 private boolean flag = false;// 标记人物是否与目标重合
public Person(int[][] gameCore, int row, int col,int box_count) { this.gameCore = gameCore; this.row = row; this.col = col; this.gameCore[row][col] = 5; this.box_count = box_count; }
public void move(int dir) { switch (dir) { case 8: up(); break; case 2: case 5: down(); break; case 4: left(); break; case 6: right(); break; } printMap(); }
private void up() { // 往上走 if (row == 1 || gameCore[row - 1][col] == 1) return; if(startMove(-1, 0)) this.row--; }
private void down() { // 往下走 if (row == gameCore.length) return; if(startMove(1, 0)) this.row++; }
// 0:空地 1:墙壁 2: 目标 3:箱子 4:完成 5:小人
private boolean startMove(int row_value, int col_value) { flag = gameCore[row][col] == 6; if (gameCore[row + row_value][col + col_value] == 0) { // 空地 if (flag) { gameCore[row][col] = 2; gameCore[row + row_value][col + col_value] = 5; } else { gameCore[row][col] = 0; gameCore[row + row_value][col + col_value] = 5; } } else if (gameCore[row + row_value][col + col_value] == 2) { if (flag) { gameCore[row][col] = 2; gameCore[row + row_value][col + col_value] = 6; } else { gameCore[row][col] = 0; gameCore[row + row_value][col + col_value] = 6; } } else if (gameCore[row + row_value][col + col_value] == 3) {
// 推动箱子
// 判断箱子是否可以移动
if (gameCore[row + row_value + row_value][col + col_value + col_value] == 1 || gameCore[row + row_value + row_value][col + col_value + col_value] == 3 || gameCore[row + row_value + row_value][col + col_value + col_value] == 4) { return false; }
if (flag) { // 空地 if (gameCore[row + row_value + row_value][col + col_value + col_value] == 0) { gameCore[row + row_value + row_value][col + col_value + col_value] = 3; gameCore[row + row_value][col + col_value] = 5; gameCore[row][col] = 2; } else if (gameCore[row + row_value + row_value][col + col_value + col_value] == 2) { // 目标 gameCore[row + row_value + row_value][col + col_value + col_value] = 4; gameCore[row + row_value][col + col_value] = 5;
gameCore[row][col] = 2; } } else { // 空地 if (gameCore[row + row_value + row_value][col + col_value + col_value] == 0) { gameCore[row + row_value + row_value][col + col_value + col_value] = 3; gameCore[row + row_value][col + col_value] = 5; gameCore[row][col] = 0; } else if (gameCore[row + row_value + row_value][col + col_value + col_value] == 2) {
// 目标 gameCore[row + row_value + row_value][col + col_value + col_value] = 4; gameCore[row + row_value][col + col_value] = 5; gameCore[row][col] = 0; } }
} else if (gameCore[row + row_value][col + col_value] == 4) {
// 推已经完成的.
// 判断箱子是否可以移动
if (gameCore[row + row_value + row_value][col + col_value + col_value] == 1 || gameCore[row + row_value + row_value][col + col_value + col_value] == 3 || gameCore[row + row_value + row_value][col + col_value + col_value] == 4) { return false; }
if (flag) { // 空地 if (gameCore[row + row_value + row_value][col + col_value + col_value] == 0) { gameCore[row + row_value + row_value][col + col_value + col_value] = 3; gameCore[row + row_value][col + col_value] = 6; gameCore[row][col] = 2; } else if (gameCore[row + row_value + row_value][col + col_value + col_value] == 2) { // 目标 gameCore[row + row_value + row_value][col + col_value + col_value] = 4; gameCore[row + row_value][col + col_value] = 6;
}
gameCore[row][col] = 2; } } else { // 空地 if (gameCore[row + row_value + row_value][col + col_value + col_value] == 0) { gameCore[row + row_value + row_value][col + col_value + col_value] = 3; gameCore[row + row_value][col + col_value] = 6; gameCore[row][col] = 0; } else if (gameCore[row + row_value + row_value][col + col_value + col_value] == 2) { }
}
// 目标
gameCore[row + row_value + row_value][col + col_value + col_value] = 4;
gameCore[row + row_value][col + col_value] = 6; gameCore[row][col] = 0;
}
return true;
private void left() { }
// 往左 if (col == 1) return;
if(startMove(0, -1)) this.col--;
private void right() { // 往右 if (col == gameCore[0].length - 2) return; if(startMove(0, 1)) this.col++; }
private void isWin(){ int count=0; for (int i = 0; i < gameCore.length; i++) { for (int j = 0; j < gameCore[0].length; j++) {
}
if(gameCore[i][j] == 4) count++; } }
if(count == box_count){ }
System.out.println(\"游戏胜利.\"); BoxGame.isWin = true;
// 0:空地 1:墙壁 2: 目标 3:箱子 4:完成 5:小人 6 人物与目标重合 public void printMap() { System.out.println(\"\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\"); for (int i = 0; i < gameCore.length; i++) { for (int j = 0; j < gameCore[0].length; j++) { switch (gameCore[i][j]) { case 0: System.out.print(\" \"); break; case 1: }
System.out.print(\"〓\"); break; case 2: System.out.print(\"☆\"); break; case 3: System.out.print(\"◎\"); break; case 4: System.out.print(\"★\"); break; case 5:
System.out.print(\"£\"); break; case 6:
System.out.print(\"※\"); break; } } System.out.println(); }
isWin();
}
因篇幅问题不能全部显示,请点此查看更多更全内容