集合:综合案例:斗地主业务分析

发布时间 2023-06-02 19:49:33作者: Karlshell

 

package com.GameDemo;

public class GameDemo {
    public static void main(String[] args) {
        Room s=new Room();
        //启动游戏
        s.start();

    }
}
package com.GameDemo;

public 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;
    }
}
package com.GameDemo;

import java.util.*;

public class Room {
    //必须有一副牌
    private List<Card> allCard=new ArrayList<>();
    //无参构造器
    public Room(){
        //1.做出54张牌,存入到集合allCard
        //a.点数:个数确定了,类型确定
        String[] numbers={"3","4","5","6","7","8","9","10","J","Q","K","A","2"};
        //b.花色:个数确定了,类型确定
        String[] colors={"♠","♥","♣","♦"};
        int size=0;//表示每张牌大小
        //c.遍历点数:再遍历花色,组织牌
        for (String number : numbers) {
            //number="3"
            size++;//1 2 .....
            for (String color : colors) {
                //得到一张牌
                Card c=new Card(number,color,size);
                allCard.add(c);

            }
        }
        //单独存入小大王
        Card c1=new Card("","?",++size);
        Card c2=new Card("","?",++size);
        Collections.addAll(allCard,c1,c2);
        System.out.println("新牌:"+allCard);
    }

    /**
     *启动游戏
     *
     * */
    public void start() {
        //1.洗牌
        Collections.shuffle(allCard);
        System.out.println("洗牌后:"+allCard);

        //2.发牌,首先肯定要定义三个玩家   用List(rrayList)更适用
        List<Card> lida=new ArrayList<>();
        List<Card> lier=new ArrayList<>();
        List<Card> lisan=new ArrayList<>();
        //正式发牌给玩家,依次发出51张牌,剩余三张底牌
        //用发牌索引对3取余   % 3
        for (int i = 0; i < allCard.size(); i++) {
            Card c=allCard.get(i);
            //判断发牌给谁
            if(i % 3==0){
                //1号玩家
                lida.add(c);
            }else if (i%3==1){
                //2号玩家
                lier.add(c);
            }else if (i % 3== 2){
                //3号玩家
                lisan.add(c);
            }
        }
        //对3个玩家牌进行排序
        sortCard(lida);
        sortCard(lier);
        sortCard(lisan);
        //4.看牌
        System.out.println("李大:"+lida);
        System.out.println("李二:"+lier);
        System.out.println("李三:"+lisan);
        List<Card> DiPai=allCard.subList(allCard.size()-3,allCard.size());//表示从倒数第三张牌开始索引到极限值,并赋值给底牌
        System.out.println("底牌:"+DiPai);
        lier.addAll(DiPai);
        System.out.println("李大抢到地主后:"+lida);
     }
    /***
     * 集中排序
     */
    private void sortCard(List<Card> cards) {
        Collections.sort(cards, new Comparator<Card>() {
            @Override
            public int compare(Card o1, Card o2) {
                return o1.getSize()-o2.getSize();//升序排序
                //return o2.getSize()-o1.getSize();//降序排序
            }
        });
    }
}