集合实现模拟斗地主

这个博客介绍了如何升级一个扑克牌游戏的代码实现,通过使用HashMap存储牌和其对应的编号,以及用TreeSet进行有序发牌。在洗牌和发牌的过程中,代码变得更加高效和有序,保持了牌的原始顺序。升级后的版本增加了代码的可读性和实用性。
摘要由CSDN通过智能技术生成
package myPokerDemo;

import java.util.ArrayList;
import java.util.Collections;

public class PokerDemo {
    public static void main(String[] args) {
        //创建牌盒
        ArrayList<String> cardBox = new ArrayList<String>();

        //往牌盒里装牌
        /*
            ♦2,♦3,♦4,...,♦K,♦A
            ♣2,...
            ♥2,...
            ♠2,...
            小王,大王
         */
        //定义花色数组
        String[] colors = {"♦", "♣", "♥", "♠"};
        //定义点数数组
        String[] numbers = {"2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "k", "A"};
        for (String color : colors) {
            for (String number : numbers) {
                cardBox.add(color + number);
            }
        }
        cardBox.add("小王");
        cardBox.add("大王");

        //洗牌
        Collections.shuffle(cardBox);

//        System.out.println(array);

        //发牌
        ArrayList<String> Li = new ArrayList<String>();
        ArrayList<String> Chu = new ArrayList<String>();
        ArrayList<String> Yan = new ArrayList<String>();
        ArrayList<String> Bottom = new ArrayList<String>();

        for (int i = 0; i < cardBox.size(); i++) {
            String card = cardBox.get(i);

            if (i >= cardBox.size() - 3) {
                Bottom.add(card);
            }
            else if (i % 3 == 0) {
                Li.add(card);
            }
            else if (i % 3 == 1) {
                Chu.add(card);
            }
            else if (i % 3 == 2) {
                Yan.add(card);
            }
        }

        //看牌
        lookCard("李云龙", Li);
        lookCard("楚云飞", Chu);
        lookCard("阎锡山", Yan);
        lookCard("底牌", Bottom);
    }

    public static void lookCard(String name, ArrayList<String> array) {
        System.out.print(name + "的牌是:");
        for (String card : array) {
            System.out.print(card + " ");
        }
        System.out.println();
    }
}

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

升级版

package myPokerDemo;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.TreeSet;

public class UpgradePokerDemo {
    public static void main(String[] args) {
        //键是编号,值是牌
        HashMap<Integer, String> cardBox = new HashMap<Integer, String>();

        //存储编号
        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 (String number : numbers) {
            for (String color : colors) {
                cardBox.put(index, color + number);
                array.add(index++);
            }
        }
        cardBox.put(index, "小王");
        array.add(index++);
        cardBox.put(index, "大王");
        array.add(index);

        //洗牌(洗的是编号)
        Collections.shuffle(array);

        //发牌(发的也是编号,并且保证编号是有序的)
        TreeSet<Integer> Li = new TreeSet<Integer>();
        TreeSet<Integer> Chu = new TreeSet<Integer>();
        TreeSet<Integer> Yan = new TreeSet<Integer>();
        TreeSet<Integer> Bottom = new TreeSet<Integer>();

        for (int i = 0; i < array.size(); i++) {
            Integer card = array.get(i);

            if (i >= array.size() - 3) {
                Bottom.add(card);
            }
            else if (i % 3 == 0) {
                Li.add(card);
            }
            else if (i % 3 == 1) {
                Chu.add(card);
            }
            else if (i % 3 == 2) {
                Yan.add(card);
            }
        }
        lookCard("李云龙", Li, cardBox);
        lookCard("楚云飞", Chu, cardBox);
        lookCard("阎锡山", Yan, cardBox);
        lookCard("底牌", Bottom, cardBox);
    }

    public static void lookCard(String name, TreeSet<Integer> treeSet, HashMap<Integer, String> hm) {
        System.out.print(name + "的牌是:");
        for (Integer key : treeSet) {
            System.out.print(hm.get(key) + " ");
        }
        System.out.println();
    }
}

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值