日期:2014-05-20 浏览次数:21034 次
/**
* 下棋游戏
* @author Alex
*
*/
public class Play {
private static String[] map; //地图
private static String p1; //玩家1
private static String p2; //玩家2
private static String mapStyle; //地图样式
/**
* 初始化地图
* @param mapStyle 地图样式
* @param mapSize 地图大小(长度)
*/
private static void initMap(String mapStyle,int mapSize){
Play.mapStyle=mapStyle;
map=new String[mapSize+1];
for(int i=0;i<map.length;i++){
map[i]=Play.mapStyle;
}
}
/**
* 显示地图
*/
private static void showMap(){
for(int i=0;i<map.length;i++){
System.out.print(map[i]);
}
}
/**
* 初始化玩家位置
* @param p1Style 玩家1的样式
* @param p2Style 玩家2的样式
*/
private static void initPlayer(String p1Style,String p2Style){
Play.p1=p1Style;
Play.p2=p2Style;
map[0]=Play.p1;
map[1]=Play.p2;
}
/**
* 查找玩家位置
* @param playerName 玩家名称
* @return 玩家位置
*/
private static int findPlayer(String playerName){
for(int i=0;i<map.length;i++){
if(map[i]==playerName){
return i;
}
}
return 1;
}
/**
* 统计两位玩家谁赢了
* @param player1Name 玩家1的名字
* @param player2Name 玩家2的名字
*/
private static void Results(String player1Name,String player2Name){
int p1Location=Play.findPlayer(player1Name);
int p2Location=Play.findPlayer(player2Name);
if(p1Location>p2Location){
System.err.println(p1+"的位置:"+p1Location+",恭喜"+p1+"赢了!");
}else if(p1Location<p2Location){
System.err.println(p2+"的位置:"+p2Location+",恭喜"+p2+"赢了!");
}else{
System.err.println("难分胜负啊,"+p1+"和"+p2+"打成平手,再来一局吧!");
System.out.println(p1+"的位置:"+p1Location);
System.out.println(p2+"的位置:"+p2Location);
}
}
/**
* 造成延迟假象的方法
* @param millisecond 毫秒
*/
private static void working(long millisecond){
try {
Thread.sleep(millisecond);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
/**
* 测试
* @param args
*/
public static void main(String[] args) {
initMap("[ ]", 10); //初始化地图
initPlayer("AAA","BBB"); //初始化玩家名称及位置,B比A要靠前一位
int p1Location=0; //记录玩家1的位置
int p2Location=0; //记录玩家2的位置
int whoGo=1; //记录下一步该谁走,1为玩家1走,2为玩家2走
int nextRandom=1; //记录下一个随机数
boolean isSuccess=false;
Scanner in=new Scanner(System.in); //实例化控制台监听器
System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~游戏开始~~~~~~~~~~~~~~~~~~~~~~~~~"); //提示文字
System.out.println("游戏规则:骰子共1(含)~10(含)个点,最先到达终点者赢。"+"\r"+"\""+p1+"\""+"首发,按y键开始掷骰子"); //提示文字
showMap(); //显示地图
System.out.println(""); //提示文字
while(in.next().equalsIgnoreCase("y")){ //如果玩家按下了y键,则继续游戏,否则推出游戏
if(map[map.length-1]==p1||map[map.length-1]==p2){ //当前任何一个玩家已经到达终点,则退出游戏
break;
}else{
System.out.println("正在掷筛子……");
nextRandom=(int)(Math.random()*10); //下一个随机数
// Play.working(2000);
if(whoGo==1){ //玩家1走棋
p1Location=Play.findPlayer(p1);//找出两位玩家的位置
if(p1Location+nextRandom>map.length-1){ //如果掷到的筛子数+旧位置数超过了地图的长度
nextRandom=map.length-p1Location-1; //则掷到的筛子数=地图长度-当前玩家位置
isSuccess=true; //掷到此筛子数的玩家一定赢了
}
if(nextRandom<=0){
nextRandom+=1;
}
System.out.println("\""+p1+"\""+"掷到了:"+nextRandom+"点"+",正在走棋……");
// Play.working(1000);
if(map[p1Location]!=p2){
map[p1Location]=mapStyle; //将原来玩家1所在的位置替换成地图样式
}else{
map[p1Location]=p2; //如果原来的位置也有玩家2,则替换成玩家2的名字
}
map[p1Location+nextRandom]=p1; //随机数位置+旧位置=当前玩家所要在的位置
whoGo=2;
}else{
p2Location=Play.findPlayer(p2);
if(p2Location+nextRandom>map.length-1){
nextRandom=map.length-p2Location-1;
isSuccess=true;
}
if(nextRandom<=0){
nextRandom+=1;
}
System.out.println("\""+p2+"\""+"掷到了:"+nextRandom+"点"+",正在走棋...");
// Play.working(1000);
if(map[p2Location]!=p1){
map[p2Location]=mapStyle;
}else{
map[p2Location]=p1;
}
map[p2Location+nextRandom]=p2;
whoGo=1;
}
showMap();System.out.println(""); //重绘地图
if(isSuccess){
break;
}else{
if(whoGo==1){
System.out.println("\""+p2+"\""+"走完了,现在轮到"+"\""+p1+"\""+"走棋,按y键开始掷骰子");
}else{
System.out.println("\""+p1+"\""+"走完了,现在轮到"+"\""+p2+"\""+"走棋,按y键开始掷骰子");
}
}
continue;
}
}
System.out.println("已经决出胜负喽!下面统计战果"+"\r"+"*************************战果统计*************************");
//统计结果:
Play.Results(Play.p1,Play.p2);
return;
}
}