Java进阶--集合泛型综合应用案例(斗地主)

案例介绍


按照斗地主的规则,完成洗牌发牌的动作。
具体规则:
使用54张牌打乱顺序,三个玩家参与游戏,三人交替摸牌,每人17张牌,最后三张留作底牌。

案例分析

  • 准备牌:
    牌可以设计为一个ArrayList,每个字符串为一张牌。
    每张牌由花色数字两部分组成,我们可以使用花色集合与数字集合嵌套迭代完成每张牌的组装。
    牌由Collections类的shuffle方法进行随机排序。
  • 发牌
    将每个人以及底牌设计为ArrayList,将最后3张牌直接存放于底牌,剩余牌通过对3取模依次发牌。
  • 看牌
    直接打印每个集合。

代码实现

package 集合和泛型.斗地主案例;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;

public class Poker {
    public static void main(String[] args) {
        /*
         * 1: 准备牌操作
         */
        ArrayList<String> pokerBox = new ArrayList<>();
        ArrayList<String> colors = new ArrayList<>();
        ArrayList<String> numbers = new ArrayList<>();

        colors.add("♠");
        colors.add("♥");
        colors.add("♣");
        colors.add("♦");

        numbers.add("J");
        numbers.add("Q");
        numbers.add("K");
        numbers.add("A");
        for (int i = 2; i <= 10; i++) {
            numbers.add(i+"");
        }
        // 装牌
        pokerBox.add("小☠");
        pokerBox.add("大☠");
        for(String c:colors){
            for(String n:numbers){
                pokerBox.add(c+n);
            }
        }

        // 洗牌
        Collections.shuffle(pokerBox);

        // 发牌
        ArrayList<String> palyer1 = new ArrayList<>();
        ArrayList<String> palyer2 = new ArrayList<>();
        ArrayList<String> palyer3 = new ArrayList<>();
        ArrayList<String> dipai = new ArrayList<>();
        
        for (int i = 0; i < pokerBox.size() ; i++) {
            String card = pokerBox.get(i);
            if(i >= 51){

                dipai.add(card);
            }else {
                if(i%3 == 0){
                    palyer1.add(card);
                }else if(i%3 ==1){
                    palyer2.add(card);
                }else{
                    palyer3.add(card);
                }
            }
        }
        
        // 看牌
        System.out.println(palyer1);
        System.out.println(palyer2);
        System.out.println(palyer3);
        System.out.println(dipai);

     }
}

输出模拟结果

posted @ 2020-07-24 17:20  sinlearn  阅读(198)  评论(0编辑  收藏  举报