交作業(yè)~~~
交作業(yè)!~~~
package?gameEzPoker; /** ?*?此為撲克牌類,定義撲克牌的屬性: ?*?1.四種花色:黑桃、紅桃、梅花、方片 ?*?2.13種點數:2-10,J、Q、K、A,不考慮大小王 ?*?@author?sys ?* ?*/ public?class?Poker?{ //定義撲克牌屬性 //花色 private?String?color; //點數大小 private?String?num; //構造方法初始化屬性 public?Poker(String?color,String?num){ //初始化類屬性 this.color?=?color; this.num?=?num; } //無參構造方法 public?Poker(){ } //屬性的getter和setter方法 //獲取color屬性 public?String?getColor()?{ return?color; } //修改color屬性 public?void?setColor(String?color)?{ this.color?=?color; } //獲取num屬性 public?String?getNum()?{ return?num; } //修改num屬性 public?void?setNum(String?num)?{ this.num?=?num; } }
package?gameEzPoker; import?java.util.ArrayList; import?java.util.List; /** ?*?玩家類需要具備的屬性: ?*?1.玩家ID ?*?2.玩家姓名 ?*?3.玩家所持有的的手牌 ?*?@author?sys ?*/ public?class?Player?{ //創(chuàng)建玩家ID屬性 private?String?ID; //創(chuàng)建玩家名稱屬性 private?String?name; //創(chuàng)建玩家所持手牌集合 public?List<Poker>?playerPoker; //構造方法初始化屬性 public?Player(String?ID,String?name){ this.ID?=?ID; this.name?=?name; } public?Player(){ this.playerPoker?=?new?ArrayList<Poker>(); } //getter和setter方法 //獲取ID屬性 public?String?getID()?{ return?ID; } //為ID賦值 public?void?setID(String?iD)?{ ID?=?iD; } //獲取name屬性 public?String?getName()?{ return?name; } //為name賦值 public?void?setName(String?name)?{ this.name?=?name; } }
package?gameEzPoker; import?java.util.ArrayList; import?java.util.Arrays; import?java.util.Collections; import?java.util.Comparator; import?java.util.InputMismatchException; import?java.util.List; import?java.util.Random; import?java.util.Scanner; /** *??開始游戲 */ public?class?GameStarter?implements?Comparator<Poker>{ //創(chuàng)建玩家集合 private?List<Player>?player; //撲克牌集合 private?static?List<Poker>?poker; //洗牌后的撲克牌集合 private?List<Poker>?pokerAfterShuffle; //發(fā)牌時臨時存放Poker private?Poker?getPoker; //創(chuàng)建Scanner對象 private?static?Scanner?input; static{//靜態(tài)初始化塊,代碼只需要初始化一次 input?=?new?Scanner(System.in); //創(chuàng)建一副撲克牌 poker?=?new?ArrayList<Poker>(); //花色 final?String[]?color?={"方片","梅花","紅桃","黑桃"}; //創(chuàng)建撲克牌點數字符串 String?s?=?"2345678910JQKA"; //根據4種不同花色創(chuàng)建點數 System.out.println("--------撲克牌創(chuàng)建中...----------"); for(int?j?=?0;j<4;j++){ for(int?i?=?0;i?<?14;i++){ StringBuilder?s2?=?new?StringBuilder();//接收點數 if(i==8){ s2.append(s.charAt(i)); s2.append(s.charAt(i+1)); poker.add(new?Poker(color[j],s2.toString())); continue; } if(i==9) continue; s2.append(s.charAt(i)); poker.add(new?Poker(color[j],s2.toString())); } } //撲克牌集合的另一種創(chuàng)建方法foreach方法 ////點數 //final?String[]?num?=?{"2","3","4","5","6","7","8","9","10","J","Q","K","A"}; ////花色 //final?String[]?color?={"方片","梅花","紅桃","黑桃"}; //for?(String?str1?:?color)?{ //for?(String?str2?:?num)?{ //Poker?p?=?new?Poker(str1,str2); //poker.add(p);? //} //} System.out.println("--------撲克牌創(chuàng)建成功!----------"); System.out.print("牌面為:"+"\n"+"[?"); for?(Poker?p?:?poker)?{ System.out.print(p.getColor()+p.getNum()+"?"); } System.out.println("]"); } /** *?構造方法初始化屬性 */ public?GameStarter(){ this.player?=?new?ArrayList<Player>(); this.pokerAfterShuffle?=?new?ArrayList<Poker>(); this.getPoker?=?new?Poker(); } /** *?@param?args */ public?static?void?main(String[]?args)?{ //?TODO?Auto-generated?method?stub GameStarter?gs?=?new?GameStarter(); gs.shuffle();//洗牌 gs.printList(); gs.createPlayers();//添加玩家 gs.dealPoker(); } /** *?洗牌方法原理: *?利用遍歷,使用生成的隨機數字位置,將元素從有序的撲克集合中取出 *?再放入pokerAfterShuffle集合中即可 *?要求:元素不可重復添加 */ public?void?shuffle(){ //創(chuàng)建Random對象 Random?random?=?new?Random(); Poker?p?=?new?Poker(); System.out.println("---------開始洗牌...---------"); //取出poker中的元素 for(int?i?=?0;i?<?poker.size();i++){ do{ p?=?poker.get(random.nextInt(poker.size())); }while(pokerAfterShuffle.contains(p)); pokerAfterShuffle.add(p); } System.out.println("---------洗牌結束...---------"); } /** *?打印輸出List方法 */ public?void?printList(){ System.out.print("洗牌后:"+"\n"+"[?"); for(Poker?p:pokerAfterShuffle){ System.out.print(p.getColor()+p.getNum()+"?"); } System.out.println("]"); } /** *?創(chuàng)建玩家(兩個) *? */ public?void?createPlayers(){ try{ for(int?i?=?0;i?<?2;?i++){ Player?p?=?new?Player(); //提示輸入玩家ID System.out.println("請輸入第"+(i+1)+"位玩家的ID:"); System.out.println("請輸入玩家ID:"); p.setID(input.next()); if(p.getID().charAt(0)<'0'||p.getID().charAt(0)>'9') throw?new?InputMismatchException("輸入有誤!請輸入10以內的整數??!"); System.out.println("請輸入玩家姓名:"); p.setName(input.next()); //System.out.println(player.contains(new?Player(p.getID(),p.getName()))); player.add(p); } }catch(InputMismatchException?e){ System.out.println(e.getMessage()); createPlayers(); } } /** *?發(fā)牌并比較牌大小 */ public?void?dealPoker(){ //提示開始發(fā)牌 System.out.println("---------開始發(fā)牌...---------"); for(int?i?=?0;i?<?2;i++){//控制取牌數 for(int?j?=?0;j?<?2;j++){//控制玩家數 System.out.println("玩家"+player.get(j).getName()+"取牌"); getPoker?=?pokerAfterShuffle.get(2*i+j); player.get(j).playerPoker.add(getPoker); System.out.println("牌為:"+player.get(j).playerPoker.get(i).getColor()+ player.get(j).playerPoker.get(i).getNum()); } } for(int?i?=?0;i?<?2;i++){//玩家 for(int?j?=?0;j?<?2;j++){//牌數 System.out.println(player.get(i).getName()+":"+ player.get(i).playerPoker.get(j).getColor()+ player.get(i).playerPoker.get(j).getNum()); } } System.out.println("---------發(fā)牌結束!---------"); //開始比較牌面大小 Collections.sort(player.get(0).playerPoker,new?GameStarter()); Collections.sort(player.get(1).playerPoker,new?GameStarter()); System.out.println("各自最大的手牌為:"+"\n"+player.get(0).getName()+":"+ player.get(0).playerPoker.get(1).getColor() +player.get(0).playerPoker.get(1).getNum()); System.out.println(player.get(1).getName()+":"+player.get(1).playerPoker.get(1).getColor() +player.get(1).playerPoker.get(1).getNum()); System.out.println("---------兩位玩家各持的手牌為---------"); for(int?i?=?0;i?<?2;i++){//玩家 for(int?j?=?0;j?<?2;j++){//牌數 System.out.println(player.get(i).getName()+":"+ player.get(i).playerPoker.get(j).getColor()+ player.get(i).playerPoker.get(j).getNum()); } } System.out.println("-------------比較大小------------"); if(compare(player.get(0).playerPoker.get(1),player.get(1).playerPoker.get(1))==1) System.out.println("玩家"+player.get(0).getName()+"獲勝!"); else System.out.println("玩家"+player.get(1).getName()+"獲勝!"); System.out.println("---------------游戲結束--------------"); } @Override /** *?用到Collections工具類的sort方法 *?需要重寫comparator方法,對泛型為Poker的List進行排序 */ public?int?compare(Poker?o1,?Poker?o2)?{ String[]?s?=?{"2","3","4","5","6","7","8","9","10","J","Q","K","A"}; if(Arrays.asList(s).indexOf(o1.getNum())?>?Arrays.asList(s).indexOf(o2.getNum())) return?1; else if(Arrays.asList(s).indexOf(o1.getNum())?==?Arrays.asList(s).indexOf(o2.getNum())){ if(poker.indexOf(o1)?>?poker.indexOf(o2)) return?1; else return?-1; } else return?-1; } }
2019-07-19
getPoker?=?pokerAfterShuffle.get(
2
*i+j);怎么理解??
2019-07-16
運行結果: