package s1java.xmal1;
/**
*定义类“”
*/
public class Person
{
String name;//类的属性,玩家的姓名;
int lenght = 0; //类的属性,已经走的长度
}
package s1java.xmal1;
import java.util.*;
public class Game {
Person[] p = new Person[2]; //两个玩家,创建数组p[];包含了两个元素;
int personindex = 0; //当前是哪个玩家正在玩(索引)
int count = 0; //对战的次数
String[] chess = new String[100]; //棋盘数组
int stopindex = -1; //谁被暂停了1次
/**
* 初始化最初的棋盘(OldChess)
*/
public void initial()
{
//从数组"chess[]"中先假定棋盘都为∷;
for (int i = 0; i < chess.length; i++)
{
chess[i] = "∷";
}
//定义棋盘数组中,暂停的位置;
int[] pause = {9, 27, 60, 93};
for (int i = 0; i < pause.length; i++)
{
chess[pause[i]] = "停";
}
//定义棋盘数组中,幸运盘符的位置;
int[] luck = {6, 23, 40, 55, 69, 83};
for (int i = 0; i < luck.length; i++)
{
chess[luck[i]] = "幸";
}
//定义棋盘数组中,地雷的位置;
int[] landMine = {5, 13, 17, 33, 38, 50, 64, 80, 94};
for (int i = 0; i < landMine.length; i++)
{
chess[landMine[i]] = "雷";
}
//定义棋盘数组中,时空隧道的位置;
int[] timeTunnel = {20, 25, 45, 63, 72, 88, 90};
for (int i = 0; i < timeTunnel.length; i++)
{
chess[timeTunnel[i]] = "洞";
}
}
/**
* 显示新棋盘(NewChess)
*/
public void showchess()
{
String[] newchess = new String[100]; //创建数组"NEWCHESS",并且分配100个空间;
for (int i = 0; i < chess.length; i++) //循环的查找chess[]数组,将chess[]数组中的所有元素的值赋于newchess[]数组;
{
newchess[i] = chess[i];
}
//添加A到棋盘
newchess[p[0].lenght] = "A";
//添加b到棋盘
newchess[p[1].lenght] = "B";
//如果AB重合棋盘则显示"◎";
if (p[0].lenght == p[1].lenght)
{
newchess[p[0].lenght] = "◎";
}
//输出第一条横线0~29;
for (int i = 0; i < 30; i++)
{
System.out.print(newchess[i]);
}
System.out.println();
//输出右竖线30~34
for (int i = 30; i <= 34; i++)
{
for (int j = 1; j <= 29; j++)
{
System.out.print(" ");
}
System.out.println(newchess[i]);
}
//输出第二条横线35~64
for (int i = 64; i >= 35; i--)
{
System.out.print(newchess[i]);
}
System.out.println();//注意,此处不换行的话第二行会多出一格
//输出左竖线65~69
for (int i = 65; i <=69 ; i++)
{
System.out.println(newchess[i]);
}
//输出最后一行70~99
for (int i = 70; i <= 99; i++)
{
System.out.print(newchess[i]);
}
System.out.println();
System.out.println();
}
/**
* 开始游戏
*/
public void start()
{
System.out.println("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※");
System.out.println("※※ ※※");
System.out.println("※※ ※※");
System.out.println("※※ 骑 士 飞 行 棋 ※※");
System.out.println("※※ ※※");
System.out.println("※※ ※※");
System.out.println("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※/n/n/n");
System.out.println("~~~~~~~~~~~~~~~~~~~~~~~两 人 对 战~~~~~~~~~~~~~~~~~~~~~/n");
System.out.println("请选择角色:1:孙悟空 2:猪八戒 3:沙僧 4:唐僧");
Scanner input = new Scanner(System.in);
System.out.print("请玩家A选择角色:");
int player1 = input.nextInt();
int player2;
do
{
System.out.print("请玩家B选择角色:");
player2 = input.nextInt();
} while (player1 == player2); //不允许重复角色名;
p[0] = new Person(); //创建玩家A;
p[0].name = getRoleName(player1); //获取玩家A的名称,注意,此处获取的名字是调用了方法"getRoleName(Player1)";
p[1] = new Person(); //创建玩家B
p[1].name = getRoleName(player2); //获取玩家B的名称
System.out.println("/n----------游戏准备开始----------");
System.out.println("A玩家是:" + p[0].name);
System.out.println("B玩家是:" + p[1].name + "/n/n");
System.out.println("以下是棋盘/n/n");
showchess();//显示棋盘
personindex = 0;//设置A先走
run();//对战开始
}
/**
* 获取玩家的名称
*/
public String getRoleName(int player)
{
switch (player)
{
case 1:
return "孙悟空";
case 2:
return "猪八戒";
case 3:
return "沙僧";
case 4:
return "唐僧";
default:
return " ";
}
}
/**
* 开始游戏
*/
public void run()
{
//创建死循环的条件
while(true)
{
count++;//对战次数;
Scanner input = new Scanner(System.in);
System.out.println("现在是" + p[personindex].name + "走,请按任意键继续...");//输出玩家A先走;
input.next();
int random = (int)(Math.random()*6+1);//产生一个1~6的随机数
System.out.println("骰子数目" + random);//骰子骰动的值(上面随机1~6之间的数目);
//检查游戏是否结束
if ((p[personindex].lenght + random) >= 99)
{
System.out.println("/n/n" + p[personindex].name + "获取,对战次数" + count + "次");
break;
}
//是否遇到关卡
int lenght = p[personindex].lenght + random;//骰子骰动后玩家的新位置的值赋给变量lenght;(注意,此处的p[personindex].lenght的初始值是0,)
String str = chess[lenght]; //此处是将上面玩家的位置(下标)转换成棋子中对应的元素并将此元素的值赋给变量str;
/*如果新棋盘中的元素等于原棋盘中停的元素*/
if (str.equals("停"))
{
System.out.println("暂停一次!/n"); //系统输出暂停一次
p[personindex].lenght = lenght; //将棋盘中暂停位置下标号赋给当前玩家的位置;
stopindex = personindex; //当前玩被暂停一次
}
/*进入幸运盘符,选择交换位置或轰炸对方退回6步*/
else if (str.equals("幸"))
{
System.out.println("恭喜!您己进入幸运盘符,请选择操作:1.交换位置;2.轰对方退回6步");
int choice = input.nextInt();
if (choice == 1)
{
System.out.println("您选择了交换位置");
int temp = p[personindex].lenght; //保存当前玩家的位置;
p[personindex].lenght = p[antherPerson()].lenght; //将另一玩家的位置的值赋给当前玩家;
p[antherPerson()].lenght = temp; //将当前玩家的位置的值赋给另一玩家;
}
else
{
System.out.println("您选择了轰对方返回6步");
p[antherPerson()].lenght -= 6;
if (p[antherPerson()].lenght <= 0)//如果另一个玩家的值在被对方轰完之后的值小于或等于0,程序将判断另一玩家的值为0位置;
{
p[antherPerson()].lenght = 0;
}
}
}
/*如果当前玩家遇着地雷,退回6步,忽略再次遇到的关卡*/
else if (str.equals("雷"))
{
System.out.println("呵呵,您进入了雷区,退回6步");
p[personindex].lenght -= 6;
if (p[personindex].lenght <= 0)
{
p[personindex].lenght = 0;
}
}
/*如果玩家遇着隧道,当前玩家向前加走十步,忽略再次遇到的关卡*/
else if (str.equals("洞"))
{
System.out.println("恭喜您,进入幸运洞中" + p[personindex].name + "您的位置将前进10步");
p[personindex].lenght = lenght + 10;
if (p[personindex].lenght >=100)
{
System.out.println("/n/n" + p[personindex].name + "取胜,对战次数" + count);
break;
}
}
/*如果当前玩家骰骰子的过程中没有遇到上面所有的关卡,就将当前玩家骰动的位置再赋给当前玩家*/
else
{
p[personindex].lenght = lenght;
}
//设置下一轮是另一玩家
int index = antherPerson(); //获取另一玩家的索引;
if (stopindex != index) //如果另一玩家被暂停,则不改变索引;
personindex = index;
else
stopindex = -1; //取消暂停
System.out.println("玩家" + p[personindex].name + "的位置" + (p[personindex].lenght+1));
System.out.println("玩家" + p[antherPerson()].name + "的位置" + (p[antherPerson()].lenght+1));
showchess();//显示新棋盘;
}
}
/**
* 获得另一玩家的索引
*/
public int antherPerson()
{
if (personindex == 0)
{
return 1;
}
else
{
return 0;
}
}
}