JAVA基础集合模拟斗地主

模拟斗地主部分功能未排序

直接把牌放在一个ArrayList<String>
通过Collections的shuffle洗牌

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;

/**
 * 模拟斗地主
 * 部分功能
 * 1、准备一幅牌(54张)
 * 2、洗牌(打乱牌序)
 * 3、发牌(三个人)
 * 4、留三张底牌
 * 5、每个人拿到牌后,对牌进行排序
 *
 * 未排序
 */
public class Poker {
    public static void main(String[] args) {

        // 1.创建54张牌
        List<String> poker = new ArrayList<>();

        String[] colors = {"黑桃", "红心", "梅花", "方块"};

        String[] nums = {"2", "3", "4","5","6","7","8","9","10","J","Q","K","A"};

        // 遍历添加生成的牌到poker集合
        for (String color : colors) {
            for (String num : nums) {
                //System.out.println(color+num);
                String pai = color + num;  // 一张牌
                poker.add(pai);
            }
        }

        // 添加大王小王
        poker.add("小王");
        poker.add("大王");

        // 打乱牌
        Collections.shuffle(poker);

        // 留底牌
        List<String> diPais = new ArrayList<>();
        // 随机找三张底牌
        Random random = new Random();
        for (int i = 0; i < 3; i++) {
            // 生成底牌索引
            int diPaiIndex = random.nextInt(poker.size());
            // 通过索引删除某一张牌,remove方法会返回删除那个索引的字符串
            String diPai = poker.remove(diPaiIndex);
            // 将返回的字符串添加到底牌集合
            diPais.add(diPai);
        }
        // 看底牌
        System.out.println("底牌:" + diPais);

        // 发牌
        // 创建三个人,每个人是一个集合,用来将装牌
        List<String> gaoJing = new ArrayList<>();
        List<String> longWu = new ArrayList<>();
        List<String> kyrieCao = new ArrayList<>();

        // 遍历发牌
        for (int i = 0; i < poker.size(); i++) {
            int mod = i % 3;    // 0 1 2 0 1 2
            String pai = poker.get(i);
            if (mod == 0) {
                gaoJing.add(pai);
            } else if (mod == 1) {
                longWu.add(pai);
            } else if (mod == 2) {
                kyrieCao.add(pai);
            }
        }
        // 看牌
        System.out.println("高进:" + gaoJing);
        System.out.println("龙五:" + longWu);
        System.out.println("Cao:" + kyrieCao);
    }
}
// 打印结果
底牌:[梅花3, 方块7, 黑桃2]
高进:[梅花8, 大王, 方块K, 梅花4, 方块A, 黑桃4, 红心8, 黑桃8, 黑桃6, 小王, 红心K, 红心6, 方块3, 梅花A, 黑桃Q, 梅花Q, 黑桃K]
龙五:[梅花2, 红心2, 方块4, 方块2, 黑桃J, 红心Q, 黑桃7, 梅花K, 梅花10, 黑桃9, 方块Q, 梅花9, 红心9, 方块8, 红心10, 方块9, 黑桃3]
Cao:[方块6, 梅花7, 梅花J, 黑桃5, 黑桃A, 红心A, 方块5, 方块J, 红心7, 红心3, 方块10, 红心J, 红心4, 黑桃10, 红心5, 梅花6, 梅花5]

模拟斗地主部分功能排序

把牌放在HashMap<Integer, String>中,索引当作Key
把所有的Key存储ArrayList<Integer>中,方便洗索引
通过Collections的shuffle洗牌,洗ArrayList<Integer>

import java.util.*;

/**
 * 模拟斗地主
 * 部分功能
 * 1、准备一幅牌(54张)
 * 2、洗牌(打乱牌序)
 * 3、发牌(三个人)
 * 4、留三张底牌
 * 5、每个人拿到牌后,对牌进行排序
 *
 * 排序
 */
public class PokerSort {

