import java.util.*;
public class GameEngine {
GameMap gamemap; // 地图
Player player1 = new Player();
Player player2 = new Player();
/**
* 初始化游戏的一局
*/
public void start() {
// 初始化
init();
System.out.println("\n\n\n\n");
System.out.print(" ********\n");
System.out.print(" ************\n");
System.out.print(" ####....#. FLYING BOARD GAME\n");
System.out.print(" #..###.....##....\n");
System.out.print(" ###.......###### ### ###\n");
System.out.print(" ........... #...# #...#\n");
System.out.print(" ##*####### #.#.# #.#.#\n");
System.out.print(" ####*******###### #.#.# #.#.#\n");
System.out.print(" ...#***.****.*###.... #...# #...#\n");
System.out.print(" ....**********##..... ### ###\n");
System.out.print(" ....**** *****....\n");
System.out.print(" #### ####\n");
System.out.print(" ###### ######\n");
System.out.print("##############################################################\n");
System.out.print("#...#......#.##...#......#.##...#......#.##------------------#\n");
System.out.print("###########################################------------------#\n");
System.out.print("#..#....#....##..#....#....##..#....#....#####################\n");
System.out.print("########################################## #----------#\n");
System.out.print("#.....#......##.....#......##.....#......# #----------#\n");
System.out.print("########################################## #----------#\n");
System.out.print("#.#..#....#..##.#..#....#..##.#..#....#..# #----------#\n");
System.out.print("########################################## ############");
System.out.println("\n\n");
input();
play(); // 开始两人对战
}
public void init() {
gamemap = new GameMap();
gamemap.createMap(); // 生成地图
}
public int readNum(int has) {
Scanner input = new Scanner(System.in);
String tmp;
int num = has;
while(num == has) {
tmp = input.next();
while(tmp.length() != 1 || tmp.charAt(0) < '0' || tmp.charAt(0) > '4') {
System.out.println("输入有误,请输入1-4以内的阿拉伯数字");
tmp = input.next();
}
num = Integer.parseInt(tmp);
if(num == has) {
System.out.println("该角色已被选用,请重新选择");
}
}
return num;
}// 输入数据,并保证读入的数据一定合法
public void input() {
/*********** 待补充的代码区域 *************/
// 通过键盘输入接收用户选择的角色,注意,不允许角色重复
// 游戏模式
System.out.println("请输入A或B选择您的游戏模式");
System.out.println("A:人机模式");
System.out.println("B:双人对战");
Scanner input = new Scanner(System.in);
String op = input.next();
while(!op.equals("A") && !op.equals("B")){
System.out.println("请输入A或B中的一个字符来选择您的游戏模式");
op = input.next();
}
if(op.equals("A")) player2.isRobot=true;
// 角色选择
System.out.println("oooooooooooooooooooooooo星 舰 选 择oooooooooooooooooooooooo\n");
System.out.println("请选择星舰: 1. 自然选择号 2. 青铜时代号 3. 蓝色空间号 4. 万有引力号");
System.out.print("请玩家1选择星舰: ");
player1.role = readNum(5);
System.out.print("请玩家2选择星舰: ");
if(player2.isRobot) player2.selectCharacter(player1);
else player2.role = readNum(player1.role);
/*********** 待补充的代码区域 *************/
setRole(player1); // 设置玩家1代表的角色
setRole(player2); // 设置玩家2代表的角色
}
/**
* 设置对战角色
*
* @param //no
* 玩家次序 1:玩家1 2:玩家2
* @param //role
* 角色代号
*/
public void setRole(Player p) {
switch (p.role) {
case 1:
p.name = "自然选择号";
break;
case 2:
p.name = "青铜时代号";
break;
case 3:
p.name = "蓝色空间号";
break;
case 4:
p.name = "万有引力号";
break;
default:
break;
}
}
/**
* 两人对战玩法
*/
int outPut(Player player, int step) {
System.out.println("-----------------"); // 显示结果信息
System.out.println(player1.name + "(A)之前位置:" + player1.curPos);
System.out.println(player2.name + "(B)之前位置:" + player2.curPos);
if(step > 0) System.out.println(player.name + "刚才得到的骰子数: " + step);
int tmp = player.curPos; // 行动前的步数
player.curPos += step;
EventResponse.event(player, gamemap); // 响应
if(player.curPos - tmp > 0) {
System.out.println(player.name + "前进" + (player.curPos - tmp) + "步!");
} else if(player.curPos - tmp < 0) {
System.out.println(player.name + "退后" + (tmp - player.curPos) + "步!");
} else {
System.out.println(player.name + "原地不动");
}
//特殊格子的响应,会二次响应
System.out.println(player1.name + "(A)当前位置:" + player1.curPos);
System.out.println(player2.name + "(B)当前位置:" + player2.curPos);
System.out.println("-----------------");
// 显示对战地图
System.out.println("图例说明:○ 起点; ▓ 终点; ■ 暂停; ¤ 黑洞; ★ 太空垃圾; 〓 时空隧道; - 普通; 数字 当前位置序号\n地图如下:");
int type = gamemap.map[gamemap.reflectionPos[player.curPos]];
if(type == 3) type = 0;
System.out.println("起点");
System.out.println("↓");
gamemap.showMap(player1.curPos, player2.curPos); // 显示当前地图
return type;
}
public void play() {
System.out.println("\n");
System.out.print("**************************************************************\n");
System.out.print("* Game Start *\n");
System.out.print("**************************************************************\n");
// 显示对战双方士兵样式
System.out.println("^_^" + player1.name + "的士兵:A");
System.out.println("^_^" + player2.name + "的士兵:B\n");
// 显示对战地图
System.out.println("图例说明:○ 起点; ▓ 终点; ■ 暂停; ¤ 幸运轮盘; ★ 地雷; 〓 时空隧道; - 普通" +
"; 数字 当前位置序号\n地图如下:");
System.out.print("起点\n↓\n");
gamemap.showMap(player1.curPos, player2.curPos);
// System.out.println(" -→终点");
// 游戏开始
int step; // 存储骰子数目
while (player1.curPos < 99 && player2.curPos < 99) { // 有任何一方走到终点,跳出循环
/