斗地主案列的需求分析以及案列案列的代码实现
斗地主案列的需求分析
1.准备牌
特殊牌大王,小王
52张牌:循环嵌套遍历两个集合/数组,组装52张牌
将组装好的牌放到Map集合中
2.洗牌
获取Map集合的键,放到List集合中
使用Collections中的方法shuffle(List);将集合打乱
3.发牌
要求:1人17张牌,最后剩余3张作为底牌,一人一张轮流发牌,让集合的索引%3;
定义4个集合,用来存储3个玩家的牌和底牌
索引%3为0时添加到第一个集合
索引%3为1时添加到第二个集合
索引%3为2时添加到第三个集合
当索引大于等于51时,添加到底牌集合

4.排序
使用Collections中的方法soft(List)
5.看牌:可以使用查表方法
遍历一个集合,获取到另外一个集合的Key,通过key找到value
遍历玩家和底牌的List集合,获取到Map集合的key,通过key找到value值
斗地主案列的代码实现(有序排序)
public class demg_03 { public static void main(String[] args) { /* 1.准备牌 */ //创建一个Mop结婚,存储牌的索引和组装好的牌 HashMap<Integer, String> poker = new HashMap<>(); List<Integer> pokey = new ArrayList<>(); //创建一个List集合,存储牌的索引 List<String> colors = new ArrayList<>(); List<String> numbers = new ArrayList<>(); //定义两个集合,存储花色和牌的顺序 Collections.addAll(colors,"♠","♥","♣","♦"); Collections.addAll(numbers,"A","2","3","4","5","6","7","8","9","10","J","Q","K"); //把大王和小王存储到集合中 //定义一个牌的缩影 int index = 0; poker.put(index,"大王"); pokey.add(index); index++; poker.put(index,"小王"); pokey.add(index); index++; //循环嵌套遍历两个集合,组装52张牌,存储到集合中 for (String number : numbers) { for (String color : colors) { poker.put(index,color+number); pokey.add(index); index++; } } /* 2.洗牌 */ Collections.shuffle(pokey);//打乱顺序 // System.out.println(pokey); /* 3.发牌 */ //定义4个集合,存储玩家牌的索引,和底牌的索引 ArrayList<Integer> player01 = new ArrayList<>(); ArrayList<Integer> player02 = new ArrayList<>(); ArrayList<Integer> player03 = new ArrayList<>(); ArrayList<Integer> player04 = new ArrayList<>(); for (int i = 0; i < pokey.size() ; i++) { Integer in = pokey.get(i); //先判断底牌 if (i>=51){ //给底层发牌 player04.add(in); }else if (i%3==0){ //给玩家1发牌 player01.add(in); }else if (i%3==1){ //给玩家2发牌 player02.add(in); }else if (i%3==2){ //给玩家3发牌 player03.add(in); } } /* 4.排序 使用Collections中的方法sort(List) 默认是升序排序 */ Collections.sort(player01); Collections.sort(player02); Collections.sort(player03); Collections.sort(player04); /* 5.看牌 */ look("刘德华",poker,player01); look("兵强强",poker,player02); look("赵雷家",poker,player03); look("周润发",poker,player04); } /* 定义一个看牌的方法,提高代码的复用性 参数: */ public static void look(String name,HashMap<Integer,String> poker,ArrayList<Integer> list){ //输出玩家名称,不换行 System.out.print(name+": "); //遍历玩家或者底牌的集合,获取牌的索引 for (Integer integer : list) { //使用牌的索引,去Map集合,找到对应的牌 String in = poker.get(integer); System.out.print(in+" "); } System.out.println();//打印完每一个玩家的牌。换行 } }
运行结果:


浙公网安备 33010602011771号