【Java基础进阶笔记】- Day04 - 第四章 模拟斗地主升级之排序

Java基础进阶笔记 - Day04 - 第四章 模拟斗地主升级之排序

系统:Win10
JDK:1.8.0_121
IDE:IntelliJ IDEA 2017.3.7

4.1 案例介绍

按照斗地主的规则,完成洗牌发牌的动作
具体规则:

  1. 组装54张扑克牌
  2. 将54张牌顺序打乱
  3. 给三位玩家轮流发牌,每人17张,最后三张作为底牌
  4. 将大家的牌按大小顺序排好
  5. 看牌

规则:手中扑克牌需要从大到小的摆放顺序:大王,小王,2,A,K,Q,J,10,9,8,7,6,5,4,3

4.2 案例需求分析

  1. 准备牌
    用Map集合存储牌,key存储牌的序号,value存储牌,按牌从大到小存储进去。同时使用一个List集合来存储牌的序号,用于打乱牌的序号和取牌
  2. 洗牌
    将存储牌序号的List集合内的顺序打乱
  3. 发牌
    将三个玩家的牌的序号存储到List集合中,最后三张牌的序号也存储到list集合中
  4. 排序
    将玩家和底牌的牌顺序排一下序
  5. 看牌
    通过玩家和底牌的排序号,找到对应的牌,打印出来即可

4.3 代码实现

public class DouDiZhu {
    
    
    public static void main(String[] args) {
    
    
        // 1.准备牌
        HashMap<Integer, String> poker = new HashMap<>(); // 用于存储牌的序号和牌
        List<Integer> pokerIndex = new ArrayList<>(); // 用于存储牌的序号
        List<String> colors = getColors(); // 获取花色
        List<String> numbers = getNumbers(); // 获取牌号
        int index = 0;
        // 添加大王
        poker.put(index, "大王");
        pokerIndex.add(index);
        index++;
        // 添加小王
        poker.put(index, "小王");
        pokerIndex.add(index);
        index++;
        // 按牌从大到小添加进poker
        for (String number : numbers) {
    
    
            for (String color : colors) {
    
    
                poker.put(index, color + number);
                pokerIndex.add(index);
                index++;
            }
        }
        // System.out.println(poker);
        // 2.洗牌
        Collections.shuffle(pokerIndex);
        // System.out.println(pokerIndex);
        // 3.发牌
        List<Integer> player01 = new ArrayList<>();
        List<Integer> player02 = new ArrayList<>();
        List<Integer> player03 = new ArrayList<>();
        List<Integer> diPai = new ArrayList<>();
        for (int i = 0; i < pokerIndex.size(); i++) {
    
    
            Integer pokerNum = pokerIndex.get(i);
            if (i >= 51) {
    
    
                diPai.add(pokerNum);
            } else if (i % 3 == 0) {
    
    
                player01.add(pokerNum);
            } else if (i % 3 == 1) {
    
    
                player02.add(pokerNum);
            } else if (i % 3 == 2) {
    
    
                player03.add(pokerNum);
            }
        }
        // 4.排序
        Collections.sort(player01);
        Collections.sort(player02);
        Collections.sort(player03);
        Collections.sort(diPai);
        // 5.看牌
        lookPoker("周润发", player01, poker);
        lookPoker("刘德华", player02, poker);
        lookPoker("周星驰", player03, poker);
        lookPoker("底  牌", diPai, poker);
    }

    // 看牌的实现方法
    private static void lookPoker(String name, List<Integer> list, HashMap<Integer, String> poker) {
    
    
        System.out.print(name + ":");
        for (Integer key : list) {
    
    
            String value = poker.get(key);
            System.out.print(value + " ");
        }
        System.out.println(""); // 打印完每个玩家的牌,转到下一行
    }

    // 获取存储牌号的List
    private static List<String> getNumbers() {
    
    
        List<String> list = new ArrayList<>();
        list.add("2");
        list.add("A");
        list.add("K");
        list.add("Q");
        list.add("J");
        list.add("10");
        list.add("9");
        list.add("8");
        list.add("7");
        list.add("6");
        list.add("5");
        list.add("4");
        list.add("3");
        return list;
    }

    // 获取存储花色的List
    private static List<String> getColors() {
    
    
        List<String> list = new ArrayList<>();
        list.add("♠");
        list.add("♥");
        list.add("♣");
        list.add("♦");
        return list;
    }
}

运行结果:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_35132089/article/details/113356747