亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

簡易撲克牌游戲:求大佬告知為什么調用同一個方法,玩家一能獲得最大手牌,玩家二卻不一定。

簡易撲克牌游戲:求大佬告知為什么調用同一個方法,玩家一能獲得最大手牌,玩家二卻不一定。

leexiaoxiao 2017-07-08 10:35:22
package?com.xiaoyuexiaos; import?java.util.ArrayList; import?java.util.List; import?java.util.Random; import?java.util.Scanner; public?class?TestGame?{ //定義一個List來存儲撲克牌 public?List<Pukepai>?aPuKePai; public?List<Player>?aPlayer; //初始化List public?TestGame(){ this.aPuKePai?=?new?ArrayList<Pukepai>();? this.aPlayer?=?new?ArrayList<Player>(); } /** ?*?添加撲克牌 ?*?*/ public?void?addPuKePai(){ String[]?PuKePaitype?=?{"黑桃","紅桃","梅花","方片"}; String[]?PuKePaipoints?=?{"2","3","4","5","6","7","8","9","10","J","Q","K","A"}; int?typeSize?=?PuKePaitype.length; int?pointsSize?=?PuKePaipoints.length; for(int?i=0;i<typeSize;i++){ for(int?j=0;j<pointsSize;j++){ Pukepai?one?=?new?Pukepai(PuKePaitype[i],PuKePaipoints[j]); aPuKePai.add(one); //System.out.println("添加了牌:"+?PuKePaitype[i]?+?PuKePaipoints[j]); } } } /** ?*?添加玩家 ?*?*/ public?void?addPlayer(){ Scanner?input?=?new?Scanner(System.in); for(int?i?=?0;?i<2?;?i++){ System.out.println("請輸入玩家id:"); int?id?=?input.nextInt(); System.out.println("請輸入玩家姓名:"); String?name?=?input.next(); List<Pukepai>?handPukepai?=?new?ArrayList<Pukepai>(); Player?p1?=?new?Player(name,id,handPukepai); aPlayer.add(p1); System.out.println("添加了玩家:"?+?p1.getName()); // for(Player?p:aPlayer){ // if(id?==?p.getId()){ // System.out.println("該ID已被占用?。。?); // i--; // break; // } // else{ // // } // } //System.out.println("請輸入玩家姓名:"); //name?=?input.next(); } input.close(); } /** ?*?洗牌 ?*?*/ public?void?mixPukepai(){ Random?random?=?new?Random(); // System.out.println("洗牌前為:"); // for(Pukepai?p2:aPuKePai){ // System.out.println(p2.getType()+p2.getPoints()); // } for(Pukepai?pkp:aPuKePai){ int?a?=?random.nextInt(52); Pukepai?p1?=?aPuKePai.get(a); aPuKePai.set(a,?pkp); int?index?=?aPuKePai.indexOf(pkp); aPuKePai.set(index,?p1); } // System.out.println("洗牌后為:"); // for(Pukepai?p2:aPuKePai){ // System.out.println(p2.getType()+p2.getPoints()); // } } /** ?*?發牌 ?*?*/ public?void?givePlayPukepai(){ Player?player1?=?aPlayer.get(0); Player?player2?=?aPlayer.get(1); System.out.println("給玩家"+player1.getName()+"發第一張牌"); Pukepai?p1?=?aPuKePai.get(0); player1.getHandPukepai().add(p1); System.out.println("給玩家"+player2.getName()+"發第一張牌"); Pukepai?p2?=?aPuKePai.get(1); player2.getHandPukepai().add(p2); System.out.println("給玩家"+player1.getName()+"發第二張牌"); Pukepai?p3?=?aPuKePai.get(2); player1.getHandPukepai().add(p3); System.out.println("給玩家"+player2.getName()+"發第二張牌"); Pukepai?p4?=?aPuKePai.get(1); player2.getHandPukepai().add(p4); System.out.println("發牌結束?。?); } /** ?*?得到玩家手中最大的一張手牌 ?*?傳入一個玩家作為參數 ?*?取得他的手牌 ?*?進行比較大小 ?*?*/ public?Pukepai?getMaxHandPukepai(Player?p){ List<Pukepai>?handPukepaiList?=?p.getHandPukepai(); Pukepai?p1?=?handPukepaiList.get(0); Pukepai?p2?=?handPukepaiList.get(1); return?getMaxPukepai(p1,p2); } /** ?*?比較兩張牌誰更大 ?*?*/ public?Pukepai?getMaxPukepai(Pukepai?p1,Pukepai?p2){ String[]?PuKePaitype?=?{"方片","梅花","紅桃","黑桃"}; String[]?PuKePaipoints?=?{"2","3","4","5","6","7","8","9","10","J","Q","K","A"}; int?indexType1?=?0; int?indexType2?=?0; int?indexPoint1?=?0; int?indexPoint2?=?0; //得到手牌Points對應的索引 for(int?i?=0;i<PuKePaipoints.length;i++){ if(p1.getPoints()==PuKePaipoints[i]){ indexPoint1?=?i; } if(p2.getPoints()==PuKePaipoints[i]){ indexPoint2?=?i?; } } //得到手牌type對應的索引 for(int?i?=0;i<PuKePaitype.length;i++){ if(p1.getType()==PuKePaitype[i]){ indexType1?=?i; } if(p2.getType()==PuKePaitype[i]){ indexType2?=?i?; } } //先進行大小的比較如果大小一樣就進行類型的比較 if(indexPoint1>indexPoint2){ return?p1; } else?if(indexPoint1<indexPoint2){ return?p2; } else//類型的比較 { if(indexType1>indexType2){ return?p1; } else{ return?p2; } } } /** ?*?比較大小游戲開始 ?*?*/ public?void?playGame(){ System.out.println("開始游戲!"); //得到添加的兩個玩家 Player?player1?=?aPlayer.get(0); Player?player2?=?aPlayer.get(1); //輸出他們手中的撲克牌 System.out.println(player1.getName()+"獲得了"+aPuKePai.get(0).getTypeAndPoints()+ "和"+aPuKePai.get(2).getTypeAndPoints()); System.out.println(player2.getName()+"獲得了"+aPuKePai.get(1).getTypeAndPoints()+ "和"+aPuKePai.get(3).getTypeAndPoints()); //獲得他們手中最大的一張 Pukepai?max1?=?getMaxHandPukepai(player1); Pukepai?max2?=?getMaxHandPukepai(player2); //分別輸出最大的一張 System.out.println("玩家"+player1.getName()+"最大的手牌為:"+ max1.getType()+max1.getPoints()); System.out.println("玩家"+player2.getName()+"最大的手牌為:"+ max2.getType()+max2.getPoints()); Pukepai?max12?=?getMaxPukepai(max1,max2); if(max12.getPoints()==max1.getPoints()&&?max12.getType()==max1.getType()){ System.out.println("-----恭喜玩家"+player1.getName()+"獲得勝利?。?!-----"); } else{ System.out.println("-----恭喜玩家"+player2.getName()+"獲得勝利!??!-----"); } } public?static?void?main(String[]?args)?{ //?TODO?Auto-generated?method?stub TestGame?tg?=?new?TestGame(); tg.addPuKePai(); tg.addPlayer(); tg.mixPukepai(); tg.givePlayPukepai(); tg.playGame(); } } //玩家類 package?com.xiaoyuexiaos; import?java.util.ArrayList; import?java.util.List; public?class?Player?{ private?String?name; private?int?id; private?List<Pukepai>?handPukepai; public?Player(String?name,int?id,List<Pukepai>?handPukepai){ this.name?=?name; this.id?=?id; this.handPukepai?=?new?ArrayList<Pukepai>(); } public?String?getName()?{ return?name; } public?void?setName(String?name)?{ this.name?=?name; } public?int?getId()?{ return?id; } public?void?setId(int?id)?{ this.id?=?id; } public?List<Pukepai>?getHandPukepai()?{ return?handPukepai; } public?void?setHandPukepai(List<Pukepai>?handPukepai)?{ this.handPukepai?=?handPukepai; } } //撲克牌類 package?com.xiaoyuexiaos; public?class?Pukepai?implements?Comparable<Pukepai>{ private?String?type; private?String?points; public?Pukepai(){} public?Pukepai(String?type,String?points){ this.type?=?type; this.points?=points; } public?int?compareTo(Pukepai?o){ return?this.getPoints().compareTo(o.getPoints()); } public?String?getType()?{ return?type; } public?void?setType(String?type)?{ this.type?=?type; } public?String?getPoints()?{ return?points; } public?void?setPoints(String?points)?{ this.points?=?points; } public?String?getTypeAndPoints(){ return?type?+?points; } }
查看完整描述

1 回答

?
MR帽子先生

TA貢獻245條經驗 獲得超106個贊

如果你值得是一次運行的話是因為玩家一先運行的緣故,所以導致提前獲取數字,雖然兩者獲取同一個數的概率是一樣的,倒是由于程序中的優先執行順序導致第一位玩家獲取的是最大值。第二位玩家執行的時候應為數字已經不夠了所以就沒有了。

查看完整回答
反對 回復 2017-07-08
  • 1 回答
  • 1 關注
  • 1256 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號