課程
/后端開發
/Java
/Java入門第三季
撲克牌有源碼嗎
2015-09-17
源自:Java入門第三季 7-1
正在回答
自己寫的程序,能實現要求,有些啰嗦,歡迎大家指教!??! package?com.marvin.java3_7_1; import?java.util.List; /** ?*?玩家類?包含玩家的ID,姓名,手牌的信息 ?*? ?*?@author?Prague ?* ?*/ public?class?Player?{ private?String?id; private?String?name; private?List<PlayCard>?handCard; public?Player(String?id,?String?name)?{ this.id?=?id; this.name?=?name; } 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?List<PlayCard>?getHandCard()?{ return?handCard; } public?void?setHandCard(List<PlayCard>?handCard)?{ this.handCard?=?handCard; } } package?com.marvin.java3_7_1; /** ?*?撲克類?包含撲克的花色、數字(或字母) ?*? ?*?@author?Prague ?* ?*/ public?class?PlayCard?{ private?String?color;//?記錄花色,黑桃>紅桃>梅花>方片 private?String?character;//?記錄牌面的數字的 private?int?realNum;//?記錄牌面數字的實際大小的,3<4<5<6<7<8<9<10<J<Q<K<A<2 private?int?num;?//?一副撲克牌每張撲克的唯一標示 private?int?realColor;?//?記錄牌面花色的實際大小,黑桃(3)>紅桃(2)>梅花(1)>方片(0) public?PlayCard(String?color,?String?character,?int?realNum,?int?realColor,?int?num)?{ this.color?=?color; this.character?=?character; this.realNum?=?realNum; this.realColor?=?realColor; this.num?=?num; } public?String?getColor()?{ return?color; } public?void?setColor(String?color)?{ this.color?=?color; } public?String?getCharacter()?{ return?character; } public?void?setCharacter(String?character)?{ this.character?=?character; } public?int?getRealNum()?{ return?realNum; } public?void?setRealNum(int?realNum)?{ this.realNum?=?realNum; } public?int?getNum()?{ return?num; } public?void?setNum(int?num)?{ this.num?=?num; } public?int?getRealColor()?{ return?realColor; } public?void?setRealColor(int?realColor)?{ this.realColor?=?realColor; } @Override public?int?hashCode()?{ final?int?prime?=?31; int?result?=?1; result?=?prime?*?result?+?num; return?result; } @Override public?boolean?equals(Object?obj)?{ if?(this?==?obj) return?true; if?(obj?==?null) return?false; if?(getClass()?!=?obj.getClass()) return?false; PlayCard?other?=?(PlayCard)?obj; if?(num?!=?other.num) return?false; return?true; } } package?com.marvin.java3_7_1; import?java.util.ArrayList; import?java.util.List; import?java.util.Scanner; /** ?*?創建兩名玩家?從鍵盤輸入玩家的ID和姓名 ?*? ?*?@author?Prague ?* ?*/ public?class?CreatePlayer?{ private?List<Player>?listPlayer?=?new?ArrayList<Player>(); public?List<Player>?getListPlayer()?{ return?listPlayer; } /** ?*?創建兩名玩家,從鍵盤輸入玩家信息 ?*/ @SuppressWarnings("resource") public?void?createPlayer()?{ Scanner?sc?=?new?Scanner(System.in); for?(int?i?=?0;?i?<?2;?i++)?{ System.out.println("請輸入玩家的ID:"); Player?p1?=?new?Player(null,?null); p1.setId(sc.next()); System.out.println("請輸入玩家的姓名:"); p1.setName(sc.next()); listPlayer.add(p1); } } } package?com.marvin.java3_7_1; import?java.util.ArrayList; import?java.util.List; /** ?*?創建一副撲克牌 ?*? ?*?@author?Prague ?* ?*/ public?class?CreatePlayCard?{ private?List<PlayCard>?listPlayCard?=?new?ArrayList<PlayCard>(); final?String[]?character?=?{?"3",?"4",?"5",?"6",?"7",?"8",?"9",?"10",?"J", "Q",?"K",?"A",?"2"?}; final?String[]?color?=?{?"黑桃",?"紅桃",?"梅花",?"方片"?}; public?List<PlayCard>?getListPlayCard()?{ return?this.listPlayCard; } //?創建撲克牌 public?void?createPlayCard()?{ int?num?=?0; for?(int?i?=?0;?i?<?13;?i++)?{ for?(int?j?=?0;?j?<?color.length;?j++)?{ PlayCard?pc?=?new?PlayCard(color[j],?character[i],?i,?(3?-?j), num++); if?(pc?!=?null)?{ listPlayCard.add(pc); } } } } } package?com.marvin.java3_7_1; import?java.util.ArrayList; import?java.util.List; import?java.util.Random; /** ?*?洗牌?將之前創建的撲克牌打亂順序 ?*? ?*?@author?Prague ?* ?*/ public?class?Shuffle?{ private?List<PlayCard>?shufflePlayCard?=?new?ArrayList<PlayCard>(); public?List<PlayCard>?getShufflePlayCard()?{ return?shufflePlayCard; } /** ?*?將輸入的撲克牌的順序打亂,返回洗牌后的撲克牌集合 ?*/ public?void?shuffle(List<PlayCard>?listPlayCard)?{ Random?random?=?new?Random(); while?(shufflePlayCard.size()?<?52)?{ int?num?=?random.nextInt(52); if?(!shufflePlayCard.contains(listPlayCard.get(num)))?{ shufflePlayCard.add(new?PlayCard(listPlayCard.get(num) .getColor(),?listPlayCard.get(num).getCharacter(), listPlayCard.get(num).getRealNum(),?listPlayCard.get( num).getRealColor(),?listPlayCard.get(num) .getNum())); }?else?{ continue; } } } } package?com.marvin.java3_7_1; import?java.util.ArrayList; import?java.util.List; /** ?*?發牌 ?*? ?*?@author?Prague ?* ?*/ public?class?DistributePlayCard?{ public?void?distribute(Player?p1,?Player?p2,?List<PlayCard>?playCard)?{ //?p1.setHandCard(handCard); List<PlayCard>?p1HandCard?=?new?ArrayList<PlayCard>(); List<PlayCard>?p2HandCard?=?new?ArrayList<PlayCard>(); p1HandCard.add(new?PlayCard(playCard.get(0).getColor(),?playCard.get(0) .getCharacter(),?playCard.get(0).getRealNum(),?playCard.get(0) .getRealColor(),?playCard.get(0).getNum())); p2HandCard.add(new?PlayCard(playCard.get(1).getColor(),?playCard.get(1) .getCharacter(),?playCard.get(1).getRealNum(),?playCard.get(1) .getRealColor(),?playCard.get(1).getNum())); p1HandCard.add(new?PlayCard(playCard.get(2).getColor(),?playCard.get(2) .getCharacter(),?playCard.get(2).getRealNum(),?playCard.get(2) .getRealColor(),?playCard.get(2).getNum())); p2HandCard.add(new?PlayCard(playCard.get(3).getColor(),?playCard.get(3) .getCharacter(),?playCard.get(3).getRealNum(),?playCard.get(3) .getRealColor(),?playCard.get(3).getNum())); p1.setHandCard(p1HandCard); p2.setHandCard(p2HandCard); } } package?com.marvin.java3_7_1; /** ?*?根據撲克牌面實際大小找出撲克集合的最大值 ?*? ?*?@author?Prague ?* ?*/ public?class?FindMaxPlayCard?{ public?static?int?findMaxPlayCard(PlayCard?pc1,?PlayCard?pc2)?{ if?(pc1.getRealNum()?>?pc2.getRealNum())?{ return?0; }?else?if?(pc1.getRealNum()?<?pc2.getRealNum())?{ return?1; }?else?if?(pc1.getRealNum()?==?pc2.getRealNum())?{ if?(pc1.getRealColor()?>?pc2.getRealColor())?{ return?0; }?else?if?(pc1.getRealColor()?<?pc2.getRealColor())?{ return?1; }? // else?if?(pc1.getRealColor()?==?pc2.getRealColor())?{ // return?-1;//?牌面包括花色和數字都相等 // } } return?-1; } } package?com.marvin.java3_7_1; import?java.util.ArrayList; import?java.util.List; /** ?*?洗牌發牌Easy版?功能描述:?1、創建一副撲克牌?包括四種花色:黑桃、紅桃、梅花、方片?十三種點數:2-10,J、Q、K、A,不考慮大小王 ?*?2、創建兩名玩家?玩家至少要有ID、姓名、手牌等屬性,手牌為撲克牌的集合?3、洗牌?將之前創建的“一副撲克牌”打亂順序?4、發牌 ?*?將洗牌之后的撲克牌集合,從第一張開始,發給兩名玩家,按照一人一張的方式,每人發兩張。 ?*?5、游戲比較兩名玩家手中的撲克牌,規則為:取兩人各自手中點數最大的牌進行比較 ?*?,點數大的贏;若兩人各自的點數最大的牌相等,則再按花色進行比較,按照黑桃>紅桃>梅花>方片的順序進行比較。 ?*? ?*?@author?Prague ?* ?*/ public?class?PlayCardGame?{ List<PlayCard>?listPlayCard?=?new?ArrayList<PlayCard>(); List<Player>?listPlayer?=?new?ArrayList<Player>(); public?static?void?main(String[]?args)?{ PlayCardGame?pcg?=?new?PlayCardGame(); CreatePlayCard?cpc?=?new?CreatePlayCard(); System.out.println("---------------創建一副撲克牌--------------------"); cpc.createPlayCard();?//?創建一副撲克并輸出創建結果 pcg.listPlayCard?=?cpc.getListPlayCard(); //?if?(pcg.listPlayCard?!=?null)?{ //?for?(PlayCard?pc?:?pcg.listPlayCard)?{ //?System.out.println(pc.getColor()?+?"??"?+?pc.getCharacter() //?+?"??"?+?pc.getRealNum()?+?"??"?+?pc.getNum()); //?} //?} CreatePlayer?cp?=?new?CreatePlayer(); cp.createPlayer();?//?創建兩名玩家 pcg.listPlayer?=?cp.getListPlayer(); if?(pcg.listPlayer?!=?null)?{ for?(Player?p?:?pcg.listPlayer)?{ System.out.println(p.getId()?+?"??"?+?p.getName()); } } System.out.println("--------------洗牌后--------------------"); Shuffle?sh?=?new?Shuffle(); sh.shuffle(pcg.listPlayCard); List<PlayCard>?lp?=?new?ArrayList<PlayCard>(); lp?=?sh.getShufflePlayCard(); //?if?(lp?!=?null)?{ //?for?(PlayCard?playCard?:?lp)?{ //?System.out.println(playCard.getColor()?+?"??" //?+?playCard.getCharacter()?+?"??" //?+?playCard.getRealNum()?+?"??"?+?playCard.getNum()); //?} //?} System.out.println("---------------玩家的手牌--------------------"); DistributePlayCard?dpc?=?new?DistributePlayCard(); dpc.distribute(pcg.listPlayer.get(0),?pcg.listPlayer.get(1),?lp); System.out.println("玩家1第一張手牌:" +?pcg.listPlayer.get(0).getHandCard().get(0).getColor()?+?"??" +?pcg.listPlayer.get(0).getHandCard().get(0).getCharacter()); System.out.println("玩家1第二張手牌:" +?pcg.listPlayer.get(0).getHandCard().get(1).getColor()?+?"??" +?pcg.listPlayer.get(0).getHandCard().get(1).getCharacter()); System.out.println("玩家2第一張手牌:" +?pcg.listPlayer.get(1).getHandCard().get(0).getColor()?+?"??" +?pcg.listPlayer.get(1).getHandCard().get(0).getCharacter()); System.out.println("玩家2第二張手牌:" +?pcg.listPlayer.get(1).getHandCard().get(1).getColor()?+?"??" +?pcg.listPlayer.get(1).getHandCard().get(1).getCharacter()); //?找出每個玩家中最大的手牌 PlayCard?player1Max?=?new?PlayCard(null,?null,?0,?0,?0); PlayCard?player2Max?=?new?PlayCard(null,?null,?0,?0,?0); if?(FindMaxPlayCard.findMaxPlayCard(pcg.listPlayer.get(0).getHandCard() .get(0),?pcg.listPlayer.get(0).getHandCard().get(1))?==?0)?{ player1Max?=?pcg.listPlayer.get(0).getHandCard().get(0); }?else?if?(FindMaxPlayCard.findMaxPlayCard(pcg.listPlayer.get(0) .getHandCard().get(0), pcg.listPlayer.get(0).getHandCard().get(1))?==?1)?{ player1Max?=?pcg.listPlayer.get(0).getHandCard().get(1); } if?(FindMaxPlayCard.findMaxPlayCard(pcg.listPlayer.get(1).getHandCard() .get(0),?pcg.listPlayer.get(1).getHandCard().get(1))?==?0)?{ player2Max?=?pcg.listPlayer.get(1).getHandCard().get(0); }?else?if?(FindMaxPlayCard.findMaxPlayCard(pcg.listPlayer.get(1) .getHandCard().get(0), pcg.listPlayer.get(1).getHandCard().get(1))?==?1)?{ player2Max?=?pcg.listPlayer.get(1).getHandCard().get(1); } //?判斷誰的手牌中的最大的那張牌比較大 if?(FindMaxPlayCard.findMaxPlayCard(player1Max,?player2Max)?==?0)?{ System.out.println("玩家1獲勝!"); System.out .println("玩家1的手牌是:" +?pcg.listPlayer.get(0).getHandCard().get(0) .getColor() +?"??" +?pcg.listPlayer.get(0).getHandCard().get(0) .getCharacter() +?"?和?" +?pcg.listPlayer.get(0).getHandCard().get(1) .getColor() +?"??" +?pcg.listPlayer.get(0).getHandCard().get(1) .getCharacter()); }?else?if?(FindMaxPlayCard.findMaxPlayCard(player1Max,?player2Max)?==?1)?{ System.out.println("玩家2獲勝!"); System.out .println("玩家2的手牌是:" +?pcg.listPlayer.get(1).getHandCard().get(0) .getColor() +?"??" +?pcg.listPlayer.get(1).getHandCard().get(0) .getCharacter() +?"?和?" +?pcg.listPlayer.get(1).getHandCard().get(1) .getColor() +?"??" +?pcg.listPlayer.get(1).getHandCard().get(1) .getCharacter()); }?else?if?(FindMaxPlayCard.findMaxPlayCard(player1Max,?player2Max)?==?-1)?{ System.out.println("平局!"); System.out .println("玩家的手牌是:" +?pcg.listPlayer.get(1).getHandCard().get(0) .getColor() +?"??" +?pcg.listPlayer.get(1).getHandCard().get(0) .getCharacter() +?"?和?" +?pcg.listPlayer.get(1).getHandCard().get(1) .getColor() +?"??" +?pcg.listPlayer.get(1).getHandCard().get(1) .getCharacter()); } } }
漫長玩笑
舉報
Java中你必須懂得常用技能,不容錯過的精彩,快來加入吧
3 回答撲克牌代碼
8 回答我的撲克牌代碼
1 回答撲克牌的代碼
2 回答撲克牌游戲
4 回答打撲克牌中!
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網安備11010802030151號
購課補貼聯系客服咨詢優惠詳情
慕課網APP您的移動學習伙伴
掃描二維碼關注慕課網微信公眾號
2015-09-18