package s1java.xmal1;
import java.io.IOException;
import java.util.*;
public class Game {
Map map;
//声明地图
//声明对战中玩家1的当前位置
int playerPos1;
//声明对战中玩家2的当前位置
int playerPos2;
//声明走或停标识设置
String goAndStop[]=new String[2];
//声明对战角色
String playerName[]=new String[2];
int choice;
int c;
/**
* 初始化游戏的一局
*/
public void init(){
map=new Map();
//创建Map对象
map.createMap();
//生成地图
//设置玩家1起始位置
playerPos1=0;
//设置玩家2起始位置
playerPos2=0;
//记录玩家1下一次走或停
goAndStop[0]="on";
//设置玩家2下一次走或停
goAndStop[1]="on";
}
/**
* 设置对战角色
* @param no 玩家次序 1:玩家1 2:玩家2
* @param role 角色代号
*/
public void setRole(int no, int role){
switch(role){
case 0:
playerName[no-1] = "人机";
break;
case 1:
playerName[no-1] = "汤姆";
break;
case 2:
//设置玩家名称为"杰瑞"
playerName[no-1] = "杰瑞";
break;
case 3:
//设置玩家名称为"凯蒂"
playerName[no-1] = "凯蒂";
break;
case 4:
//设置玩家名称为"斯派克"
playerName[no-1] = "斯派克";
break;
}
}
/**
* 开始游戏
*/
public void start(){
//调用初始化方法
init();
//显示游戏界面
System.out.println("〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓");
System.out.println("// //");
System.out.println("// 对战飞行棋 //");
System.out.println("// //");
System.out.println("〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓");
Scanner scanner=new Scanner(System.in);//两种游戏方式选择 人机与人人
System.out.println("请选择对战模式:1.人机对战 2.双人游戏");
c=scanner.nextInt();
System.out.println("\n请选择角色: 1. 汤姆 2. 杰瑞 3. 凯蒂 4. 斯派克");
System.out.print("请玩家1选择角色: ");
int role1 = scanner.nextInt();
int role2;
int rj;//人机参数
if(c==2){ //判断 C为2时 人人对战 要选择玩家。
rj=1;
do{ System.out.print("请玩家2选择角色: ");
role2=scanner.nextInt(); }
while(role2==role1);}
else{
rj=2;
role2=0;
}
//不允许角色重复
setRole(1, role1); setRole(2, role2);
//开始游戏
play(rj);
}
/**
* 两人对战玩法
*/
public void play(int rj){
System.out.println("\n\n");
System.out.print("\n\n*******************************************\n");
System.out.print(" Game Start \n");
System.out.print("*******************************************\n\n");
//显示对战双方士兵样式
System.out.println("^_^" + playerName[0] + "的士兵: A");
System.out.println("^_^" + playerName[1] + "的士兵: B\n");
//显示对战地图
System.out.println("\n图例: " + "■ 暂停 ¤ 幸运轮盘 ★ 地雷 〓 时空隧道 ※道路 X轰炸机\n");
map.showMap(playerPos1, playerPos2);
//游戏开始
int step; //存储骰子数目
while(playerPos1 < 99 && playerPos2 < 99){ //有任何一方走到终点,跳出循环
//轮流掷骰子
if(goAndStop[0].equals("on")){
//玩家1掷骰子
step = throwShifter(1); //掷骰子
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("-----------------\n");
map.showMap(playerPos1, playerPos2); //显示当前地图
if(playerPos1 == 99){ //如果走到终点
break; //退出
}
}else{
System.out.println("\n" + playerName[0] +"停掷一次!\n"); //显示此次暂停信息
goAndStop[0] = "on"; //设置下次可掷状态
}
System.out.println("\n\n\n\n");
if(goAndStop[1].equals("on")){
switch(rj){
case 2:
//当rt=2时 进入人机对战模式
step=(int) (Math.random() *6 + 1); //自动生成骰子数
System.out.println("************");
System.out.println("人机的骰子数为:"+step);
playerPos2 = getCurPos(2, playerPos2, step);
System.out.println("\n人机当前位置: "+ playerPos2);
System.out.println("您当前位置:"+ playerPos1);
System.out.println("-----------------\n");
map.showMap(playerPos1, playerPos2);
break;
case 1:
//玩家2掷骰子
step = throwShifter(2); //掷骰子
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("-----------------\n");
map.showMap(playerPos1, playerPos2);
break;
}
if(playerPos2 == 99){ //如果走到终点
break; //退出
}
}else{
System.out.println("\n" + playerName[1] + "停掷一次!\n"); //显示此次暂停信息
goAndStop[1] = "on"; //设置下次可掷状态
}
System.out.println("\n\n\n\n");
}
//游戏结束
System.out.println("\n\n\n\n");
System.out.print("****************************************************\n");
System.out.print(" Game Over \n");
System.out.print("****************************************************\n\n");
judge();
}
/**
* 掷骰子
* @param no 玩家次序
* @return step 掷出的骰子数目
*/
public int throwShifter(int no){
//定义变量存储骰子数目
int step = 0;
System.out.println();
//提示玩家启动掷骰子
System.out.println("玩家"+playerName[no-1]+",请按任意字母回车");
Scanner scanner=new Scanner(System.in);
String s=scanner.next();
//模拟掷骰子:产生一个1~6的数字作为玩家掷的骰子数目
step=(int)(Math.random()*6)+1;
return step;
}
/**
* 计算玩家此次移动后的当前位置
* @param no 玩家次序
* @param position 移动前位置
* @param step 掷的骰子数目
* @return position 移动后的位置
*/
public int getCurPos(int no, int position, int step){
position = position + step;
//第一次移动后的位置
if(position >= 99){
return 99;
}
Scanner input = new Scanner(System.in);
switch(map.map[position]){ //根据地图中的关卡代号进行判断
case 0: //走到普通格
i