题目描述
按照斗地主的规则,完成洗牌发牌的动作。
具体规则:
使用54张牌打乱顺序,三个玩家参与游戏,三人交替摸牌,每人17张牌,最后三张留作底牌。
案例分析
-
准备牌
牌可以设计为一个ArrayList<String>,每个字符串为一张牌。
每张牌由花色数字两部分组成,我们可以使用花色集合与数字集合嵌套迭代完成每张牌的组装。 -
洗牌
牌由Collections类的shuffle方法进行随机排序。 -
发牌
将每个人以及底牌设计为ArrayList<String>,将最后3张牌直接存放于底牌,剩余牌通过对3取模依次发牌。 -
看牌
直接打印每个集合。
代码
import java.util.ArrayList;
import java.util.Collections;
public class DouDiZhu {
public static void main(String[] args) {
//1、准备牌
//定义一个存储54张牌的ArrayList集合,泛型使用String
ArrayList<String> poker = new ArrayList<>();
//定义两个数组,一个存储牌的花色,一个存储牌的序号
String[] colors = {"♠", "♣", "♥", "♦"};
String[] numbers = {"3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2"};
//先把大王和小王存储到poker集合中
poker.add("大王");
poker.add("小王");
//循环嵌套遍历两个数组,组装52张牌
for(String number : numbers) {
for(String color : colors) {
//System.out.println(number + color);
//把组装好的牌存储到poker集合中
poker.add(color + number);
}
}
//System.out.println(poker);
//洗牌
Collections.shuffle(poker);
//System.out.println(poker);
//发牌
ArrayList<String> player1 = new ArrayList<>();
ArrayList<String> player2 = new ArrayList<>();
ArrayList<String> player3 = new ArrayList<>();
ArrayList<String> diPai = new ArrayList<>();
/*
遍历poker集合,获取每一张牌
使用poker集合的索引%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) {
//给玩家1发牌
player1.add(p);
}
else if(i % 3 == 1) {
//给玩家2发牌
player2.add(p);
}
else if(i % 3 == 2) {
//给玩家3发牌
player3.add(p);
}
}
//看牌
System.out.println("张三:" + player1);
System.out.println("李四:" + player2);
System.out.println("王五:" + player3);
System.out.println("底牌:" + diPai);
}
}