- import java.util.HashMap;
- import java.util.ArrayList;
- import java.util.Collections;
- import java.util.TreeSet;
- /*
- * 需求:模拟斗地主游戏
- *
- * 思路:
- * 用 HashMap 来存储牌:定义一个对应的索引,以键为索引,值为牌的对应关系存入 hashMap 集合
- * 用 ArrayList 来存储索引,看牌的时候,通过索引来拿对应的牌。同时,发牌为了保证牌的顺序,所以用 TreeSet 来接收牌。
- */
- public class PokerDemo {
- public static void main(String[] args) {
- // 分析:
- // 1、创建一副牌(集合)
- // 创建 HashMap 集合,用于存储索引和牌
- HashMap<Integer, String> hm = new HashMap<Integer, String>();
- // 创建 ArrayList 存储索引
- ArrayList<Integer> array = new ArrayList<Integer>();
- // 创建牌的花色数组
- String[] colors = { "♠", "♦", "♥", "♣" };
- // 创建牌的数字数组
- String[] numbers = { "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q",
- "K", "A", "2" };
- // 定义一个索引
- int index = 0;
- // 把牌的颜色和数字组合在一块儿
- // 通过双重 for 循环,得到每一个牌的颜色和数字
- for (String number : numbers) {
- for (String color : colors) {
- // 获取到每一张牌
- String poker = color.concat(number);
- // 把牌和索引添加进 HashMap 集合
- hm.put(index, poker);
- // 把索引添加进 ArrayList 集合
- array.add(index);
- // 索引自增
- index++;
- }
- }
- // 创建大小王
- hm.put(index, "小王");
- array.add(index);
- index++;
- hm.put(index, "大王");
- array.add(index);
- // 2、洗牌
- // 调用 Collections 的 shuffle 方法:随机置换功能
- Collections.shuffle(array);
- // 3、发牌
- // 创建玩家和底牌 TreeMap 集合
- TreeSet<Integer> wanPing = new TreeSet<Integer>();
- TreeSet<Integer> maoXuePing = new TreeSet<Integer>();
- TreeSet<Integer> yangXiao = new TreeSet<Integer>();
- TreeSet<Integer> diPai = new TreeSet<Integer>();
- // 用取模的方式,进行发牌
- for (int x = 0; x < array.size(); x++) {
- // 剩余的3张底牌
- if (x >= array.size() - 3) {
- diPai.add(array.get(x));
- } else if (x % 3 == 1) {
- wanPing.add(array.get(x));
- } else if (x % 3 == 2) {
- maoXuePing.add(array.get(x));
- } else if (x % 3 == 0) {
- yangXiao.add(array.get(x));
- }
- }
- // 4、看牌
- // 调用看牌功能即可
- lookPoker("万平", wanPing, hm);
- lookPoker("毛雪平", maoXuePing, hm);
- lookPoker("杨晓", yangXiao, hm);
- lookPoker("底牌", diPai, hm);
- }
- // 由于有三个人看牌,所以定义看牌功能
- public static void lookPoker(String name, TreeSet<Integer> ts,
- HashMap<Integer, String> hm) {
- System.out.println(name + "的牌是:");
- // 遍历 TreeSet 集合,获得索引
- for (Integer key : ts) {
- // 通过索引获取值
- String value = hm.get(key);
- System.out.print(value + " ");
- }
- System.out.println();
- }
- }
复制代码
|
|