Map双列集合实现模拟斗地主洗牌发牌

具体规则:

​ 1. 组装54张扑克牌

​ 2.将54张牌顺序打乱

​ 3. 三个玩家参与游戏,三人交替摸牌,每人17张牌,最后三张留作底牌。

​ 4. 查看三人各自手中的牌(按照牌的大小排序)、底牌

手中扑克牌从大到小的摆放顺序:大☺,小☺,2,A,K,Q,J,10,9,8,7,6,5,4,3
在这里插入图片描述

package com.web;

import java.util.*;

public class Test48 {
    
    
    public static void main(String[] args) {
    
    
        HashMap<Integer, String> poker = new HashMap<>();
        ArrayList<Integer> pokerId = new ArrayList<>();
        for (int i = 0; i <= 53; i++) {
    
    
            pokerId.add(i);
        }//pokerId = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11....., 47, 48, 49, 50, 51, 52, 53]
        //System.out.println("pokerId = " + pokerId);
        ArrayList<String> pokerColor = new ArrayList<>();
        Collections.addAll(pokerColor, "クラブ", "ダイヤ", "スペード", "ハート");//クラブ♣,ダイヤ♦,スペード♠,ハート♥
        ArrayList<String> pokerNumber = new ArrayList<>();
        Collections.addAll(pokerNumber, "J", "Q", "K", "A");
       /* for (int i = 10; i >= 2; i--) {
            pokerNumber.add(String.valueOf(i));//pokerNumber = [A, K, Q, J, 10, 9, 8, 7, 6, 5, 4, 3, 2]
        }*/
        for (int i = 2; i <= 10; i++) {
    
    
            pokerNumber.add(i + "");//pokerNumber = [A, K, Q, J, 2, 3, 4, 5, 6, 7, 8, 9, 10]
        }
        poker.put(0, "Big King");
        poker.put(1, "Small King");
/*
       for (String number : pokerNumber) {
            for (String color : pokerColor) {
                System.out.println(color+number);
            }
        }*/
        //创建扑克牌
        int index = 2;
        for (String color : pokerColor) {
    
    
            for (String number : pokerNumber) {
    
    
                poker.put(index, color + number);
                index++;
            }
        }
        /*
         * 通过Map的对象调用keySet函数获得Map中的key值并保存到Set集合
         * 所有的key键都保存到以下的set集合中了
         */
        Set<Integer> keys = poker.keySet();
        //使用迭代器迭代Set集合
        for (Iterator<Integer> it = keys.iterator(); it.hasNext(); ) {
    
    
            //分别取出每个key值
            Integer key = it.next();
            //使用Map的对象调用get函数根据key获得value
            String value = poker.get(key);
            //输出key和value
            //System.out.println(key + "-" + value);
        }
        System.out.println("PokerSize = " + poker.size());//mapSize
        System.out.println("PokerIdSize = " + pokerId.size());//ArrayListSize
        // 洗牌 其实就是在打乱保存编号的集合顺序
        Collections.shuffle(pokerId);//pokerId = [27, 19, 16, 43, 46, 36, 29, 3, 22, 31, 35, 7, 18, 42, 47, 33, 26, 12, 53, 9, 14, 8, 45, 25, 4....]
        //创建3个玩家,剩余底牌分到到的牌Id的集合
        ArrayList<Integer> player1 = new ArrayList<>();
        ArrayList<Integer> player2 = new ArrayList<>();
        ArrayList<Integer> player3 = new ArrayList<>();
        ArrayList<Integer> restPoker = new ArrayList<>();
        for (int i = 0; i < pokerId.size(); i++) {
    
    
            if (i >= pokerId.size() - 3) {
    
    
                restPoker.add(pokerId.get(i));
            } else {
    
    
                if (i % 3 == 0) {
    
    
                    player1.add(pokerId.get(i));
                } else if (i % 3 == 1) {
    
    
                    player2.add(pokerId.get(i));
                } else if (i % 3 == 2) {
    
    
                    player3.add(pokerId.get(i));//pokerId.get(i)=i 这么写不行,发牌的顺序就被写死了,此i非彼i
                }
            }
        }
        System.out.println(player1);//[52, 9, 1, 37, 28, 30, 10, 25, 53, 16, 6, 43, 11, 48, 39, 34, 47]
        System.out.println(player2);//[18, 41, 22, 36, 45, 21, 26, 8, 19, 50, 12, 31, 5, 7, 27, 29, 44]
        System.out.println(player3);//[17, 32, 20, 49, 14, 35, 23, 13, 0, 3, 15, 38, 42, 24, 51, 4, 2]
        System.out.println(restPoker);//[51, 52, 53]

        watchPoker(poker, player1, "player1");
        watchPoker(poker, player2, "player2");
        watchPoker(poker, player3, "player3");
        watchPoker(poker, restPoker, "restPoker");

    }

    private static void watchPoker(HashMap<Integer, String> poker, ArrayList<Integer> player, String name) {
    
    
        StringBuilder sb = new StringBuilder(name).append(": ");//还能这么写呢
        for (Integer key : player) {
    
    
            String value = poker.get(key);
            sb.append(value + " ");
        }
        System.out.println(sb);
    }
}

おすすめ

転載: blog.csdn.net/djydjy3333/article/details/121529937