zoukankan      html  css  js  c++  java
  • 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();
        }
  • 相关阅读:
    Hive-基本操作
    Hive-安装
    Hive-概述
    游荡二十几天的感想
    js html css
    C#笔试总结
    ubuntu16.04 下 C# mono开发环境搭建
    scoket、TCP、UDP、WebService选型
    虚拟机安装Windows系统,再安装orcale
    Rosetta Stone 不在C盘安装步骤
  • 原文地址:https://www.cnblogs.com/g414056667/p/14695751.html
Copyright © 2011-2022 走看看