撲克牌游戲-交作業
package?com.imooc.pukepai; import?java.util.ArrayList; import?java.util.Collection; import?java.util.Collections; import?java.util.HashMap; import?java.util.HashSet; import?java.util.InputMismatchException; import?java.util.List; import?java.util.Map; import?java.util.Map.Entry; import?java.util.Scanner; import?java.util.Set; public?class?PuKeTest?{ ?????public?Set<PuKe>??si; ?????public?List<PuKe>?puke; ?????public?List<Player>?player; ?????/** ?????*?創建一副撲克牌 ?????*/ ????????public?void?creatPuke(){ ???????? puke=new?ArrayList<PuKe>(); ???????? String[]?li={"2","3","4","5","6","7","8","9","10","J","Q","K","A"}; ???????? String[]?lis={"黑桃","紅桃","方塊","梅花"}; ???????? //創建集合中的對象 ???????? PuKe?pu; ???????? for(int?i=0;i<lis.length;i++){ ???????? ???for(int?j=0;j<li.length;j++){ ???????? ??? pu=new?PuKe(); ???????? ??? pu.colour=lis[i]; ???????? ??? pu.num=li[j]; ???????? ??? puke.add(pu); ???????? } ???????? } ??? ???????? ?System.out.println("-------創建撲克牌成功--------"); ??? ?? ???????? ??for?(PuKe?p?:?puke)?{ ???????? ????System.out.print(p.colour+p.num+"?"); ???????? ????} ??????? } ??????? /** ??????? *?洗牌 ??????? *?@return? ??????? */ ??????? public?void?xiPai(){ ??????? System.out.println("-----開始洗牌------"); ??????? si=new?HashSet<PuKe>(); ??????? PuKe?pu; ??????? for(int?i=0;i<puke.size();i++){ ??????? pu=new?PuKe(); ??????? pu.colour=puke.get(i).colour; ??????? pu.num=puke.get(i).num; ??????? si.add(pu); ??????? } ??????? ?System.out.println(); ??????? ?System.out.println("-------洗牌成功-------"); ??????? for?(PuKe?p?:?si)?{ ??????? System.out.print(p.colour+p.num+"?"); ??????? } ??????? ??????? } ???????/** ???????*?創建兩個player ???????*/ ???????public?void?creatPlayer(int?a){ ???????? System.out.println("--------開始創建玩家--------"); ???? ???????? player=new?ArrayList<Player>(); ???????? Scanner?sc=new?Scanner(System.in); ???????? Player?players; ???????? for(int?i=1;i<=a;i++){ ???????? try?{ ???????? players=new?Player(); ???????? System.out.println("請輸入第"+i+"個人的ID:"); ???????? players.id=sc.nextInt(); ???????? System.out.println("請輸入第"+i+"個人的名字:"); ???????? players.name=sc.next(); ???????? player.add(players); ???????? }catch(InputMismatchException?e){ ???????? System.out.println("您輸入的ID有誤,請重新輸入!"); ???????? this.creatPlayer(a); ???????? }catch?(NumberFormatException?e)?{ ???????? //?TODO:?handle?exception ???????? System.out.println("程序有誤,請重新開始!"); ???????? e.printStackTrace(); ???????? } ??????? } ??????? ????????System.out.println("這個游戲參加的玩家有"+a+"個人,他們分別是:"); ??????? ???????? for?(Player?p?:?player)?{ ??????? ???????? System.out.println("玩家:"+p.id+"號"+p.name); ??????? ???????? } ??????? ???????? } ??????? /** ??????? *?玩家從洗完牌的集合中獲取撲克牌 ??????? */ ??????? public?void?getPuke(int?b){ ??????? System.out.println("---------獲取"+b+"張手牌--------"); ??????? List<PuKe>?puk=new?ArrayList<PuKe>(); ??????? puk.addAll(si); ??????? // for?(PuKe?puKe?:?puk)?{ ??????? // System.out.print(puKe.colour+puKe.num+"?"); ??????? // } ??????? ???int?c=player.size(); ??????? ???List<PuKe>?ps; ??????? ???for(int?i=0;i<c;i++){ ??????? ???ps=new?ArrayList<PuKe>(); ??????? ???player.get(i).pukes=new?ArrayList<PuKe>(); ??????? ???System.out.println("玩家"+player.get(i).name+"選的牌為:"); ??????? ??? for(int?j=0;j<b;j++){ ??????? ??? ps.add(puk.get(i+j*c)); ??????? ??? System.out.print(puk.get(i+j*c).colour+puk.get(i+j*c).num+""); ??????? ? } ??????? ? System.out.println(); ??????? ? ????player.get(i).pukes.addAll(ps); ??????? // ????for?(PuKe?puKe?:?player.get(i).pukes)?{ ??????? // System.out.println(puKe.colour+puKe.num+""); ??????? // } ??????? } ??????? }??? ??????? ?/**??? ??????? ???*?將玩家的撲克牌進行比較?? ??????? ???*/ ??????? ????public?void?vsMax(){ ??????? ???? System.out.println("-------開始進行比較------"); ??????? ???? // player=new?ArrayList<Player>(); ??????? ???? Map<String,PuKe>?map=new?HashMap<String,PuKe>(); ??????? ???? List<PuKe>?lis=new?ArrayList<PuKe>(); ??????? ???? for(int?i=0;i<player.size();i++){ ??????? ???? int?b=player.get(i).pukes.size(); ??????? ???? Collections.sort(player.get(i).pukes,new?CardComparator()); ??????? ???? System.out.println(player.get(i).name+"的最大牌為:"+player.get(i).pukes.get(b-1)); ??????? ???? lis.add(player.get(i).pukes.get(b-1)); ??????? ???? map.put(player.get(i).name,?player.get(i).pukes.get(b-1)); ??????? ???? } ??????? ???? //對各個人的最大值進行整合排序 ??????? ???? Collections.sort(lis,new?CardComparator()); ??????? ???? int?c=lis.size(); ??????? ???? Set<Entry<String,PuKe>>?entrySet=map.entrySet(); ??????? ???? for(Entry<String,PuKe>?entry:entrySet){ ??????? ???? if(entry.getValue().equals(lis.get(c-1))){ ??????? ???? System.out.println(entry.getKey()+"獲得了勝利!其最大值為:"+entry.getValue()); ??????? ???? } ??????? ???? } ??????? ??? } ??????? ?/** ??????? ?*?@param?args ??????? ?*/ ??????? ?public?static?void?main(String[]?args)?{ ??????? ? //?TODO?Auto-generated?method?stub ??????? ? PuKeTest?pt=new?PuKeTest(); ??????? ? pt.creatPuke(); ??????? ? pt.xiPai(); ??????? ? pt.creatPlayer(3); ??? ??????? ? ?pt.getPuke(4); ???? ??????? ? ?pt.vsMax(); ??????? ? ? ??????? ? ?} ??????? ? ?} ??????? ? ? ??????? ? ? package?com.imooc.pukepai; ????public?class?PuKe?{ ???? public?String?colour; ???? public?String?num; ????public?PuKe(){ ???? ???? }???? ????public?PuKe(String?colour,String?num){?? ?????? this.colour=colour;???? ?????? this.num=num;??? ?????? ?} ?????@Override ????public?int?hashCode()?{ ???? final?int?prime?=?31; ???? int?result?=?1; ???? result?=?prime?*?result?+?((colour?==?null)???0?:?colour.hashCode()); ???? result?=?prime?*?result?+?((num?==?null)???0?:?num.hashCode()); ???? return?result; ???? } ????@Override ????public?boolean?equals(Object?obj)?{ ???? if?(this?==?obj) ???? return?true; ???? if?(obj?==?null) ???? return?false; ???? if?(!(obj?instanceof?PuKe)) ???? return?false; ???? PuKe?other?=?(PuKe)?obj; ???? if?(colour?==?null)?{ ???? if?(other.colour?!=?null) ???? return?false; ???? ??}?else?if?(!colour.equals(other.colour)) ???? ?? return?false; ???? ?? if?(num?==?null)?{ ???? ?? if?(other.num?!=?null) ???? ?? return?false; ???? ?? }?else?if?(!num.equals(other.num)) ???? ?? return?false; return?true; ???? ?? } ????@Override ????public?String?toString()?{ ????????return?colour+num; ????????} ?? ??????????} ?????????? package?com.imooc.pukepai; import?java.util.List; ???public?class?Player?{ ??? public?String?name; ??? public?int?id;???? ??? public?List<PuKe>?pukes; ??? } ??? package?com.imooc.pukepai; import?java.util.Comparator; ???public?class?CardComparator?implements?Comparator<PuKe>?{ ???@Override ???public?int?compare(PuKe?o1,?PuKe?o2)?{ ??? //?TODO?Auto-generated?method?stub ??? if(o1.num.equals(o2.num)){ ??? return?o1.colour.compareTo(o2.colour); ??? }else{ ??? return?o1.num.compareTo(o2.num); ??? } ??? } ??? }
寫的頭蒙