package com.accp4u.t0813.wushaohua;
import java.util.Scanner;
public class Game {
Map map = null;
int playerPos1 = 0;
int playerPos2 = 0;
String[] goAndStop = new String[] { "on", "on" };// 记录玩家1,2下一次走或停
String[] playerName = new String[2];
/**
* 初始化游戏的一局
*/
public void init() {
map = new Map();
map.createMap();
map.showMap(playerPos1, playerPos2);
}
/**
* 设置对战角色
*
* @param no 玩家次序 1:玩家1 2:玩家2
* @param role 角色代号 1:戴高乐 2:艾森豪威尔 3:麦克阿瑟 4:巴顿
*/
public void setRole(int no, int role) {
// 设置玩家名称
switch (role) {
case 1:
playerName[no - 1] = "戴高乐";
break;
case 2:
playerName[no - 1] = "艾森豪威尔";
break;
case 3:
playerName[no - 1] = "麦克阿瑟";
break;
case 4:
playerName[no - 1] = "巴顿";
break;
default:
break;
}
}
/**
* 开始游戏
*/
public void start() {
System.out.println("***************************************************");
System.out.println("∥ ∥");
System.out.println("∥ ∥");
System.out.println("∥ 骑 士 飞 行 棋 ∥");
System.out.println("∥ ∥");
System.out.println("∥ ∥");
System.out.println("***************************************************");
System.out.println(" 两 人 对 战 ");
System.out.println("请选择角色 1:戴高乐 2:艾森豪威尔 3:麦克阿瑟 4:巴顿");
Game game = new Game();
System.out.print("玩家1选择角色:");
Scanner in = new Scanner(System.in);
int role1 = in.nextInt();
int role2 = -1;
game.setRole(1, role1);
do {
if (role1 == role2) {
System.out.print("玩家所选择角色不能重复,请从新选择:");
role2 = in.nextInt();
} else {
System.out.print("玩家2选择角色:");
role2 = in.nextInt();
}
} while (role1 == role2);
game.setRole(2, role2);
game.play();
}
/**
* 两人对战玩法
*/
public void play() {
System.out.print("\t\t***************************************************\n");
System.out.print("\t\t\t\t Game Start\n");
System.out.println("\t\t***************************************************");
// 显示对战双方士兵样式
System.out.println(">_>" + playerName[0] + "的士兵:A");
System.out.println("<_<" + playerName[1] + "的士兵:B\n");
System.out.println("图例:" + "¤幸运轮盘 ★地雷 ■暂停 〓时空隧道 ∷普通");
Map map = new Map();
map.createMap();
map.showMap(playerPos1, playerPos2);
// 游戏开始
while (playerPos1 < 99 && playerPos2 < 99) {// 有任何一方走到终点,跳出循环
// 轮流ROLL 点
int step;// 存储色子数目
if (goAndStop[0].equals("on")) {
// 玩家1ROLL点
step = throwShifter(1);// ROLL点
System.out.println("\n-----------------");
System.out.println("色子数:" + step);
playerPos1 = getCurPos(1, playerPos1, step);
System.out.println("\n当前位置:" + playerPos1);
System.out.println("对方当前位置:" + playerPos2);
System.out.println("-----------------");
map.createMap();
map.showMap(playerPos1, playerPos2);
if (playerPos1 == 99) {// 如果走到终点
break;// 退出
}
} else {
System.out.println("\n" + playerName[0] + "您被暂停了一次!\n");
goAndStop[0] = "on";// 设置下次可ROLL状态
}
System.out.println("\n\n\n\n");
if (goAndStop[1].equals("on")) {
// 玩家2ROLL点
step = throwShifter(2);// ROLL点
System.out.println("\n-----------------");
System.out.println("色子数:" + step);
playerPos2 = getCurPos(2, playerPos2, step);
System.out.println("\n当前位置:" + playerPos2);
System.out.println("对方当前位置:" + playerPos1);
System.out.println("-----------------");
map.createMap();
map.showMap(playerPos1, playerPos2);
if (playerPos2 == 99) {// 如果走到终点
break;// 退出
}
} else {
System.out.println("\n" + playerName[1] + "您被暂停了一次!\n");
goAndStop[1] = "on";// 设置下次可ROLL状态
}
}
// 游戏结束
System.out.println();
System.out.print("\t\t******************\n");
System.out.print("\t\t Game Over\n");
System.out.println("\t\t******************\n");
judge();// 结果评判
}
/**
* ROLL色子
*
* @param no 玩家次序
* @return step ROLL出的色子数目
*/
public int throwShifter(int no) {
// 使用从控制台接收的方式启动ROLL点
String c = "";
System.out.print("\n" + playerName[no - 1] + ", 请按任意字母键后回车启动掷骰子: ");
Scanner in = new Scanner(System.in);
c = in.next();
if (c.equals("exit")) {
return 100;
} else {
// 模拟ROLL色子:产生一个随机数(1~6)作为此玩家ROLL的色子数目
int step = (int) (Math.random() * 100 % 6 + 1);
return step;// 返回色子数字
}
}
/**
* 计算玩家此次移动后的当前位置
*
* @param no 玩家次序
* @param position 移动前位置
* @param step ROLL的色子数目
* @return position 移动后的位置
*/
public int getCurPos(int no, int position, int step) {
position += step;
if (position >= 99) {
return 99;
}
Scanner in = new Scanner(System.in);
Map aMap = new Map();
aMap.createMap();
switch (aMap.map[position]) {// 根据地图中的关卡代号进行判断
case 0:// 走到普通格
if (no == 1 && position == playerPos2) {// 添加条件:玩家1与对方骑兵相遇
// 添加代码实现:踩到对方,对方回到起点
playerPos2 = 0;
System.out.println(":-D 哈哈哈... 踩到了!");
}
if (no == 2 && position == playerPos1) {// 添加条件:玩家2与对方骑兵相遇
// 添加代码实现:踩到对方,对方回到起点
playerPos1 = 0;
System.out.println(":-D 哈哈哈... 踩到了!");
}
break;
case 1:// 幸运轮盘
if (no == 1 && position == playerPos2) {// 添加条件:玩家1与对方骑兵相遇
// 添加代码实现:踩到对方,对方回到起点
playerPos2 = 0;
System.out.println(":-D 哈哈哈... 踩到了!");
}
if (no == 2 && position == playerPos1) {// 添加条件:玩家2与对方骑兵相遇
// 添加代码实现:踩到对方,对方回到起点
playerPos1 = 0;
System.out.println(":-D 哈哈哈... 踩到了!");
}
System.out.println("\n◆◇◆◇◆欢迎进入幸运轮盘◆◇◆◇◆");
System.out.println("\t请选择一种运气");
System.out.println("\t1.交换位置 2.轰炸");
System.out.println("=============================");
int choise = in.nextInt();
int temp;
switch (choise) {
case 1:// 交换位置
if (no == 1) {
// 添加代码实现交换:position与playerPos2 数值互相交换
temp = position;
position = playerPos2;
playerPos2 = temp;
} else if (no == 2) {
// 添加代码实现交换:position与playerPos1 数值互相交换
temp = position;
position = playerPos1;
playerPos1 = temp;
}
break;
case 2:// 轰炸
if (no == 1 && playerPos2 < 6) {// no为1并且玩家2位置小于6
// 添加代码实现:计算玩家2当前位置
playerPos2 = 0;
} else {
// 添加代码实现:计算玩家2当前位置
playerPos2 -= 6;
}
if (no == 2 && playerPos1 < 6) {// no为2并且玩家1位置小于6
// 添加代码实现:计算玩家1当前位置
playerPos1 = 0;
} else {
// 添加代码实现:计算玩家1当前位置
playerPos1 -= 6;
}
break;
}
break;
case 2:// 踩到地雷
if (no == 1 && position == playerPos2) {// 添加条件:玩家1与对方骑兵相遇
// 添加代码实现:踩到对方,对方回到起点
playerPos2 = 0;
System.out.println(":-D 哈哈哈... 踩到了!");
}
if (no == 2 && position == playerPos1) {// 添加条件:玩家2与对方骑兵相遇
// 添加代码实现:踩到对方,对方回到起点
playerPos1 = 0;
System.out.println(":-D 哈哈哈... 踩到了!");
}
// 添加代码实现:踩到地雷退6步
position -= 6;
System.out.println(">.< 踩到地雷,气死了...");
break;
case 3:// 下一次