Java进阶基础-模拟斗地主洗牌收发牌,显示玩家分配的牌数。

本文介绍了一款斗地主游戏模拟器的实现过程,使用Java编程语言,通过TreeSet和ArrayList集合管理牌堆和玩家手牌,实现了游戏的洗牌、发牌和展示功能,确保每局游戏中每位玩家获得相同数量的牌。
  • 要求:模拟斗地主的,需要实现:程序每次运行,三个玩家都能依次拿到相同张数的牌,以及对应的底牌,从小到大打印
  • 牌的显示由花色+牌号组成:eg:♦J,♣5,♥6,♠A
  • */
  • 上代码…
/*
* 要求:模拟斗地主的,需要实现:程序每次运行,三个玩家都能依次拿到相同的牌,以及底牌,从小到大打印
* 牌的显示由花色+牌号组成:eg:♦J,♣5,♥6,♠A
*
*
* 思路:
* 第一步:用TreeSet<Interger,String>集合存储一副牌,用ArrayList<Interger>存储[0-54)个数字
* 第二步:用4个TreeSet集合模拟3个玩家和 底牌
* 第三步:用集合Collectioins.shuffle(ArrayList)对其进行洗牌。
* 第四步:遍历arrayList集合,依次存入三个玩家中,根据TreeSet集合特点,自然排序存储元素。
* 第五步:遍历三个集合元素以及底牌元素,根据K值找到对应的v值
* */

import java.util.*;

public class MainCode {
    public static void main(String[] args) {
        //* 第一步:用TreeSet<Interger,String>集合存储一副牌,用ArrayList<Interger>存储[0-54)个数字
        HashMap<Integer,String> pai = new HashMap<Integer, String>();
        ArrayList<Integer> xuhao = new ArrayList<>();
        String[] huaSe = {"♦","♣","♥","♠"};
        String[] shuZi = {"3","4","5","6","7","8","9","10","J","Q","K","A","2"};
        int num = 0;
        for(String sz:shuZi){
            for(String hs:huaSe){
                pai.put(num,hs+sz);
                xuhao.add(num);
                num++;
            }
        }
        pai.put(52,"小王");
        xuhao.add(num);
        num++;
        pai.put(53,"大王");
        xuhao.add(num);

        //* 第二步:用4个TreeSet集合模拟3个玩家和 底牌
        TreeSet<Integer> sb1 = new TreeSet<>();
        TreeSet<Integer> sb2 = new TreeSet<>();
        TreeSet<Integer> sb3 = new TreeSet<>();
        //留底
        TreeSet<Integer> sb4 = new TreeSet<>();

        //* 第三步:用集合Collectioins.shuffle(ArrayList)对其进行洗牌。
        Collections.shuffle(xuhao);

        //* 第四步:遍历arrayList集合,依次存入三个玩家中,根据TreeSet集合特点,自然排序存储元素。
        for(int i=0;i<xuhao.size()-3;i++){
            if(i%3==0){
                sb1.add(xuhao.get(i));
            }else if(i%3==1){
                sb2.add(xuhao.get(i));
            }else{
                sb3.add(xuhao.get(i));
            }
        }
        sb4.add(xuhao.get(51));
        sb4.add(xuhao.get(52));
        sb4.add(xuhao.get(53));

        //* 第五步:遍历三个集合元素以及底牌元素,根据K值找到对应的v值
        show(pai,sb1, 1);
        show(pai,sb2, 2);
        show(pai,sb3, 3);
        show(pai,sb4, 4);
    }

    //打印方法,参数1:整副牌 参数2:排配的序号 参数3:玩家编号
    private static void show(HashMap<Integer,String> pai,TreeSet<Integer> sb,int i) {
        if(i==4){
            System.out.print("底牌:");
        }else{
            System.out.print("玩家"+i+"的牌是:");
        }
        for(Integer s:sb){
            //根据K值找V值
            String str = pai.get(s);
            System.out.print(str+" ");
        }
        System.out.println();
    }
}

效果图
在这里插入图片描述
在这里插入图片描述

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值