您好,欢迎来到世旅网。
搜索
您的当前位置:首页推箱子代码2

推箱子代码2

来源:世旅网
public class BoxGame { public static boolean isWin = false; private int row, col;// 有多少行,多少列 private int box_count;// 箱子个数 private int[][] gameCore;// 游戏核心 二维地图 static private final Random RANDOM = new Random(); public static final Scanner scanner = new Scanner(System.in); public BoxGame() { init(); } private void init(){

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();

}

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- esig.cn 版权所有

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务