Java-斗地主案例分析以及源码

斗地主案例分析

54张牌打乱顺序,三人交替摸牌,每人17张,最后三张作为底牌

分析:
  1. 准备牌

    54张牌,其中包括两张特殊的牌:大小王

    其他52张牌:

    • 定义以一个数组/集合,包括四种花色:桃、心、梅、方

    • 定义以一个数组/集合,面值:A、2、3、…、K

      将两个集合组合起来变成剩余的52张

  2. 洗牌:使用集合工具类Collections的方法

    static void shuffle(List<?> List)使用指定的随机源对指定的列表进行置换

    随机打乱集合中的元素

  3. 摸牌:要求1人17张牌,剩余三张作为底牌,一人一张轮流发牌:集合的索引(0-53)%3

    定义4个集合,分别存储3个玩家的牌和底牌

    索引%3,有三个值(0,1,2)

    索引>=51,给底牌发牌

  4. 看牌:打印遍历集合

源码:

package DouDiZhu;

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

public class Ddz {
    public static void main(String[] args) {
        //定义以一个ArrayList集合来存储54张牌
        ArrayList<String> poker = new ArrayList<>();

        //定义两个数组分别存花色和数值
        String[] color = {"♠","♥","♣","♦"};
        String[] number = {"2","3","4","5","6","7","8","9","10","J","Q","K","A"};
        //将大小王先放扑克集合中
        poker.add("BigJoker");
        poker.add("SmallJoker");

        //循环嵌套两个数组,组装52张牌,并把牌放到扑克集合当中
        for (String numbers : number) {
            for (String colors : color) {
                poker.add(colors+numbers);
            }
        }

        //打乱顺序
        Collections.shuffle(poker);

        //定义四个集合来
        ArrayList<String> people1 = new ArrayList<>();
        ArrayList<String> people2 = new ArrayList<>();
        ArrayList<String> people3 = new ArrayList<>();
        ArrayList<String> lastPoker = new ArrayList<>();


        //发牌
        int i = 0;
        while (i <= 50){
            if (i%3 == 0){
                people1.add(poker.get(i));
            }else if (i%3 == 1){
                people2.add(poker.get(i));
            }else if (i%3 == 2){
                people3.add(poker.get(i));
            }
            i++;
        }

        //把最后的三张牌作为底牌,放到底牌集合中
        lastPoker.add(poker.get(51));
        lastPoker.add(poker.get(52));
        lastPoker.add(poker.get(53));

        //看牌,打印集合
        System.out.println("三千七百万:"+people1);
        System.out.println("反手一个超级加倍:"+people2);
        System.out.println("闷声发大财慈善家:"+people3);
        System.out.println(lastPoker);
    }
}

结果展示
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值