Java 简易斗地主发牌小案例

 1、定义Card类,封装每张牌的信息,属性包含number、color、size(编号,从0开始递增)
            toString只展示花色+点数即可

   //牌类
   public class Card {
        private String number;  //牌数
        private String color;   //花色
        private int size;       //编号

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

        public Card() {
        }

        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;
        }
    }
}

 2、定义Room类游戏房间,创建集合作为牌盒,构造中将准备好的54张牌存入牌盒
            定义点数数组
            定义花色数组
            对每张牌编号
            循环嵌套遍历点数和花色,过程中封装一张牌对象,并添加到牌盒
            按顺序存入小、大王(别忘了加入编号)
            打印牌盒查看内容

public class Room {
    //一副牌集合
    List<Card> cards = new ArrayList<>();
    public Room() {
       //定义牌的大小与花色
        String[] number = {"3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2"};
        String[] color = {"♠", "♣", "♥", "♦"};
        //构建一副牌
        int size = 0;
        for (String s : number) {
            for (String c : color) {
                Card card = new Card(s, c, ++size);
                cards.add(card);
            }
        }
        cards.add(new Card("大王", "", ++size));
        cards.add(new Card("小王", "", ++size));
        System.out.println("新牌:"+cards);

    }
//开始游戏方法
    public void start() {
        //洗牌
        Collections.shuffle(cards);
        System.out.println("洗牌后:"+cards);
        //三个玩家对象
        ArrayList<Card> play1 = new ArrayList<>();
        ArrayList<Card> play2 = new ArrayList<>();
        ArrayList<Card> play3 = new ArrayList<>();
        //为三个玩家发牌并保留底牌
        for (int i = 0; i < cards.size()-3; i++) {
            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));
        }
    }
        //手牌排序
        cardSort(play1);
        cardSort(play2);
        cardSort(play3);
        //查看三位玩家手牌和底牌
        System.out.println("玩家1:"+play1);
        System.out.println("玩家2:"+play2);
        System.out.println("玩家3:"+play3);

        List<Card> dipai = this.cards.subList(this.cards.size() - 3, this.cards.size());
        System.out.println("底牌:"+dipai);
        //假设玩家三叫到了地主  将底牌加入玩家三的手牌中并重新排序
        play3.addAll(dipai);
        cardSort(play3);
        System.out.println("玩家3:"+play3);
    }
    //手牌排序规则
    private void cardSort(ArrayList<Card> plays) {
        plays.sort((o1, o2) -> o1.getSize() - o2.getSize());
    }

3、定义测试类
            创建游戏房间,查看牌盒内容
            调用start开始游戏的方法,start方法中实现
                打乱集合完成洗牌
                定义三个玩家(集合)
                轮询完成发牌功能,留出三张底牌(后面截取出底牌集合)
                调用sortCards方法整牌(根据编号size升序)
                看牌(打印三个集合)
                截取出底牌集合,将底牌给到地主(地主我们决定,加入到手牌最后即可)
                查看底牌和地主的牌

public class Test {
    public static void main(String[] args) {
        Room room = new Room();
        room.start();

    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值