斗地主小游戏练习

测试类

package com.itheima.demo4test;



public class Game {
    public static void main(String[] args) {
        //目标: 开发斗地主游戏
        // 1、准备牌,每张牌都是一个对象,所以需创建牌类
        // 2、需进入房间,所以需要创建房间类,房间也是对象
        Room r = new Room();
        r.start();
    }
}

牌类

package com.itheima.demo4test;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Card {
    private String size;
    private String color;
    private int num;

    @Override
    public String toString() {
        return size + " " + color;
    }
}

房间类 (重点)

package com.itheima.demo4test;

import java.util.*;

// shift+f6:批量重命名
public class Room {
    // 1、准备好54张牌,定义一个集合容器,用来存储54张牌
    private List<Card> allCards = new ArrayList<>();
    // 2、初始化54张牌
    {  //实例代码块
        // 3、准备点数
        String[] sizes = { "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2"};
        // 4、准备花色
        String[] colors = {"红心", "方片", "草花", "黑桃"};
        // 5、组合点数和花色成为牌对象,添加到集合中
        int num = 0;
        for (String size : sizes) {
            num++;
            for (String color : colors) {
                //6、创建牌对象,并添加到集合中
                allCards.add(new Card(size, color, num));
            }
        }
        //        allCards.add(new Card("", "小王"));
        //        allCards.add(new Card("", "大王"));
        Collections.addAll(allCards, new Card("", "小王", ++num), new Card("", "大王", ++num));
        System.out.println("新牌是:"+allCards);
    }

    public void start() {
        //8、洗牌,随机打乱集合中元素的顺序
        Collections.shuffle(allCards);
        System.out.println("洗牌后:"+allCards);

        //9、发牌:定义三个玩家,令狐冲=[],令狐白=[],令狐紫=[]
        Map<String, List<Card>> players = new HashMap<>();
        List<Card> lhc = new ArrayList<>();
        List<Card> lhb = new ArrayList<>();
        List<Card> lhz = new ArrayList<>();
        players.put("令狐冲", lhc);
        players.put("令狐白", lhb);
        players.put("令狐紫", lhz);

        //只发出51张牌,因为最后三张牌是底牌
        for (int i = 0; i < allCards.size() - 3; i++) {
            //获得当前遍历到的牌
            Card card = allCards.get(i);
            if (i < 51) {
                if (i % 3 == 0) {
                    //第一个人接牌
                    lhc.add(card);
                } else if (i % 3 == 1) {
                    //第二个人接牌
                    lhb.add(card);
                }else if(i % 3 == 2){
                    //第三个人接牌
                    lhz.add(card);
                }
            }
        }

        //10、拿最后三张牌: subList方法,获取集合中指定范围的子集合。包左不包右
        List<Card> lastCards = allCards.subList(51, 54);
        System.out.println("底牌是:"+lastCards);

        //抢地主: 把这个集合直接扔给玩家
        lhz.addAll(lastCards);

        //11、对牌 排序
        sortCards(lhc);
        sortCards(lhb);
        sortCards(lhz);



        //12、看牌,遍历Map集合
        for (Map.Entry<String, List<Card>> entry : players.entrySet()) {
            // 获取玩家名称,也就是键
            String name = entry.getKey();
            //获取玩家牌,也就是值
            List<Card> cards = entry.getValue();
            //遍历玩家牌
            System.out.println(name + "的牌是" + cards);
        }


    }

    private void sortCards(List<Card> cards) {
        //        Collections.sort(cards, new Comparator<Card>() {
        //            @Override
        //            public int compare(Card o1, Card o2) {
        //                return o2.getNum() - o1.getNum();
        //            }
        //        });
        Collections.sort(cards, ( o1,  o2) -> o2.getNum() - o1.getNum());
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值