Java(集合经典案例:斗地主)

经典案例--斗地主

import java.util.*;

/*
斗地主
 步骤
 1、买牌
   54张牌,存储到一个集合中
   2张:大王,小王
   52张:
        定义一个数组/集合 存储4种花色
        定义一个属猪/集合 存储A-K的13个序号
    嵌套遍历两个数组/集合,组装52张牌 例如:♠A


 2、洗牌
        使用集合工具类Collections的方法
        static  void shuffle(List<> list)使用指定的随机原对指定列表进行置换
        会随机的打乱集合种元素的顺序

 3、发牌
        要求:1人17张牌,剩余3张作为底牌,一人一张轮流发牌:集合的索引(0-53)%3
        定义4个集合,存储3个玩家的牌和底牌
        索引%2,有两个值(0,1),0%2 = 0 ,1%2 =1 ,2%2 =0 ,3%2 = 1
        索引%3,有两个值(0,1,3),0%3 = 0 ,1%3 =1 ,2%3=2  ,3%3 = 0
        索引>=51 改底牌发牌

 4、看牌
        直接打印集合,遍历存储玩家和底牌的集合


 */
public class Test {
    public static void main(String[] args) {
        //1、买牌
        //定义一个存储54张牌的ArrayLIst集合,泛型使用String
        ArrayList<String> poker = new ArrayList<>();
        //定义两个数组,一个存储牌的花色,一个存储牌的序号
        String[] colors = {"♠", "♥", "♣", "♦"};
        String[] numbers = {"3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2"};
        //先把大王和小王存储到poker中
        poker.add("大王");
        poker.add("小王");

        //通过循环嵌套 ,造牌
        for (String number : numbers) {
            for (String color : colors) {
                poker.add(color + number);
            }
        }

        //2、洗牌
        //使用集合中工具类Collections中的方法
        Collections.shuffle(poker);

        //3、发牌
        //定义四个集合 ,存储玩家的牌和底牌
        ArrayList<String> player1 = new ArrayList<>();
        ArrayList<String> player2 = new ArrayList<>();
        ArrayList<String> player3 = new ArrayList<>();
        ArrayList<String> dipai = new ArrayList<>();

        /*
        遍历poker集合,获取每一张牌
        使用poker集合的索引给3个玩家轮流发牌
        剩余3张留底牌
         */

        for (int i = 0; i < poker.size(); i++) {
            //获取每一张牌
            String p = poker.get(i);
            //轮流发牌
            if (i >= 51) {
                dipai.add(p);
            } else if (i % 3 == 0) {//给玩家1发牌
                player1.add(p);
            } else if (i % 3 == 1) {//给玩家2发牌
                player2.add(p);
            } else if (i % 3 == 2) {//给玩家3发牌
                player3.add(p);
            }
        }

        //4、看牌
        System.out.println("沈腾"+player1);
        System.out.println("贾玲"+player2);
        System.out.println("王宝强"+player3);
        System.out.println("底牌为:"+dipai);
/*
沈腾[♣2, ♦2, ♥4, ♥J, ♠2, ♦3, ♠3, 小王, ♠Q, ♦5, ♥9, ♠A, ♥10, 大王, ♣8, ♥3, ♥7]
贾玲[♠K, ♠5, ♣5, ♣10, ♣K, ♣6, ♠4, ♠9, ♠10, ♥A, ♣A, ♠7, ♥6, ♦K, ♦8, ♦9, ♣3]
王宝强[♦10, ♥2, ♦J, ♠6, ♠8, ♣7, ♥8, ♦6, ♣4, ♣Q, ♣9, ♠J, ♣J, ♦4, ♥Q, ♦A, ♥5]
底牌为:[♦7, ♥K, ♦Q]
 */

    }
}
posted @ 2021-02-28 18:45  一名初学者  阅读(272)  评论(0)    收藏  举报