我们先分析一下业务需求- 总共有54张牌每一张牌有花色和点数两个属性、为了排序还可以再加一个序号- 点数可以是3,4,5,6,7,8,9,10,J,Q,K,A,2- 花色可以是♣,♠,♥,♦- 斗地主时三个玩家没人手里17张牌剩余3张牌作为底牌第一步为了表示每一张牌有哪些属性首先应该新建一个扑克牌的类第二步启动游戏时就应该提前准备好54张牌第三步接着再完全洗牌、发牌、对牌排序、看牌的业务逻辑先来完成第一步定义一个扑克类Cardpublic class Card { private String number; private String color; // 每张牌是存在大小的。 private int size; // 0 1 2 .... public Card() { } public Card(String number, String color, int size) { this.number number; this.color color; this.size size; } public String getNumber() { return number; } public void setNumber(String number) { this.number number; } public String getColor() { return color; } public void setColor(String color) { this.color color; } public int getSize() { return size; } public void setSize(int size) { this.size size; } Override public String toString() { return color number ; } }再完成第二步定义一个房间类初始化房间时准备好54张牌public class Room { // 必须有一副牌。 private ListCard allCards new ArrayList(); public Room(){ // 做出54张牌存入到集合allCards // a、点数个数确定了类型确定。 String[] numbers {3,4,5,6,7,8,9,10,J,Q,K,A,2}; // b、花色个数确定了类型确定。 String[] colors {♠, ♥, ♣, ♦}; int size 0; // 表示每张牌的大小 // c、遍历点数再遍历花色组织牌 for (String number : numbers) { // number 3 size; // 1 2 .... for (String color : colors) { // 得到一张牌 Card c new Card(number, color, size); allCards.add(c); // 存入了牌 } } // 单独存入小大王的。 Card c1 new Card(, , size); Card c2 new Card(, , size); Collections.addAll(allCards, c1, c2); System.out.println(新牌 allCards); } }最后完成第三步定义一个启动游戏的方法完成洗牌、发牌、捋牌、看牌的业务逻辑/** * 启动游戏 */ public void start() { // 1、洗牌 allCards Collections.shuffle(allCards); System.out.println(洗牌后 allCards); // 2、发牌首先肯定要定义 三个玩家。 List(ArrayList) Set(TreeSet) ListCard linHuChong new ArrayList(); ListCard jiuMoZhi new ArrayList(); ListCard renYingYing new ArrayList(); // 正式发牌给这三个玩家依次发出51张牌剩余3张做为底牌。 // allCards [♥3, ♣10, ♣4, ♥K, ♦Q, ♣2, , ♣8, .... // 0 1 2 3 4 5 6 ... % 3 for (int i 0; i allCards.size() - 3; i) { Card c allCards.get(i); // 判断牌发给谁 if(i % 3 0){ // 请啊冲接牌 linHuChong.add(c); }else if(i % 3 1){ // 请啊鸠来接牌 jiuMoZhi.add(c); }else if(i % 3 2){ // 请盈盈接牌 renYingYing.add(c); } } // 3、对3个玩家的牌进行排序 sortCards(linHuChong); sortCards(jiuMoZhi); sortCards(renYingYing); // 4、看牌 System.out.println(啊冲 linHuChong); System.out.println(啊鸠 jiuMoZhi); System.out.println(盈盈 renYingYing); /** * 5、获取底牌 51 52 53 * public ListE subList(int fromIndex, int toIndex){...} * 作用返回包含从索引 fromIndex包括到索引 toIndex不包括元素的List集合。 */ ListCard lastThreeCards allCards.subList(allCards.size() - 3, allCards.size()); System.out.println(底牌 lastThreeCards); // 比如啊鸠是地主 需要获取到底牌 jiuMoZhi.addAll(lastThreeCards); // 获取到底牌后再次进行排序 sortCards(jiuMoZhi); System.out.println(啊鸠抢到地主后 jiuMoZhi); } /** * 集中排序 * param cards */ private void sortCards(ListCard cards) { Collections.sort(cards, new ComparatorCard() { Override public int compare(Card o1, Card o2) { return o1.getSize() - o2.getSize(); // 升序排序 // return o2.getSize() - o1.getSize(); // 降序排序 } }); }测试类:/** * 我们先分析一下业务需求 * * - 总共有54张牌每一张牌有花色和点数两个属性、为了排序还可以再加一个序号 * - 点数可以是3,4,5,6,7,8,9,10,J,Q,K,A,2 * - 花色可以是♣,♠,♥,♦ * - 斗地主时三个玩家每人手里17张牌剩余3张牌作为底牌 */ public class GameDemo { public static void main(String[] args) { // 1、牌类 // 2、房间 Room m new Room(); // 3、启动游戏 m.start(); } }