Java 斗地主案例 集合知识的综合运用

mac2025-10-06  1

需求分析 

案例介绍:

       按照斗地主的规则,完成洗牌发牌的动作。

具体规则:

       使用54张牌打乱顺序,三个玩家参与游戏,三者交替摸牌,每人1张牌,最后三张作留底牌

案例分析:

1. 准备洗牌

牌可以设计为一个ArrayList<String>,每个字符串为一张牌。 每张牌由花色数字两部分组成,我们可以使用花色集合与数字集合嵌套迭代完成每张牌的组装。 牌由Collections类的shuffle方法进行随机排序。 2. 发牌

将每个人以及底牌设计为ArrayList<String>,将最后3张牌直接存放于底牌,剩余牌通过对3取模依次发牌。 3. 看牌

直接打印每个集合  

代码实现

package JiHe.DouDiZhuL; import java.util.ArrayList; import java.util.Collections; import java.util.Iterator; /* 斗地主综合案例: 1. 准备牌 2. 洗牌 3. 发牌 4. 看牌 */ public class DouDiZhu { public static void main(String[] args) { //1. 准备牌 //定义一个存储54张牌的ArrayList集合,泛型使用String ArrayList<String> poker = new ArrayList<>(); //定义两个数组,一个数组存储牌的花色,一个数组存储牌的序号 String[] colors = {"♠","♥","♣","♦"}; String[] numbers = {"2","A","K","Q","J","10","9","8","7","6","5","4","3"}; //先把大王、小王添加到集合中 poker.add("大王"); poker.add("小王"); //循环嵌套遍历两个数组,组装52张牌 for(String number : numbers){ for (String color : colors) { //System.out.println(color + number); //把组装好的牌存储到poker集合中 poker.add(color + number); } } //System.out.println(poker); /* 2. 洗牌 使用集合的工具类Collections中的方法 static void shuffle(List<?> list) 使用默认随机源对指定列表进行置换。。 */ Collections.shuffle(poker); //System.out.println(poker); /* 3. 发牌 */ //定义4个集合,存储玩家的牌和底牌 ArrayList<String> player01 = new ArrayList<>(); ArrayList<String> player02 = new ArrayList<>(); ArrayList<String> player03 = new ArrayList<>(); ArrayList<String> diPai = new ArrayList<>(); /* 遍历poker集合,获取每一张牌 使用poker集合的索引%3给3个玩家轮流发牌 剩余的3张牌给底牌 注意: 先判断底牌(i >= 51),否则牌就发没了 */ for (int i = 0; i < poker.size(); i++) { //获取每一张牌 String p = poker.get(i); //轮流发牌 if(i >= 51){ diPai.add(p); }else if(i % 3 == 0){ player01.add(p); }else if(i % 3 == 1){ player02.add(p); }else if(i % 3 == 2){ player03.add(p); } } //4. 看牌 有两种对集合遍历的方法 System.out.println("AA的牌:" + player01); System.out.println("BB的牌:" + player02); System.out.println("CC的牌:" + player03); System.out.println("底牌:" + diPai); System.out.println("======================================================================================="); //1. 调用一个迭代器方法遍历 System.out.print("AA的牌:"); printArray(player01); System.out.println(""); System.out.print("BB的牌:"); printArray(player02); System.out.println(""); System.out.print("CC的牌:"); printArray(player03); System.out.println(""); System.out.print("底牌:"); printArray(diPai); System.out.println(""); System.out.println("======================================================================================="); //2. 增强for循环遍历 System.out.print("AA的牌:"); for(Object o1 : player01){ System.out.print(o1 + " "); } } //定义一个遍历集合的方法 public static void printArray(ArrayList<?> list){ //使用迭代器遍历 Iterator<?> it = list.iterator(); while (it.hasNext()){ Object o = it.next(); System.out.print(o + " "); } } }

 

最新回复(0)