List&TreeSet实现斗地主发牌及牌序

方式一

第一种方式没有实现牌的常规排序。

思路见代码

 1  public static void main(String[] args) {
 2         //创建一个牌盒子
 3         List<String> list = new ArrayList<>();
 4         String[] hs = {"♥", "♣", "♦", "♠"};
 5         String[] z = {"2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A"};
 6         String[] w = {"大王", "小王"};
 7         for (int i = 0; i < hs.length; i++) {
 8             for (int j = 0; j < z.length; j++) {
 9                 list.add(hs[i] + z[j]);
10             }
11         }
12         for (int i = 0; i < w.length; i++) {
13             list.add(w[i]);
14         }
15         //System.out.println(list);
16 
17         //模拟洗牌的过程
18         Collections.shuffle(list);
19 //        System.out.println(list);
20         List<String> G = new ArrayList<>();
21         List<String> C = new ArrayList<>();
22         List<String> T = new ArrayList<>();
23         List<String> DP = new ArrayList<>();
24         //模拟发牌
25         for (int i = 0; i < list.size(); i++) {
26             if (i < 3) {
27                 DP.add(list.get(i));
28             } else if (i % 3 == 0) {
29                 G.add(list.get(i));
30             } else if (i % 3 == 1) {
31                 C.add(list.get(i));
32             } else if (i % 3 == 2) {
33                 T.add(list.get(i));
34             }
35         }
36 
37         //看牌
38         System.out.println(LookPoker(G, "高帅"));
39         System.out.println(LookPoker(C, "蔡鹏瑞"));
40         System.out.println(LookPoker(T, "田永平"));
41         System.out.println(LookPoker(DP, "底牌"));
42 
43     }
44 
45     public static String LookPoker(List<String> list, String name) {
46         System.out.print(name + "的牌是:");
47         StringBuilder s = new StringBuilder();
48         s.append("[");
49         for (int i = 0; i < list.size(); i++) {
50             if (i != list.size() - 1) {
51                 s.append(list.get(i)).append(", ");
52             } else {
53                 s.append(list.get(i)).append("]");
54             }
55         }
56 
57         return s.toString();
58     }

方式二(实现排序)

思路:

1. 用hashMap存储(Interger,String)存储的是,牌号(0-53)表示,value是对应的真实牌

2. 用一个list存储牌号(0-53),模拟洗牌的时候实质是洗牌号。

3. 发牌,每个人的牌用一个TreeSet存储,会实现自动排序

代码

 public static void main(String[] args) {
        //存放一副完整的扑克牌
        Map<Integer, String> map = new HashMap<>();
        //存放map中的索引,洗牌的时候实质是在洗索引,方便之后用TreeSet排序。
        List<Integer> list = new ArrayList<>();
        String[] colors = {"♣", "♠", "♦", "♥"};
        String[] number = {"3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2"};

        Integer k = 0;
        for (int i = 0; i < number.length; i++) {
            for (int j = 0; j < colors.length; j++) {
                map.put(k, colors[j] + number[i]);
                list.add(k);
                k++;
            }
        }
        map.put(k, "小王");
        list.add(k);
        list.add(k + 1);
        map.put(k + 1, "大王");

        //System.out.println(map);
        //模拟洗牌过程
        Collections.shuffle(list);

        TreeSet<Integer> G = new TreeSet<>();
        TreeSet<Integer> T = new TreeSet<>();
        TreeSet<Integer> C = new TreeSet<>();
        TreeSet<Integer> DP = new TreeSet<>();
        for (int i = 0; i < list.size(); i++) {
            if (i > list.size() - 4) {
                DP.add(list.get(i));
            } else if (i % 3 == 0) {
                G.add(list.get(i));
            } else if (i % 3 == 1) {
                T.add(list.get(i));
            } else if (i % 3 == 2) {
                C.add(list.get(i));
            }
        }
        LookPoker(G, "高帅", map);
        LookPoker(T, "田永平", map);
        LookPoker(C, "蔡鹏瑞", map);
        LookPoker(DP, "底牌", map);
    }

    public static void LookPoker(TreeSet<Integer> TreeSet, String name, Map<Integer, String> map) {
        System.out.print(name + "的牌是:");
        for (Integer integer : TreeSet) {
            System.out.print(map.get(integer) + "  ");
        }
        System.out.println();
    }
原文地址:https://www.cnblogs.com/g414056667/p/14695751.html