扑克牌有源码吗
自己写的程序,能实现要求,有些啰嗦,欢迎大家指教!!! 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()); } } }