Java集合综合案例

本文介绍了一种基于Java的斗地主游戏发牌算法实现。通过使用ArrayList存储54张牌,并利用花色与数字集合组合生成牌面,再通过Collections.shuffle()方法进行随机洗牌。最终,算法实现了三个玩家各得17张牌,剩余3张作为底牌的发牌过程。
摘要由CSDN通过智能技术生成

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

一: 具体规则

使用54张牌打乱顺序,三个玩家参与游戏,三人交替摸牌,每人17张牌,最后三张留作底牌。

二: 分析

  • 准备牌:
    牌可以设计为一个ArrayList,每个字符串为一张牌。每张牌由花色数字两部分组成,我们可以使用花色集合与数字集合嵌套迭代完成每张牌的组装。牌由Collections类的shuffle方法进行随机排序。
  • 发牌
    将每个人以及底牌设计为ArrayList,将最后3张牌直接存放于底牌,剩余牌通过对3取模依次发牌。
  • 看牌
    直接打印每个集合。

三: 代码实现

package DemoDate;

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

public class DemoPoker {
    public static void main(String[] args) {
        /*
        1:准备牌操作
         */
        // 1.1 创建牌盒
        ArrayList<String> pokerBox = new ArrayList<>();
        //1.2创建花色集合
        ArrayList<String> colors = new ArrayList<>();
        //1.3 创建数字集合
        ArrayList<String> numbers = new ArrayList<>();
        //1.4 分别给花色 以及 书数字集合添加元素
        colors.add("♥");
        colors.add("♦");
        colors.add("♠");
        colors.add("♣");

        for (int i = 2; i <= 10; i++) {  // 2 - 10 的数字
            numbers.add(i + "");
        }
        numbers.add("J");
        numbers.add("Q");
        numbers.add("K");
        numbers.add("A");

        //1.5创造牌 拼接牌操作
        // 拿出每一个花色 然后跟每一个数字 进行结合 存储到牌盒中
        for (String color : colors) {
            // color 每一个花色
            // 遍历数字集合
            for (String number : numbers) {
                // 结合
                String card = color + number;
                //存储到牌盒中
                pokerBox.add(card);
            }
        }
        // 1.6 大小王
        pokerBox.add("小?");
        pokerBox.add("大?");
        //System.out.println(pokerBox);
        //洗牌 是不是就是将 牌盒中的 牌的索引打乱
        //Collection类  工具类 都是静态方法
        // shuffer方法
        /**
         * Static void shuffer(List<?>List)
         * 使用默认随机源指定列表进行置换
         */
        //2 : 洗牌
        Collections.shuffle(pokerBox);
        // 3 发牌
        //3.1 创建 三个 玩家集合 创建一个底牌集合
        ArrayList<String> player1 = new ArrayList<>();
        ArrayList<String> player2 = new ArrayList<>();
        ArrayList<String> player3 = new ArrayList<>();
        ArrayList<String> dipai = new ArrayList<>();

        //遍历 牌盒 必须知道索引
        for (int i = 0; i < pokerBox.size(); i++) {
            // 获取牌面
            String card = pokerBox.get(i);
            //留出三张底牌 存到 底牌集合中
            if (i >= 51) {
                dipai.add(card);
            } else {
                if (i % 3 == 0) {
                    player1.add(card);
                } else if (i % 3 == 1) {
                    player2.add(card);
                } else {
                    player3.add(card);
                }
            }
        }
        //最后输出
        System.out.println("张学友" + player1);
        System.out.println("周杰伦" + player2);
        System.out.println("周星驰" + player3);
        System.out.println("底牌" + dipai);
    }
}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值