案例介绍
按照斗地主的规则,完成洗牌发牌的动作。
具体规则:
使用54张牌打乱顺序,三个玩家参与游戏,三人交替摸牌,每人17张牌,最后三张留作底牌。
案例分析
- 准备牌:
牌可以设计为一个ArrayList,每个字符串为一张牌。
每张牌由花色数字两部分组成,我们可以使用花色集合与数字集合嵌套迭代完成每张牌的组装。
牌由Collections类的shuffle方法进行随机排序。 - 发牌
将每个人以及底牌设计为ArrayList,将最后3张牌直接存放于底牌,剩余牌通过对3取模依次发牌。 - 看牌
直接打印每个集合。
代码实现
package 集合和泛型.斗地主案例;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
public class Poker {
public static void main(String[] args) {
/*
* 1: 准备牌操作
*/
ArrayList<String> pokerBox = new ArrayList<>();
ArrayList<String> colors = new ArrayList<>();
ArrayList<String> numbers = new ArrayList<>();
colors.add("♠");
colors.add("♥");
colors.add("♣");
colors.add("♦");
numbers.add("J");
numbers.add("Q");
numbers.add("K");
numbers.add("A");
for (int i = 2; i <= 10; i++) {
numbers.add(i+"");
}
// 装牌
pokerBox.add("小☠");
pokerBox.add("大☠");
for(String c:colors){
for(String n:numbers){
pokerBox.add(c+n);
}
}
// 洗牌
Collections.shuffle(pokerBox);
// 发牌
ArrayList<String> palyer1 = new ArrayList<>();
ArrayList<String> palyer2 = new ArrayList<>();
ArrayList<String> palyer3 = new ArrayList<>();
ArrayList<String> dipai = new ArrayList<>();
for (int i = 0; i < pokerBox.size() ; i++) {
String card = pokerBox.get(i);
if(i >= 51){
dipai.add(card);
}else {
if(i%3 == 0){
palyer1.add(card);
}else if(i%3 ==1){
palyer2.add(card);
}else{
palyer3.add(card);
}
}
}
// 看牌
System.out.println(palyer1);
System.out.println(palyer2);
System.out.println(palyer3);
System.out.println(dipai);
}
}