java -- 集合 - 4(综合案例:斗地主 )

点击查看:java集合(List、Set、Map)博客目录

第四节 : 集合综合案例–斗地主

4.1 、斗地主案例的需求分析

案例介绍:

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

4.2 、

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

java -- 集合 - 4(综合案例:斗地主 )_第1张图片

代码实现:

import java.util.*;
public class DouDiZhu{
    public static void main(String [] args){
        // 1.准备牌
        ArrayList<String> puke = new ArrayList<>();
        // 定义两个数组,一个数组存储花色,一个存储序号
        String [] colors = {"♠","♥","♣","♦"};
        String [] numbers = {"2","A","K","Q","J","10","9","8","7","6","5","4","3"};
        //先把大王和小王存储到puke集合中
        puke.add("大王");
        puke.add("小王");
        // 循环嵌套遍历两个数组,组装52张牌
        for(String number:numbers){
            for(String color : colors){
                //把组装好的牌 存放到puke集合中
                puke.add(color+number);
            }
        }
        /*  2.洗牌
            使用集合中的工具类Collections中的方法
            static void shuffle(Listlist)  使用默认随机源对指定列表进行置换
        */
        Collections.shuffle(puke);
        
        /*  3.发牌
            定义4个集合,存储玩家的牌和底牌
        */
        ArrayList<String> player01 = new ArrayList<>();
        ArrayList<String> player02 = new ArrayList<>();
        ArrayList<String> player03 = new ArrayList<>();
        ArrayList<String> dipai = new ArrayList<>();
        
        /**
           遍历puke集合,获取每一张牌
           使用puke集合的索引%3,给三个玩家轮流发牌
           剩余3张牌给底牌
           注意: 先判断底牌(i>=51)
        */
        for(int i=0;i<puke.size();i++){
            // 获取每一张牌
            String p = puke.get(i);
            // 轮流发牌
            if(i>=51){
                dipai.add(p);
            }else if(i%3==0){ // 给玩家1发牌
                player01.add(p);
            }else if(i%3==1){ // 给玩家2发牌
                player02.add(p);
            }else if(i%3==2){ // 给玩家3发牌
                player03.add(p);
            }
        }
        //  看牌
        System.out.println("袁睿昕:"+player01);
        System.out.println("闫津铭:"+player02);
        System.out.println("李天一:"+player03);
        System.out.println("底牌:"+dipai);
                
    }
}

java -- 集合 - 4(综合案例:斗地主 )_第2张图片

你可能感兴趣的:(java集合(List,Set,Map...))