利用Java集合的知识来实现斗地主的洗牌、发牌

本篇章仅利用了ArrayList集合的知识,还包括一些简单的collections的方法

斗地主的规则不再赘述,下面简单介绍一下代码。

包括两个类(有参 、无参、get、set)和一个函数

1、Room 房间类

包括一个 List<Card> allCards 的属性:代表牌库。

public static class Room{
        private List<Card> allCards = new ArrayList<>();   //一副牌

        public Room() {
            //做出54张牌,存入集合allCards
            //a、点数:个数确定了,类型确定
            String[] numbers = {"3","4","5","6","7","8","9","10","J","Q","K","A","2"};

            //b、花色:个数确定了,类型确定
            String[] colors = {"♠","♥","♣","♦"};
            int size = 0;
            for (int i = 0; i < numbers.length; i++) {
                size++;
                for (int j = 0; j < colors.length; j++) {
                    //得到一张牌
                    Card card = new Card(numbers[i],colors[j],size);
                    allCards.add(card);  //存入牌
                }
            }
            Card card1 = new Card("","🃏",++size); //大王
            Card card2 = new Card("","¥",++size); //小王

            Collections.addAll(allCards,card1,card2);
            System.out.println("一副新牌:" + allCards);
        }
        public void start(){
            //1、洗牌
            Collections.shuffle(allCards);
            System.out.println("洗牌后:" + allCards);

            //2、发牌 三个玩家A B C
            List<Card> A = new ArrayList<>();

            List<Card> B = new ArrayList<>();

            List<Card> C = new ArrayList<>();

            List<Card> D;  //底牌
            //发牌的具体方法
            for (int i = 0; i < allCards.size() - 3; i++) {
                Card card = allCards.get(i);
                if(i % 3 == 0){
                    A.add(card);
                } else if (i % 3 == 1) {
                    B.add(card);
                } else if (i % 3 == 2) {
                    C.add(card);
                }
            }
            //subList 用于截取从a ~ b的信息
            D = allCards.subList(allCards.size() - 3,allCards.size());  //52,53,54

            System.out.println("---------------发牌----------------");
            System.out.println("A" + A);
            System.out.println("B" + B);
            System.out.println("C" + C);

            //3、排序
            sordCards(A);
            sordCards(B);
            sordCards(C);

            System.out.println("---------------给手牌排序----------------");
            System.out.println("A" + A);
            System.out.println("B" + B);
            System.out.println("C" + C);
            //4、抢地主
            //假设 B 抢到了   //这里可以自行用控制台输入,但是需要修改部分代码
            B.addAll(D);
            sordCards(A);
            sordCards(B);
            sordCards(C);
            System.out.println("----------------假设B抢到了地主---------------");
            System.out.println("A" + A);
            System.out.println("B" + B);
            System.out.println("C" + C);
            System.out.println(D);
        }
        //自定义排序规则
        private void sordCards(List<Card> cards) {
            Collections.sort(cards, new Comparator<Card>() {
                @Override
                public int compare(Card o1, Card o2) {
                    //也可以升序
                    return o2.getSize() - o1.getSize(); //降序排序
                }
            });
        }
    }

2、Card牌类

包括数字(String number)、花色(String color)、大小(int size)三种属性。

 public static class Card{
        private String number;   //数字
        private String color;  //花色
        private int size;      //大小

        public Card() {
        }

        public Card(String number, String color, int size) {
            this.number = number;
            this.color = color;
            this.size = size;
        }

        public String getNumber() {
            return number;
        }

        public void setNumber(String number) {
            this.number = number;
        }

        public String getColor() {
            return color;
        }

        public void setColor(String color) {
            this.color = color;
        }

        public int getSize() {
            return size;
        }

        public void setSize(int size) {
            this.size = size;
        }
        //用于直接调用对象就可以输出具体内容,否则输出的是地址,内容可以自定义    
        @Override
        public String toString() {   
            return color + number ;
        }
    }

3、m4()方法 用于封装所有代码,可以在测试类中直接调用该函数。

public static void m4(){
/*
        //目标:斗地主游戏的案例开发
        业务需求分析:
        业务:总共有54张牌
        点数:“3”,“4”,“5”,“6”,“7”,“8”,“9”,“10”,“J”,“Q”,“K”,“1”,“2”
        花色:“♠”,“♥”,“♣”,“♦”
        大小王:“🃏”,“¥”
        点数分别要组成四种花色,大小王各一张
        斗地主:发出51张牌,剩下3张作为底牌
*/
        Room room = new Room();
        room.start();
    }

4、玩家也可以单独设置为一个类

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值