斗地主?Java约

 			 Hello,大家好!我是Cx_330
本篇博文该大家演示一下如何自己实现一个简单的斗地主
游戏,包括普通版和升级版两个版本,升级版本是在名牌的
时候向我们展示的是已经排好序的牌

小游戏描述

在这里插入图片描述

  • 自己模拟实现一个斗地主的创建牌,洗牌,发牌,名牌阶段

游戏目的

  • 综合考察我们对于集合的灵活应用与实践

实现思路

  • 通过Collections类对集合进行相关操作

  • 根据HashMap特性用来存放牌的序号和牌的值

  • 通过ArrayList存放牌的序号

  • 通过TreeSet接受牌的序号并进行自动的排序存储

普通版斗地主源码实现

普通斗地主的简单实现[建牌,洗牌,发牌,名牌]
public class Test {
    public static void main(String[] args) {

        //创建54张牌
        ArrayList<String> poker = new ArrayList<String>();
        String[] colors={"♦","♠","♥","♣"};
        String[] numbers={"2","3","4","5","6","7","8","9","10","J","Q","K","A"};
        for(String col:colors){
            for (String num:numbers){
                poker.add(col+num);
            }
        }
        poker.add("🐱");//小王
        poker.add("🦁");//大王
        //洗牌
        Collections.shuffle(poker);
        //发牌
        ArrayList<String> player1 = new ArrayList<>();
        ArrayList<String> player2 = new ArrayList<>();
        ArrayList<String> player3 = new ArrayList<>();
        ArrayList<String> dipoker = new ArrayList<>();
        for (int i = 0; i < poker.size(); i++) {
            String s=poker.get(i);
            if(i>=poker.size()-3){
                dipoker.add(s);
            }else if(i%3==0){
                player1.add(s);
            } else if (i%3==1) {
                player2.add(s);
            }else {
                player3.add(s);
            }
        }
        //名牌
        show("小白",player1);
        show("小娥",player2);
        show("小梅",player3);
        show("底牌",dipoker);

    }
    public static void show(String name,ArrayList<String> arrayList){
        System.out.print(name+"的牌:");
        for (String s:arrayList){
            System.out.print(s+" ");
        }
        System.out.println();
    }
}

升级版斗地主源码实现

public class Test {
    public static void main(String[] args) {

        //创建HashMap集合  键:序号  值:牌
        HashMap<Integer, String> poker = new HashMap<Integer, String>();
        //创建ArrayList存放HashMap中的键
        ArrayList<Integer> arrayList = new ArrayList<Integer>();
        //创建花色 牌的字符串数组
        String[] colors={"♦","♠","♥","♣"};
        String[] numbers={"3","4","5","6","7","8","9","10","J","Q","K","A","2"};
        //将牌放入HashMap中 ---增强型嵌套for循环
        int index=0;//通过一个索引 存放序号[0~51]
        //注意:存的时候也有个细节,要先遍历数字,在遍历花色,这样才能保证数字的升序
        for(String col:numbers){
            for (String num:colors){
                poker.put(index,col+num);
                arrayList.add(index);
                index++;
            }
        }
        //不要忘记还有 🦁  🐱
        poker.put(index,"🐱");
        arrayList.add(index);
        index++;
        poker.put(index,"🦁");
        arrayList.add(index);
        //洗牌:打乱arrayList中索引的顺序
        Collections.shuffle(arrayList);
        //发牌[这个阶段已经做好了排序的实现了TreeSet的特点]
        //用TreeSet接受,存储的时候可以自动排序
        TreeSet<Integer> player1 = new TreeSet<>();
        TreeSet<Integer> player2 = new TreeSet<>();
        TreeSet<Integer> player3 = new TreeSet<>();
        TreeSet<Integer> dipoker = new TreeSet<>();
        for (int i = 0; i < arrayList.size(); i++) {
            Integer x=arrayList.get(i);
            if(i>=arrayList.size()-3){
                dipoker.add(x);
            } else if (i%3==0) {
                player1.add(x);
            } else if (i%3==1) {
                player2.add(x);
            }else {
                player3.add(x);
            }
        }
        //名牌
        show("张三",player1,poker);
        show("李四",player2,poker);
        show("王五",player3,poker);
        show("底牌",dipoker,poker);

    }
   public static void show(String name,TreeSet<Integer>treeSet,HashMap<Integer,String>hm){
       System.out.print(name+"的牌是 :");
       for (Integer i:treeSet){
           String s=hm.get(i);
           System.out.print(s+" ");
       }
       System.out.println();
   }
}

结果演示

在这里插入图片描述

小结

  • 我通过自己实现这个小游戏之后,对于集合的相关操作以及对每个集合特性的了解更加的深入了

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

C_x_330

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值