点击查看: java 集合 (List,Set,Map) 博客目录
第四节 : 集合综合案例 - 斗地主
4.1 , 斗地主案例的需求分析
案例介绍:
按照斗地主的规则, 完成洗牌发牌的动作
具体规则:
使用 54 张牌打乱顺序, 三个玩家参与游戏, 三人交题摸牌, 没人 17 张牌, 最后三张留作底牌.
4.2 ,
准备牌:
牌可以设计为一个 ArrayList, 每个字符串为一张牌.
每张牌由花色 数字两部分组成, 我们可以使用花色集合和数字集合嵌套迭代完成每张牌的组装
牌由 Collection 类的 shuffle 方法进行随机排序.
发牌
将每个人以及底牌设计为 ArrayList, 将最后 3 张牌直接存放于底牌, 剩余牌通过对 3 取模依次发牌.
看牌:
直接打印每个集合.
代码实现:
- 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(List<?>list) 使用默认随机源对指定列表进行置换
- */
- 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);
- }
- }
来源: https://blog.csdn.net/weixin_44107920/article/details/104092395