    public static void main(String[] args) {

        // 创建poker的map集合
        Map<Integer,String> poker = new HashMap<>();

        String[] colors = {"黑桃", "红心", "梅花", "方块"};

        String[] nums = {"2", "3", "4","5","6","7","8","9","10","J","Q","K","A"};

        // 数字排序
        int index = 0;
        for (String num : nums) {
            for (String color : colors) {
                String pai = color + num;
                poker.put(index,pai);
                index ++;
            }
        }

        // 添加大王小王
        poker.put(index,"小王");
        index ++;
        poker.put(index,"大王");

        System.out.println("============遍历poker============");
        for (Map.Entry<Integer, String> entry :  poker.entrySet()) {
            Integer pokerIndex = entry.getKey();
            String pai = entry.getValue();
            System.out.println(pokerIndex + "..." + pai);
        }

        // 获取牌的索引
        Set<Integer> pokerKeys = poker.keySet();

        // 把set 转 list
        List<Integer> pokerIndexs = new ArrayList<>();
        for (Integer i : pokerKeys) {
            pokerIndexs.add(i);
        }

        // 把索引打乱
        Collections.shuffle(pokerIndexs);
        System.out.println("===========打乱牌索引==========");
        System.out.println("pokerIndexs: " + pokerIndexs);

        // 留底牌【前三张】
        Set<Integer> dipaiIdxs = new TreeSet<>();
        dipaiIdxs.add(pokerIndexs.remove(0));
        dipaiIdxs.add(pokerIndexs.remove(0));
        dipaiIdxs.add(pokerIndexs.remove(0));
        System.out.println("===========底牌索引===========");
        System.out.println("dipaiIdxs: " + dipaiIdxs);

        // 发牌
        Set<Integer> gaoJinInxs = new TreeSet<>();
        Set<Integer> longWuInxs = new TreeSet<>();
        Set<Integer> kyrieCaoInxs = new TreeSet<>();

        for (int i = 0; i < pokerIndexs.size(); i++) {
            // 取出扑克的索引
            int pokerIndex = pokerIndexs.get(i);
            int mod = i % 3;
            switch (mod) {
                case 0:
                    gaoJinInxs.add(pokerIndex);
                    break;
                case 1:
                    longWuInxs.add(pokerIndex);
                    break;
                case 2:
                    kyrieCaoInxs.add(pokerIndex);
                    break;
            }
        }

        // 打印扑克的索引
        System.out.println("高进: " + gaoJinInxs);
        System.out.println("龙五: " + longWuInxs);
        System.out.println("Cao: " + kyrieCaoInxs);

        // 看牌
        lookPoker("底牌", poker, dipaiIdxs);
        lookPoker("高进", poker, gaoJinInxs);
        lookPoker("龙五", poker, longWuInxs);
        lookPoker("Cao", poker, kyrieCaoInxs);
    }

    /**
     * 看牌
     * @param name              玩家姓名
     * @param poker             完整的扑克牌
     * @param playerPokerIndexs 玩家扑克牌的索引
     */
    public static void lookPoker(String name, Map<Integer,String> poker, Set<Integer> playerPokerIndexs) {
        // 真实的扑克集合
        List<String> pokerValues = new ArrayList<>();
        // 遍历玩家的扑克牌索引
        for (Integer key : playerPokerIndexs) {
            pokerValues.add(poker.get(key));
        }
        System.out.println(name + " : " + pokerValues);
    }
}
// 打印结果
底牌 : [黑桃7, 红心10, 红心J]
高进 : [红心2, 方块2, 红心3, 红心4, 梅花5, 红心7, 梅花7, 方块9, 黑桃10, 梅花10, 方块J, 红心Q, 梅花K, 方块K, 黑桃A, 梅花A, 小王]
龙五 : [黑桃2, 黑桃3, 方块3, 梅花4, 黑桃6, 梅花6, 方块7, 红心8, 红心9, 梅花9, 方块10, 梅花J, 梅花Q, 方块Q, 红心K, 红心A, 方块A]
Cao : [梅花2, 梅花3, 黑桃4, 方块4, 黑桃5, 红心5, 方块5, 红心6, 方块6, 黑桃8, 梅花8, 方块8, 黑桃9, 黑桃J, 黑桃Q, 黑桃K, 大王]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值