日期:2014-05-20 浏览次数:20848 次
/** * 下棋游戏 * @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; } }