知识点:
public class ArrayList<>集合:存放大小可变的内容.
Collections类的 shuffle()方法: 使用默认随机源对指定列表进行置换。
嵌套for循环: 外循环执行一次,内循环执行一轮。
/*
按照斗地主的规则,完成洗牌发牌的动作。
具体规则: 使用54张牌打乱顺序,三个玩家参与游戏,三人交替摸牌,每人17张牌,后三张留作底牌。
斗地主综合案例
1.准备牌
2.洗牌
3.发牌
4.看牌
*/
public class DouDiZhu {
public static void main(String[] args) {
//调用方法.
faPoKer();
}
// 创建一个方法 , 获取 所有的牌 , 并将顺序打乱 .
public static ArrayList<String> getPoKer() {
// 1. 准备牌
//定义一个集合,存储54张牌牌
ArrayList<String> pai = new ArrayList<>();
//先把大小王放进去
pai.add("大王");
pai.add("小王");
// 创建两个数组 , 存储花色和序号 .
String[] huaSe = {"黑桃♠", "红桃♥", "梅花♣", "方片♦"};
String[] num = {"2", "A", "K", "Q", "J", "10", "9", "8", "7", "6", "5", "4", "3"};
// 循环嵌套两个数组 , 拼接牌
for (int i = 0; i < huaSe.length; i++) {
for (int j = 0; j < num.length; j++) {
// 把所有的牌 拼接之后 装进集合中
pai.add(huaSe[i] + num[j]);
}
}
// System.out.println(pai); 输出所有的牌
// 2 . 洗牌 - 把牌的顺序打乱 .
Collections.shuffle(pai);
return pai;
}
// 创建一个方法 , 进行发牌 和 看牌 .
public static void faPoKer() {
// 调用getPoker()方法拿到所有的牌
ArrayList<String> poKer = getPoKer();
// 创建四个集合 , 三个玩家和底牌
ArrayList<String> person01 = new ArrayList<>();
ArrayList<String> person02 = new ArrayList<>();
ArrayList<String> person03 = new ArrayList<>();
ArrayList<String> diPai = new ArrayList<>();
// 遍历集合 , 发牌 .
for (int i = 0; i < poKer.size(); i++) {
// 得到牌
String s = poKer.get(i);
if (i >= 51) { // 剩余的最后三张牌留下来作为底牌.
diPai.add(s);
} else if (i % 3 == 0) { // 按顺序依次把牌交给各个玩家.
person01.add(s);
} else if (i % 3 == 1) {
person02.add(s);
} else if (i % 3 == 2) {
person03.add(s);
}
}
// 输出集合 , 4.看牌 .
System.out.println("刘德华:" + person01);
System.out.println("周润发:" + person02);
System.out.println("周星驰:" + person03);
System.out.println("底牌:" + diPai);
}
}
运行结果如下:
可以看有序版本,通过牌的大小顺序来显示.
斗地主- -有序版本(通过Map集合编写)