java实现斗地主模拟发牌系统

一、首先实现花色和数字

ArrayList<String> color=new ArrayList<>();//存放花色
color.add("");
color.add("");
color.add("");
color.add("");
ArrayList<String> number=new ArrayList<>();//存放各数字
for(int i=2;i<=10;i++){
    number.add(i+"");
}
number.add("A");
number.add("J");
number.add("Q");
number.add("K");

二、将花色和数字结合起来,并使用map集合存储

//花色+数字
int index=0;
HashMap<Integer,String> map=new HashMap<>();//构成52张牌
for(String col:color){
    for(String num:number){
        map.put(index++,col+num);
    }
}
map.put(index++,"🃏");//加入大小王
map.put(index++,"🃏");

三、将map集合再次用list存储并洗牌

//打乱shuffle
ArrayList<Integer> cards=new ArrayList<>();
for(int i=0;i<54;i++)//模拟牌面数字
    cards.add(i);
//打乱shuffle:洗牌
Collections.shuffle(cards);

四、创建三个玩家并模拟发牌

//创建三个玩家
ArrayList<Integer> play1=new ArrayList();
ArrayList<Integer> play2=new ArrayList();
ArrayList<Integer> play3=new ArrayList();
ArrayList<Integer> sercret=new ArrayList();//底牌
//发牌
//总共54张:3个人轮流发:剩三张底牌
for(int i=0;i<cards.size();i++){
    if(i>=51){
        sercret.add(cards.get(i));
    } else if (i%3==0) {
        play1.add(cards.get(i));
    } else if (i%3==1) {
        play2.add(cards.get(i));
    }else {
        play3.add(cards.get(i));
    }
}

四、将玩家手中的牌排序并输出

//对3个玩家手里牌进行排序
Collections.sort(play1);
Collections.sort(play2);
Collections.sort(play3);
//输出每个玩家牌面信息
System.out.println("玩家1手里的牌:");
for(Integer car:play1){
    System.out.print(map.get(car)+"\t");
}
System.out.println();
System.out.println("玩家2手里的牌:");
for(Integer car:play2){
    System.out.print(map.get(car)+"\t");
}
System.out.println();
System.out.println("玩家3手里的牌:");
for(Integer car:play3){
    System.out.print(map.get(car)+"\t");
}
System.out.println();
System.out.println("底牌:");
for(Integer car:sercret){
    System.out.print(map.get(car)+"\t");
}

五、整体实现代码如下

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

public class doudizhu {
    public static void main(String[] args) {
        //牌面:花色+数字
        ArrayList<String> color=new ArrayList<>();
        color.add("♠");
        color.add("♦");
        color.add("♥");
        color.add("♣");
        ArrayList<String> number=new ArrayList<>();
        for(int i=2;i<=10;i++){
            number.add(i+"");
        }
        number.add("A");
        number.add("J");
        number.add("Q");
        number.add("K");
        //花色+数字
        int index=0;
        HashMap<Integer,String> map=new HashMap<>();//构成52张牌
        for(String col:color){
            for(String num:number){
                map.put(index++,col+num);
            }
        }
        map.put(index++,"🃏");//加入大小王
        map.put(index++,"🃏");
        //打乱shuffle
        ArrayList<Integer> cards=new ArrayList<>();
        for(int i=0;i<54;i++)//模拟牌面数字
            cards.add(i);
        //打乱shuffle:洗牌
        Collections.shuffle(cards);
        //创建三个玩家
        ArrayList<Integer> play1=new ArrayList();
        ArrayList<Integer> play2=new ArrayList();
        ArrayList<Integer> play3=new ArrayList();
        ArrayList<Integer> sercret=new ArrayList();
        //发牌
        //总共54张:3个人轮流发:剩三张底牌
        for(int i=0;i<cards.size();i++){
            if(i>=51){
                sercret.add(cards.get(i));
            } else if (i%3==0) {
                play1.add(cards.get(i));
            } else if (i%3==1) {
                play2.add(cards.get(i));
            }else {
                play3.add(cards.get(i));
            }
        }
        //对3个玩家手里牌进行排序
        Collections.sort(play1);
        Collections.sort(play2);
        Collections.sort(play3);
        //输出每个玩家牌面信息
        System.out.println("玩家1手里的牌:");
        for(Integer car:play1){
            System.out.print(map.get(car)+"\t");
        }
        System.out.println();
        System.out.println("玩家2手里的牌:");
        for(Integer car:play2){
            System.out.print(map.get(car)+"\t");
        }
        System.out.println();
        System.out.println("玩家3手里的牌:");
        for(Integer car:play3){
            System.out.print(map.get(car)+"\t");
        }
        System.out.println();
        System.out.println("底牌:");
        for(Integer car:sercret){
            System.out.print(map.get(car)+"\t");
        }
    }
}

六、运行结果如下:

 

第一次写博客呀,希望大家多多鼓励,如果有什么疑问或者更好的想法欢迎评论区讨论呀。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值