借鑒別人的代碼加以改造完成的撲克牌游戲~~~貼墻!!
package?com.joker.test; import?java.util.ArrayList; import?java.util.Collections; import?java.util.HashMap; import?java.util.Iterator; import?java.util.List; import?java.util.Map.Entry; import?java.util.Map; import?java.util.Scanner; import?java.util.Set; import?com.joker.entity.Player; import?com.joker.entity.Poker; /** ?*?主體類 ?*?@author?MeRos ?* ?*/ public?class?PokerGame?{ Map<Integer,?Player>?playerMap; List<Poker>?pokerList; Player?player; String[]?type?=?{?"黑桃",?"紅桃",?"梅花",?"方塊"?}; String[]?pointer?=?{?"2",?"3",?"4",?"5",?"6",?"7",?"8",?"9",?"10",?"J", "Q",?"K",?"A"?}; public?PokerGame()?{ pokerList?=?new?ArrayList<Poker>(); playerMap?=?new?HashMap<Integer,?Player>(); } /** ?*?創(chuàng)建撲克牌 ?*? ?*?@param?args ?*/ public?void?pokerAdd()?{ System.out.println("-------創(chuàng)建撲克牌-------"); for?(int?i?=?0;?i?<?type.length;?i++)?{ for?(int?j?=?0;?j?<?pointer.length;?j++)?{ pokerList.add(new?Poker(type[i],?pointer[j])); } } System.out.println("-------撲克牌創(chuàng)建成功-------"); } /** ?*?遍歷顯示所有撲克牌 ?*? ?*?@param?args ?*/ public?void?pokerGet()?{ for?(Iterator<Poker>?it?=?pokerList.iterator();?it.hasNext();)?{ for?(int?i?=?0;?i?<?type.length;?i++)?{ for?(int?j?=?0;?j?<?pointer.length;?j++)?{ Poker?poker?=?it.next(); System.out.print(poker.toString()?+?"?"); } System.out.println(); } } } /** ?*?洗牌 ?*/ public?void?shufflePoker()?{ System.out.println("-------開始洗牌-------"); Collections.shuffle(pokerList); } /** ?*?創(chuàng)建玩家 ?*? ?*?@param?args ?*/ public?void?playerAdd()?{ System.out.println("-------創(chuàng)建玩家-------"); int?i?=?0; while?(i?<?2)?{ System.out.println("請(qǐng)輸入玩家的ID:"); try?{ Scanner?input?=?new?Scanner(System.in); int?id?=?input.nextInt(); Player?playerID?=?playerMap.get(id); if?(playerID?==?null)?{ System.out.println("請(qǐng)輸入第"?+?(i?+?1)?+?"位玩家的姓名:"); String?name?=?input.next(); Player?player?=?new?Player(id,?name); playerMap.put(id,?player); System.out.println("成功創(chuàng)建玩家:"?+?playerMap.get(id).getName()); System.out.println("--------------------"); i++; }?else?{ System.out.println("該ID已被占用~~"); continue; } }?catch?(Exception?e)?{ System.out.println("請(qǐng)輸入整數(shù)類型ID!!"); //?e.printStackTrace(); continue; } } //?遍歷輸出玩家信息 Set<Entry<Integer,?Player>>?entrySet?=?playerMap.entrySet(); for?(Entry<Integer,?Player>?entry?:?entrySet)?{ System.out.println("-----歡迎玩家:"?+?entry.getValue().getName()); } } /** ?*?開始發(fā)牌 ?*? ?*?@param?args ?*/ public?void?pokerSend()?{ System.out.println("-------開始發(fā)牌-------"); Set<Integer>?keySet?=?playerMap.keySet(); int?num?=?0; for?(int?i?=?0;?i?<?2;?i++)?{ for?(Integer?id?:?keySet)?{ Player?player?=?playerMap.get(id); if?(player?!=?null)?{ System.out.println("---玩家:"?+?player.getName()?+?"拿牌~~~"); player.handPoker.add(pokerList.get(num)); num++; } } } System.out.println("-------發(fā)牌結(jié)束-------"); } /** ?*?開始游戲,每個(gè)玩家取得手牌中的最大牌 ?*? ?*?@param?args ?*/ public?void?pokerGame()?{ System.out.println("-------游戲開始-------"); List<Poker>?pokerMax?=?new?ArrayList<Poker>(); Set<Entry<Integer,?Player>>?entrySet?=?playerMap.entrySet(); //?取得當(dāng)前玩家的最大手牌 for?(Entry<Integer,?Player>?entry?:?entrySet)?{ //?Set集合轉(zhuǎn)換為L(zhǎng)ist集合 List<Poker>?poker?=?new?ArrayList<Poker>(entry.getValue().handPoker); //?手牌sort排序后最大的在最后,所以用到reverse進(jìn)行翻轉(zhuǎn),將最大值放在最前面 Collections.sort(poker); Collections.reverse(poker); //?玩家手牌當(dāng)中的最大牌放入pokerMax集合 pokerMax.add(poker.get(0)); System.out.println("玩家:"?+?entry.getValue().getName()?+?"最大的手牌是:" +?poker.get(0).toString()); } //?取得pokerMax集合中的最大牌判斷勝負(fù) Collections.sort(pokerMax); Collections.reverse(pokerMax); for?(Entry<Integer,?Player>?entry?:?entrySet)?{ if?(entry.getValue().handPoker.contains(pokerMax.get(0)))?{ System.out.println("-------玩家:"?+?entry.getValue().getName() +?"獲勝!!"); } } //?輸出玩家手中的所有牌 System.out.println("玩家各自的手牌為:"); for?(Entry<Integer,?Player>?entry?:?entrySet)?{ System.out.print(entry.getValue().getName()?+?":"); for?(Poker?poker?:?entry.getValue().handPoker)?{ System.out.print(poker.toString()+"?"); } System.out.println(); } } public?static?void?main(String[]?args)?{ PokerGame?pg?=?new?PokerGame(); pg.pokerAdd(); pg.pokerGet(); pg.shufflePoker(); pg.playerAdd(); pg.pokerSend(); pg.pokerGame(); } }
package?com.joker.entity; /** ?*?撲克牌類?四種花色:黑桃、紅桃、梅花、方片?十三種點(diǎn)數(shù):2-10、J、Q、K、A,不考慮大小王 ?*? ?*?@author?MeRos ?* ?*/ public?class?Poker?implements?Comparable<Poker>?{ private?String?type; private?String?pointer; public?Poker(String?type,?String?pointer)?{ this.setPointer(pointer); this.setType(type); } public?String?getType()?{ return?type; } public?void?setType(String?type)?{ this.type?=?type; } public?String?getPointer()?{ return?pointer; } public?void?setPointer(String?pointer)?{ this.pointer?=?pointer; } @Override public?int?hashCode()?{ final?int?prime?=?31; int?result?=?1; result?=?prime?*?result?+?((pointer?==?null)???0?:?pointer.hashCode()); result?=?prime?*?result?+?((type?==?null)???0?:?type.hashCode()); return?result; } @Override public?boolean?equals(Object?obj)?{ if?(this?==?obj) return?true; if?(obj?==?null) return?false; if?(!(obj?instanceof?Poker)) return?false; Poker?other?=?(Poker)?obj; if?(pointer?==?null)?{ if?(other.pointer?!=?null) return?false; }?else?if?(!pointer.equals(other.pointer)) return?false; if?(type?==?null)?{ if?(other.type?!=?null) return?false; }?else?if?(!type.equals(other.type)) return?false; return?true; } @Override public?int?compareTo(Poker?o)?{ String?pokerPointer?=?"2,3,4,5,6,7,8,9,10,J,Q,K,A"; String?pokerType?=?"方塊,梅花,紅桃,黑桃"; int?result; result?=?pokerPointer.indexOf(this.getPointer()) -?pokerPointer.indexOf(o.getPointer()); if?(result?==?0)?{ result?=?pokerType.indexOf(this.getType()) -?pokerType.indexOf(o.getPointer()); } return?result; } @Override public?String?toString()?{ return?type?+?pointer; } }
package?com.joker.entity; import?java.util.HashSet; import?java.util.Set; /** ?*?玩家類 ?*?屬性:ID、姓名、手牌 ?*?手牌為撲克牌集合 ?*?@author?MeRos ?* ?*/ public?class?Player?{ private?int?id; private?String?name; public?Set<Poker>?handPoker; public?Player(int?id,?String?name)?{ this.setId(id); this.setName(name); handPoker?=?new?HashSet<Poker>(); } public?int?getId()?{ return?id; } public?void?setId(int?id)?{ this.id?=?id; } public?String?getName()?{ return?name; } public?void?setName(String?name)?{ this.name?=?name; } }
這里三個(gè)集合都有用到、玩家類中的手牌使用Set集合是因?yàn)橹挥幸桓迸?每個(gè)玩家拿到的手牌都是不同的~~
2015-12-30
你的比較大小的方法,寫的太棒啦?。?!膜拜膜拜。。。。。。
2015-12-14
Set<Entry<Integer,?Player>>?entrySet?=?playerMap.entrySet();
entry是在哪一節(jié)的??有點(diǎn)印象,忘記了
2015-12-05
我不太明白,為什么Set,Map,List之間來(lái)回轉(zhuǎn)換,都用統(tǒng)一的集合類型不行嗎?
比如:
????List<Poker>?pokerList;
?Set<Poker>?handPoker;
handPoker?=?new?HashSet<Poker>();這些都是存放撲克的,統(tǒng)一用Set或者List不行嗎
還有
List<Poker>?pokerMax?=?new?ArrayList<Poker>();
?Set<Entry<Integer,?Player>>?entrySet?=?playerMap.entrySet(); ?這些轉(zhuǎn)換一時(shí)真的很費(fèi)解??!
求大神解讀?。。。。?!
2015-11-08
比較大小用index那個(gè)方法真的太棒了!?。?/p>