模拟扑克牌,发牌,洗牌(Java)

 

package 扑克牌完整;

public class Text01 {
    public static void main(String[] args) {
        Room01 room01 = new Room01();
        room01.start();
    }
}
package 扑克牌完整;

import 扑克牌.Card;

import java.util.*;

public class Room01 {
    private List <Card01> allCards = new ArrayList<>();
    public Room01(){
        String[] numbers = {"3","4","5","6","7","8","9","10","J","Q","K","A","2"};
        String[] colors = {"♦","♣","♥","♠"};
        int size =0;//表示每一张的大小
        //存牌
        for (String number : numbers) {
            for (String color : colors) {
                Card01 Card01 = new Card01(number, color, ++size);
                allCards.add(Card01);
            }
        }
        //存大小王
        Card01 c1 = new Card01("","🃏",++size);
        Card01 c2 = new Card01("","🤡",++size);
        Collections.addAll(allCards,c1,c2);
        System.out.println("新牌:"+ allCards);
    }


    public void start() {
        //1.洗牌
        Collections.shuffle(allCards);
        System.out.println("洗牌:"+allCards);

        //2.发牌,首先定义三个玩家(斗地主)
        ArrayList<Card01> WanJia1 = new ArrayList<>();
        ArrayList<Card01> WanJia2 = new ArrayList<>();
        ArrayList<Card01> WanJia3 = new ArrayList<>();

        //正式发牌给三个玩家,依次发出51张牌,剩余3张作为底牌
        //洗牌:(假设)[♠3 , ♣10 , ♠K , ♠7 , ♠4 , ♣4 , ♣K , ♠6 , ♠8 , ♠J , ♥K , ♦7 , ♣5 , ♥3 , ♣9 ,
        //      ♥Q , ♥J , ♦5 , ♥2 , ♦9 , ♦Q , ♥4 , ♣6 , ♠2 , ♦4 , ♣Q , ♣2 , ♥8 , ♦6 , ♦3 ,
        //      ♦8 , ♥A , ♣J , ♣A , ♣3 , ♥10 , ♣8 , ♦J , ♥9 , ♠Q , ♠A , ♦K , ♥6 , ♥7 , 🤡 ,
        //      ♠10 , ♠5 , 🃏 , ♠9 , ♦10 , ♦2 , ♥5 , ♣7 , ♦A ]
        //
        //♠3 , ♣10 , ♠K , ♠7 , ♠4 , ♣4 , ♣K
        //0     1     2    3    4    5    6
        //家1   家2   家3   家1  家2  家3  .... 利用取余操作 % 3
        for (int i = 0; i < allCards.size()-3; i++) {
            Card01 c = allCards.get(i);
            //判断牌发给谁
            if( i%3 == 0){
                //玩家一
                WanJia1.add(c);
            }else if(i%3 == 1){
                //玩家二
                WanJia2.add(c);
            }else if(i%3 == 2){
                WanJia3.add(c);
            }
        }

        //3.对三个玩家的牌进行排序
        sortCards(WanJia1);
        sortCards(WanJia2);
        sortCards(WanJia3);
        //4.看牌
        System.out.println("玩家1:"+WanJia1);
        System.out.println("玩家2:"+WanJia2);
        System.out.println("玩家3:"+WanJia3);

        //截取最后三张牌
        List<Card01> lastThreeCards =  allCards.subList(allCards.size()-3, allCards.size() ); // 索引 51 52 53
        System.out.println("底牌:"+lastThreeCards);

        Scanner sc = new Scanner(System.in);
        int[] arr = new int[]{0, 0, 0};
        int count = 0;
        while (count <= 2) {
            count++;
            System.out.println("*******开始抢地主*******");
            System.out.println("输入Y //N");
            System.out.print("玩家1:");
            String r0 = sc.next();
            if (r0.equals("Y")) {
                arr[0]++;
            }

            System.out.print("玩家2:");
            String r1 = sc.next();
            if (r1.equals("Y")) {
                arr[1]++;
            }

            System.out.print("玩家3:");
            String r2 = sc.next();
            if (r2.equals("Y")) {
                arr[2]++;
            }

            // 记录最大下标,和最大值
            int dex = 0;
            int max = arr[0];
            for (int i = 0; i < arr.length; i++) {
                if (arr[i] >= max) {
                    max = arr[i];
                    dex = i;
                }
            }
            String r = Arrays.toString(arr); // arr.toString
            if (r.indexOf(max + "") == r.lastIndexOf(max + "")) {
                if (dex == 0) {
                    WanJia1.addAll(lastThreeCards);
                    sortCards(WanJia1);
                    System.out.println("玩家1:" + WanJia1);
                } else if (dex == 1) {
                    WanJia2.addAll(lastThreeCards);
                    sortCards(WanJia2);
                    System.out.println("玩家2:" + WanJia2);
                } else if (dex == 2) {
                    WanJia3.addAll(lastThreeCards);
                    sortCards(WanJia3);
                    System.out.println("玩家3:" + WanJia3);
                }
                count++;
                count++;
//                break; // exit the loop
            } else if (count == 3) {
                // 在第二轮,两个玩家输入Y的情况下
                int dext=0;
                for (int i = 0; i < arr.length; i++) {
                    if (arr[i] >= max) {
                        dext = i;
                    }
                }
                        if (dext == 0) {
                            WanJia1.addAll(lastThreeCards);
                            sortCards(WanJia1);
                            System.out.println("玩家1:" + WanJia1);
                        } else if (dext == 1) {
                            WanJia2.addAll(lastThreeCards);
                            sortCards(WanJia2);
                            System.out.println("玩家2:" + WanJia2);
                        } else if (dext == 2) {
                            WanJia3.addAll(lastThreeCards);
                            sortCards(WanJia3);
                            System.out.println("玩家3:" + WanJia3);
                        }
            } else {
                count++;
            }
        }

    }
    public void sortCards(ArrayList<Card01> card01s){
        Collections.sort(card01s, new Comparator<Card01>() {
            @Override
            public int compare(Card01 o1, Card01 o2) {
                return o1.getSize()- o2.getSize();//升序排列
//                return o2.getSize() - o1.getSize();降序排列
            }
        });
    }
}

package 扑克牌完整;

public class Card01 {
    private String  number;
    private String color;
    private  int size;

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

    public Card01() {
    }

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

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值