Java-集合实操案例(SendPoker)

Java-集合实操案例(SendPoker)

PokerGame Class

package cn.collectionTest.output;

import java.util.*;

/**
 * @author Jensen
 * {@data 2022/11/17}
 */
public class PokerGame {
    /**
     * 定义一个(Map)双列集合 ,键: 编号  值: 具体的牌  规则: 编号越小牌越小;
     */
    public Map<Integer, String> pokers = new HashMap<>();
    /**
     * 定义一个单列集合,存储牌数编号
     */
    public List<Integer> randomList = new ArrayList<>();

    /**
     * 定义玩家以及底牌单列集合;
     */
    public List<Integer> user1 = new ArrayList<>();
    public List<Integer> user2 = new ArrayList<>();
    public List<Integer> user3 = new ArrayList<>();
    public List<Integer> last = new ArrayList<>();

    //买牌操作定义牌元素以及编号操作
    public String[] attributes = {"♠️","♥️","♦️","♣️"};
    public String[] cards = {"3","4","5","6","7","8","9","10","J","Q","K","A","2",};
    public int count = 0;
    public void buyPoker() {
        for (String card : cards) {
            for (String attr : attributes) {
                /**
                 * 通过concat()函数进行包含牌的四种颜色
                 */
                pokers.put(count,card.concat(attr));
                randomList.add(count);
                count++;
            }
        }

        /**
         * 添加大王和小王
         */
        pokers.put(count,"小王🃏");
        randomList.add(count++);
        pokers.put(count,"大王🃏");
        randomList.add(count);
    }

    /**
     * 发牌操作
     */
    public void printPokerSys(){
        //双列集合存储
        Collections.shuffle(randomList);
        /**
         * 发牌操作
         */
        for (int i = 0; i < randomList.size(); i++) {
            /**
            * 循环随机后的编号;
            * 底牌要先提前拿出来
            * 如果每次循环 randomList 中的编号 大于 单列集合中总长度;
            * 默认: randomList.size() size = 54;
            * 3 >= 54 - 3 其实做对比的时候就是 3 >= 51 的话就 last.add() 添加底牌;
            */
            if (i >= randomList.size() -3){
                last.add(randomList.get(i));
            }else if (i % 3 == 0){
                user1.add(randomList.get(i));
            }else if (i % 3 == 1) {
                user2.add(randomList.get(i));
            }else if (i % 3 == 2) {
                user3.add(randomList.get(i));
            }
        }
        System.out.println("张三的牌: "+showPokers(user1, pokers));
        System.out.println(" ");
        System.out.println("李四的牌: "+showPokers(user2, pokers));
        System.out.println(" ");
        System.out.println("老子的牌: "+showPokers(user3, pokers));
        System.out.println(" ");
        System.out.println("底牌: "+showPokers(last,pokers));
    }

    /**
     * 看牌操作
     * 通过单列集合设置的编号,拿到map中对应的牌
     * List<Integer> nums
     * Map<Integer/String> pokers
     */
    public String showPokers(List<Integer> nums , Map<Integer,String> pokers ) {
        Collections.sort(nums);
        /**
         * 通过反序的形式展现
         */
        Collections.reverse(nums);
        StringBuilder sb = new StringBuilder();
        for (Integer num : nums) {
            String card = pokers.get(num);
            sb.append(card+" ");
        }
        String str = sb.toString();
        return str.trim();
    }

    /**
     * 调试方法
     */
    public void test(){
        int nums = 13;
        List<Integer> dipai = new ArrayList<Integer>();
        List<Integer> user1 = new ArrayList<Integer>();
        List<Integer> user2 = new ArrayList<Integer>();
        List<Integer> user3 = new ArrayList<Integer>();
        for (int i = 0; i < nums; i++) {
            System.out.println(i);
            if (i >= nums -3){
                dipai.add(i);
            }else if (i % 3 == 0){
                user1.add(i);
            }
        }
        System.out.println(dipai);

    }

    /**
     * 程序预入口
     */
    public static void controlMain(){
        PokerGame start = new PokerGame();
        //start.test();
        start.buyPoker();
        start.printPokerSys();
    }

    public static void main(String[] args) {
        controlMain();
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值