点击查看: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);
}
}