模拟斗地主案例

要求:

能够实现发牌,自动排序的功能

 

public class Poker {
    private String point;//点数
    private String flower;//花色
    private int power ;//大小

    public Poker() {
    }

    public Poker(String point ,String flower) {
        this.point = point;
        this.flower = flower;
    }

    public int getPower() {
        return power;
    }

    public void setPower(int power) {
        this.power = power;
    }

    public String getPoint() {
        return point;
    }

    public void setPoint(String point) {
        this.point = point;
    }

    public String getFlower() {
        return flower;
    }

    public void setFlower(String flower) {
        this.flower = flower;
    }

    @Override
    public String toString() {
        if (Objects.isNull(flower)){
            return point;
        }
        return flower+point;
    }
}

=================华丽的分割线==================

class Player{
    private String name;
    private boolean boss;
    private List<Poker> pokers = new ArrayList<>();

    public Player() {
    }

    public Player(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public boolean isBoss() {
        return boss;
    }

    public void setBoss(boolean boss) {
        this.boss = boss;
    }

    public List<Poker> getPokers() {
        return pokers;
    }

    public void setPokers(List<Poker> pokers) {
        this.pokers = pokers;
    }

    @Override
    public String toString(){
        return name+(boss?"(地主)":"(农民)")+pokers;
    }
}

=================华丽的分割线==================

class Game{
    //存储所有牌集合
    static private List<Poker> list = new ArrayList<>();
    static private String[] points ={"3","4","5","6","7","8","9","10","J","Q","K","A","2","大王","小王"};
    static private String[] flowers = {"♠","♥","♣","♦"};
    private List<Player> players = new ArrayList<>();
    private Scanner sc = new Scanner(System.in);
    static private Random ra = new Random();
//    private String sizeSort = "345678910JOKA2小王大王"; 和下面注释的大小排序方法是一体的,注释部分排序打开这个.
    //发牌
     {
        for (int i = 0; i < points.length - 2; i++) {
            for (int j = 0; j < flowers.length; j++) {
                list.add(new Poker(points[i],flowers[j]));
            }
        }
        list.add(new Poker("大王",null));
        list.add(new Poker("小王",null));

         for (int k = 0; k < list.size(); k++) {
             list.get(k).setPower(k);//将54张牌设置大小
         }

    }
//初始化三名玩家
    public void playerJoin(){
        System.out.println("请输入玩家1的昵称");
        String p1 = sc.next();
        System.out.println("请输入玩家2的昵称");
        String p2 = sc.next();
        System.out.println("请输入玩家3的昵称");
        String p3 = sc.next();
        players.add(new Player(p1));
        players.add(new Player(p2));
        players.add(new Player(p3));

        startGame();
    }

    private void startGame() {
         //随机地主的索引
         int index=ra.nextInt(players.size());
         //设置指定位置的玩家为地主
        Player Boos = players.get(index);
        Boos.setBoss(true);
        System.out.println(Boos.getName()+"是地主");
        //开始发牌
        for (int i = 0; i < players.size(); i++) {
            //获取当前遍历到的玩家对象
            Player p = players.get(i);
            for (int j = 0; j < 17; j++) {
                //获取牌给当前玩家
                int n = ra.nextInt(list.size());
                p.getPokers().add(list.get(n));
                list.remove(n);
            }
        }
        Boos.getPokers().addAll(list);
        pokerSort();
        showPokers();
    }

    public void pokerSort(){
        for (int i = 0; i < players.size(); i++) {
            for (int j = 0; j < players.get(i).getPokers().size(); j++) {
                Collections.sort(players.get(i).getPokers(), new Comparator<Poker>() {
                    @Override
                    public int compare(Poker p1, Poker p2) {
                        return p1.getPower()-p2.getPower();
                    }
                });
            }
        }
    }

//    public void pokerSort(){
//        for (int i = 0; i <players.size(); i++) {
//            Collections.sort(players.get(i).getPokers(), new Comparator<Poker>() {
//                @Override
//                public int compare(Poker p1, Poker p2) {
//                    return (sizeSort.indexOf(p1.getPoint()) - sizeSort.indexOf(p2.getPoint()));
//
//                }
//            });
//        }
//    }

    public void showPokers(){
        for (Player player : players) {
            System.out.println(player);
        }
    }

    public static void main(String[] args) {
        new Game().playerJoin();

    }
}

都是自学时写的小案例,发上来就是记载一下!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值