交作業(yè)啦,利用索引值判斷牌大小,可以調(diào)節(jié)玩牌的人數(shù)和牌數(shù)
將牌初始化時(shí)按照由小到大排列,其索引值即可表示牌的大小。
Poker.java中利用Map表示玩家的姓名,ID,持有的牌和牌的大小等。
Player.java是玩家的姓名和ID。
/********************Poker.java*******************/ package?com.wangvic.practice.poker; import?java.util.ArrayList; import?java.util.Collections; import?java.util.HashMap; import?java.util.InputMismatchException; import?java.util.List; import?java.util.Map; import?java.util.Scanner; import?java.util.Set; /** ?*?Poker?list ?*? ?*?@author?mhutc ?*?@param?CARDNUMBER?發(fā)牌數(shù) ?*?@param?PLAYERNUMBER??玩家數(shù)量 ?*?@param?pokerList??從小到大排列 ?*/ public?class?Poker?{ ????/**?從小到大排列?*/ ????public?List<PokerDefinition>?pokerList; ????/**?洗好之后的牌?*/ ????public?List<PokerDefinition>?pokerShuffleList; ????static?fianl?int?CARDNUMBER?=?3; ????static?final?int?PLAYERNUMBER?=?2; ????private?String[]?colorList?=?{?"方片",?"梅花",?"紅心",?"黑桃"?}; ????private?String[]?pointList?=?{?"2",?"3",?"4",?"5",?"6",?"7",?"8",?"9",?"10", ????????????"J",?"Q",?"K",?"A"?}; ????public?Map<String,?Player>?mapPlayer?=?new?HashMap<String,?Player>(); ????private?Scanner?console?=?new?Scanner(System.in); ????public?Poker()?{ ????????this.pokerList?=?new?ArrayList<PokerDefinition>(); ????????this.pokerShuffleList?=?new?ArrayList<PokerDefinition>(); ????} ????public?void?initialPoker()?{ ????????System.out.println("---------創(chuàng)建撲克牌---------"); ????????addPoker(); ????????System.out.println("--------撲克牌創(chuàng)建成功-------"); ????????//?輸出List ????????System.out.println("撲克牌為:"?+?pokerList); ????} ????public?void?addPoker()?{ ????????for?(String?point?:?pointList)?{ ????????????for?(String?color?:?colorList)?{ ????????????????pokerList.add(new?PokerDefinition(color,?point)); ????????????} ????????} ????} ????public?void?addPlayer()?{ ????????for?(int?i?=?0;?i?<?PLAYERNUMBER;)?{ ????????????System.out.println("請輸入第"?+?(i?+?1)?+?"位玩家的ID和姓名"); ????????????System.out.println("輸入ID:"); ????????????try?{ ????????????????String?id?=?console.nextInt()?+?""; ????????????????if?(mapPlayer.containsKey(id))?{ ????????????????????System.out.println("該ID已經(jīng)被占用,請重新輸入:"); ????????????????????continue; ????????????????}?else?{ ????????????????????System.out.println("輸入姓名:"); ????????????????????String?name?=?console.next(); ????????????????????mapPlayer.put(id,?new?Player(id,?name)); ????????????????????i++; ????????????????} ????????????}?catch?(InputMismatchException?e)?{ ????????????????System.out.println("Warning,請輸入整數(shù)"); ????????????????console.next(); ????????????????//?TODO:?handle?exception ????????????} ????????} ????} ????public?void?showPlayer()?{ ????????Set<String>?id?=?mapPlayer.keySet(); ????????for?(String?string?:?id)?{ ????????????System.out.println("----歡迎玩家:"?+?mapPlayer.get(string).getName()); ????????} ????} ????public?void?initialPlayer()?{ ????????addPlayer(); ????????showPlayer(); ????????System.out.println("----------玩家已就位----------"); ????????System.out.println("---------游戲即將開始---------"); ????} ????/** ?????*?Shuffle?the?poker. ?????*/ ????public?void?shufflePoker()?{ ????????pokerShuffleList.addAll(pokerList); ????????Collections.shuffle(pokerShuffleList); ????} ????/** ?????*?Start?poker?game. ?????*/ ????public?void?start()?{ ????????initialPoker(); ????????initialPlayer(); ????} ????/** ?????*?Shuffle?the?poker?and?deal. ?????*/ ????public?void?dealPoker()?{ ????????shufflePoker(); ????????//?輸出List ????????System.out.println("洗牌后撲克牌為:"?+?this.pokerShuffleList); ????????//?Everyone?got?two?poker?cards. ????????for?(int?i?=?0;?i?<?CARDNUMBER;?i++)?{ ????????????int?j?=?0; ????????????Set<String>?id?=?mapPlayer.keySet(); ????????????for?(String?string?:?id)?{ ????????????????System.out.println( ????????????????????????"----玩家"?+?mapPlayer.get(string).getName()?+?"-拿牌"); ????????????????PokerDefinition?pd?=?pokerShuffleList.get(i?*?PLAYERNUMBER?+?j); ????????????????mapPlayer.get(string).playerPoker.add(pd); ????????????????int?record?=?pokerList.indexOf(pd); ????????????????mapPlayer.get(string).record.add(record); ????????????????j++; ????????????} ????????} ????} ????public?void?showPoker()?{ ????????Set<String>?id?=?mapPlayer.keySet(); ????????for?(String?string?:?id)?{ ????????????System.out.println( ????????????????????"----玩家"?+?mapPlayer.get(string).getName()?+?"-拿的牌是:"); ????????????System.out.println(mapPlayer.get(string).playerPoker); ????????????System.out.println( ????????????????????"----玩家"?+?mapPlayer.get(string).getName()?+?"的成績是:"); ????????????System.out.println(mapPlayer.get(string).record); ????????} ????} ????public?int?getMaxRecord(List<Integer>?record)?{ ????????Collections.sort(record); ????????int?size?=?record.size(); ????????return?record.get(size?-?1); ????} ????public?int?compare(Map<String,?Player>?mapPlayer)?{ ????????List<Integer>?maxRecord?=?new?ArrayList<Integer>(); ????????Set<String>?id?=?mapPlayer.keySet(); ????????for?(String?string?:?id)?{ ????????????int?temp?=?getMaxRecord(mapPlayer.get(string).record); ????????????System.out.print( ????????????????????"玩家"?+?mapPlayer.get(string).getName()?+?"的最高成績是:"?+?temp); ????????????System.out.println(",最大牌是:"?+?pokerList.get(temp)); ????????????maxRecord.add(temp); ????????} ????????Collections.sort(maxRecord); ????????return?maxRecord.get(maxRecord.size()?-?1); ????} ????public?void?result()?{ ????????int?result?=?compare(mapPlayer); ????????Set<String>?id?=?mapPlayer.keySet(); ????????for?(String?string?:?id)?{ ????????????if?(mapPlayer.get(string).record.contains(result))?{ ????????????????System.out.println( ????????????????????????"恭喜玩家"?+?mapPlayer.get(string).getName()?+?"勝利!"); ????????????????break; ????????????} ????????} ????} ????public?static?void?main(String[]?args)?{ ????????Poker?poker?=?new?Poker(); ????????poker.start();//?游戲開始,初始化玩家和牌 ????????poker.dealPoker();//?洗牌和發(fā)牌 ????????poker.showPoker();//?玩家牌展示 ????????poker.result(); ????} }
/*********************Player.java*****************/ package?com.wangvic.practice.poker; import?java.util.ArrayList; import?java.util.HashSet; import?java.util.List; import?java.util.Set; /** ?*? ?*?@author?mhutc ?* ?*/ public?class?Player?{ ????private?String?id; ????private?String?name; ????public?List<Integer>?record; ????public?Set<PokerDefinition>?playerPoker; ????public?String?getId()?{ ????????return?id; ????} ????public?void?setId(String?id)?{ ????????this.id?=?id; ????} ????public?String?getName()?{ ????????return?name; ????} ????public?void?setName(String?name)?{ ????????this.name?=?name; ????} ????public?Player(String?id,?String?name)?{ ????????this.id?=?id; ????????this.name?=?name; ????????this.playerPoker?=?new?HashSet<PokerDefinition>(); ????????this.record?=?new?ArrayList<Integer>(); ????} }
/*******************PokerDefinition.java*****************/ package?com.wangvic.practice.poker; /** ?*? ?*?@author?mhutc ?* ?*/ public?class?PokerDefinition?{ ????/** ?????*?(non-Javadoc) ?????*? ?????*?@see?java.lang.Object#hashCode() ?????*/ ????@Override ????public?int?hashCode()?{ ????????final?int?prime?=?31; ????????int?result?=?1; ????????result?=?prime?*?result?+?((color?==?null)???0?:?color.hashCode()); ????????result?=?prime?*?result?+?((point?==?null)???0?:?point.hashCode()); ????????return?result; ????} ????/** ?????*?(non-Javadoc) ?????*? ?????*?@see?java.lang.Object#equals(java.lang.Object) ?????*/ ????@Override ????public?boolean?equals(Object?obj)?{ ????????if?(this?==?obj)?{ ????????????return?true; ????????} ????????if?(obj?==?null)?{ ????????????return?false; ????????} ????????if?(!(obj?instanceof?PokerDefinition))?{ ????????????return?false; ????????} ????????PokerDefinition?other?=?(PokerDefinition)?obj; ????????if?(color?==?null)?{ ????????????if?(other.color?!=?null)?{ ????????????????return?false; ????????????} ????????}?else?if?(!color.equals(other.color))?{ ????????????return?false; ????????} ????????if?(point?==?null)?{ ????????????if?(other.point?!=?null)?{ ????????????????return?false; ????????????} ????????}?else?if?(!point.equals(other.point))?{ ????????????return?false; ????????} ????????return?true; ????} ????private?String?color; ????private?String?point; ????public?PokerDefinition()?{ ????} ????public?PokerDefinition(String?color,?String?point)?{ ????????this.color?=?color; ????????this.point?=?point; ????} ????public?String?getColor()?{ ????????return?color; ????} ????/** ?????*?(non-Javadoc) ?????*? ?????*?@see?java.lang.Object#toString() ?????*/ ????@Override ????public?String?toString()?{ ????????//?TODO?Auto-generated?method?stub ????????return??color?+?point; ????} ????public?void?setColor(String?color)?{ ????????this.color?=?color; ????} ????public?String?getPoint()?{ ????????return?point; ????} ????public?void?setPoint(String?point)?{ ????????this.point?=?point; ????} }
2018-11-20
在添加玩家的?
AddPlayer()方法中,使用
continue,在輸入錯(cuò)誤的情況下,會導(dǎo)致玩家變少吧?