經歷半年的學習,終于搞定了,歡迎大家討論!
//撲克類;
public?class?Poker?{
????private?String?flower;
????private?String?number;
????public?String?getFlower()?{
????????return?flower;
????}
????public?void?setFlower(String?flower)?{
????????this.flower?=?flower;
????}
????public?String?getNumber()?{
????????return?number;
????}
????public?void?setNumber(String?number)?{
????????this.number?=?number;
????}
????public?Poker(String?flower,?String?number)?{
????????this.flower?=?flower;
????????this.number?=?number;
????}????????
}
//玩家類
public?class?Player?{
????private?String?name;
????private?int?id;
????private?ArrayList?<Poker>myPoker=?new?ArrayList<Poker>();
????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?ArrayList<Poker>?getMyPoker()?{
????????return?myPoker;
????}
????public?void?setMyPoker(Poker?poker)?{
????????this.myPoker.add(poker);
????}
????
????
????public?Player(String?name,?int?id)?{
????????this.name?=?name;
????????this.id?=?id;
????????this.myPoker?=?myPoker;
????}
????????
????//顯示玩家手牌
????public?void?show(){
????????System.out.print("玩家"+getName()+":?");
????????for?(Poker?p?:?myPoker)?{
????????????System.out.print(p.getFlower()+p.getNumber()+"?");
????????}
????????
????????System.out.println();
????}
????
????//玩家獲勝信息
????
????public?void?winShow(Player?p){
????????System.out.println("-----玩家"+p.getName()+"獲勝!-----");????
????}
????
}
結果。
2015-04-22
寫的真棒。。。。額,原來collection.shuffle可以打亂數組。。。。我寒假糾結如何洗牌的問題糾結了很久
2015-04-22
其中一些算法可以更精簡點 建議你看些算法
2015-04-22
這網頁有點問題,把中間部分注釋掉了。
2015-04-22
//游戲工具類 public?class?GameUtil?{ ????private?ArrayList?<Poker>pokerList?=?new?ArrayList<Poker>();?//?撲克牌集合 ????public?ArrayList<Poker>?getPokerList()?{ ????????return?pokerList; ????} ????public?void?setPokerList(?ArrayList<Poker>?pokerList)?{ ????????this.pokerList?=?pokerList; ????} ???? ????/** ?????*?創建撲克牌,并存入pokerList中; ?????*/ ????public?void?makeUp(){ ????????System.out.println("--------------開始建牌------------"); ????????Poker[]?p=?new?Poker[52]; ????????//建立單張 ????????String?f[]?=?{"2","3","4","5","6","7","8","9","10","J","Q","K","A"}; ????????String?n[]?=?{"黑桃","紅心","梅花","方塊"}; ????????for(int?i=0;i<n.length;i++){ ????????????for(int?j=0;j<f.length;j++){ ????????????????p[i*13+j]?=?new?Poker(n[i],f[j]); ????????????}???????????? ????????} ????????//將單張寫入集合 ????????for?(int?i?=?0;?i?<?p.length;?i++)?{ ????????????pokerList.add(p[i]);???????????? ????????} ????????//測試撲克建立情況 ????????System.out.print("為:["); ????????for?(Poker?pk?:?pokerList)?{ ????????????System.out.print(pk.getFlower()+pk.getNumber()+"、"); ????????} ????????System.out.print("]"); ????????System.out.println(); ????????System.out.println("--------------建牌結束------------"); ????} ???? ????/** ?????*?洗牌; ?????*/???? ????public?void?shuffle(){ ????????System.out.println("--------------開始洗牌-----------"); ????????/*System.out.print("為:[");*/ ????????Collections.shuffle(pokerList); ????????/*測試洗牌情況 ????????for?(Poker?pk?:?pokerList)?{ ????????????System.err.print(pk.getFlower()+pk.getNumber()+"、");???????????? ????????} ????????System.out.print("]");*/ ????????System.out.println(); ????????System.out.println("--------------洗牌結束-----------"); ????} ????/** ?????*?發牌 ?????*/ ????public?void?setPoker(Player?p1,Player?p2){ ????????System.out.println("--------------開始游戲-----------"); ????????for?(int?i?=?0;?i?<?4;?i++)?{ ????????????if(i%2==0){ ????????????System.out.println("玩家"+p1.getName()+"拿牌!"); ????????????p1.setMyPoker(pokerList.get(i)); ????????????}else{ ????????????????System.out.println("玩家"+p2.getName()+"拿牌!"); ????????????????p2.setMyPoker(pokerList.get(i)); ????????????} ????????}????????? ???????? ????} ???? ????/** ?????*?比牌 ?????*/ ???? ????public?void?contrast(Player?p1,Player?p2){ ????????//玩家1自己的牌進行比較 ????????Poker?myp1?=?this.eqMyPoker(p1);?//第一個玩家的最大牌 ????????//玩家2自己的牌進行比較 ????????Poker?myp2?=?this.eqMyPoker(p2);?//第二個玩家的最大牌 ????????System.out.println("玩家"+p1.getName()+"的最大手牌為:"+myp1.getFlower() ????????????????+myp1.getNumber()); ????????System.out.println("玩家"+p2.getName()+"的最大手牌為:"+myp2.getFlower() ????????????????+myp2.getNumber());???? ???????? ????????//兩個玩家進行比較 ????????if(this.eqNumber(myp1)!=this.eqNumber(myp2)){ ????????????if(this.eqNumber(myp1)>this.eqNumber(myp2)){ ????????????????p1.winShow(p1); ????????????????System.out.println("玩家各自的手牌為:"); ????????????????p1.show(); ????????????????p2.show(); ????????????}else{ ????????????????p2.winShow(p2);???????????????? ????????????????System.out.println("玩家各自的手牌為:"); ????????????????p1.show(); ????????????????p2.show(); ????????????} ???????????? ????????}else{ ????????????if(this.eqFlower(myp1)>this.eqFlower(myp2)){ ????????????????p1.winShow(p1);???????????????? ????????????????System.out.println("玩家各自的手牌為:"); ????????????????p1.show(); ????????????????p2.show(); ????????????} ????????} ????} ????/** ?????*??玩家的牌進行比較 ?????*/ ????public?int?eqFlower(Poker?p){//比較花色 ????????int?flower?=?0; ????????for(int?i?=?0;i<2;i++){ ????????????switch(p.getFlower()){ ????????????case?"黑桃":?flower?=?4;break; ????????????case?"紅心":?flower?=?3;break; ????????????case?"梅花":?flower?=?2;break; ????????????case?"方塊":?flower?=?1;break; ????????????default?:?System.out.println("花色2失??!");?break; ????????????} ????????}???????? ????????return?flower; ???????? ????} ???? ????public?int?eqNumber(Poker?p){//比較點數 ????????int?number?=?0; ????????for(int?i?=?0;i<2;i++){ ????????????switch(p.getNumber()){ ????????????case?"1":?number?=?1;break; ????????????case?"2":?number?=?2;break; ????????????case?"3":?number?=?3;break; ????????????case?"4":?number?=?4;break; ????????????case?"5":?number?=?5;break; ????????????case?"6":?number?=?6;break; ????????????case?"7":?number?=?7;break; ????????????case?"8":?number?=?8;break; ????????????case?"9":?number?=?9;break; ????????????case?"10":?number?=?10;break; ????????????case?"J":?number?=?11;break; ????????????case?"Q":?number?=?12;break; ????????????case?"K":?number?=?13;break; ????????????case?"A":?number?=?14;break; ????????????default?:?System.out.println("點數失??!");?break; ????????????} ????????}???????? ????????return?number; ???????? ????} ????//內部比較,確定最大的一張牌 ????public?Poker?eqMyPoker(Player?p){ ????????if(eqNumber(p.getMyPoker().get(0))!=eqNumber(p.getMyPoker().get(1))){ ????????????if(eqNumber(p.getMyPoker().get(0))>eqNumber(p.getMyPoker().get(1))){ ????????????????return?p.getMyPoker().get(0); ???????????????????????? ????????????}else{ ????????????????return?p.getMyPoker().get(1); ????????????} ????????}else{ ????????????if(eqFlower(p.getMyPoker().get(0))>eqFlower(p.getMyPoker().get(1))){ ????????????????return?p.getMyPoker().get(0); ????????????}else{ ????????????????return?p.getMyPoker().get(1); ????????????} ???????????? ????????} ???????? ????} ????/** ?????*?創建玩家 ?????*? ?????*/ ???? ????public?void?setPlayer(){ ????????System.out.println("---------開始創建玩家------------"); ????????Scanner?sc?=?new?Scanner(System.in); ????????System.out.print("請輸入第一位玩家ID:"); ????????try?{ ????????????int?id?=?sc.nextInt();???????? ????????????System.out.print("請輸入第一位玩家姓名:"); ????????????String?name?=?sc.next();???????? ????????????Player?p1?=?new?Player(name,?id); ????????????System.out.println("歡迎玩家"+p1.getName()+"!"); ???????????? ????????????System.out.print("請輸入第二位玩家ID:"); ????????????int?id2?=?sc.nextInt(); ????????????System.out.print("請輸入第二位玩家姓名:"); ????????????String?name2?=?sc.next();???????? ????????????Player?p2?=?new?Player(name2,?id2); ????????????System.out.println("歡迎玩家"+p2.getName()+"!"); ????????????sc.close(); ????????????System.out.println("---------創建玩家結束------------"); ????????????setPoker(p1,p2);?//發牌; ????????????this.contrast(p1,?p2);?//比牌; ???????????? ????????}?catch?(Exception?e)?{ ????????????System.err.println("請輸入整數!"); ????????????setPlayer(); ????????} ????} ???? ???? } //游戲啟動類 public?class?Game?{ ????public?static?void?main(String[]?args)?{ ????????GameUtil?gu?=?new?GameUtil(); ????????gu.makeUp(); ????????gu.shuffle(); ????????gu.setPlayer(); ???????? ????} }