Java基础进阶笔记 - Day04 - 第四章 模拟斗地主升级之排序
Java基础进阶笔记 - Day04 - 第四章 模拟斗地主升级之排序
系统:Win10
JDK:1.8.0_121
IDE:IntelliJ IDEA 2017.3.7
4.1 案例介绍
按照斗地主的规则,完成洗牌发牌的动作
具体规则:
- 组装54张扑克牌
- 将54张牌顺序打乱
- 给三位玩家轮流发牌,每人17张,最后三张作为底牌
- 将大家的牌按大小顺序排好
- 看牌
规则:手中扑克牌需要从大到小的摆放顺序:大王,小王,2,A,K,Q,J,10,9,8,7,6,5,4,3
4.2 案例需求分析
- 准备牌
用Map集合存储牌,key存储牌的序号,value存储牌,按牌从大到小存储进去。同时使用一个List集合来存储牌的序号,用于打乱牌的序号和取牌 - 洗牌
将存储牌序号的List集合内的顺序打乱 - 发牌
将三个玩家的牌的序号存储到List集合中,最后三张牌的序号也存储到list集合中 - 排序
将玩家和底牌的牌顺序排一下序 - 看牌
通过玩家和底牌的排序号,找到对应的牌,打印出来即可
4.3 代码实现
public class DouDiZhu {
public static void main(String[] args) {
// 1.准备牌
HashMap<Integer, String> poker = new HashMap<>(); // 用于存储牌的序号和牌
List<Integer> pokerIndex = new ArrayList<>(); // 用于存储牌的序号
List<String> colors = getColors(); // 获取花色
List<String> numbers = getNumbers(); // 获取牌号
int index = 0;
// 添加大王
poker.put(index, "大王");
pokerIndex.add(index);
index++;
// 添加小王
poker.put(index, "小王");
pokerIndex.add(index);
index++;
// 按牌从大到小添加进poker
for (String number : numbers) {
for (String color : colors) {
poker.put(index, color + number);
pokerIndex.add(index);
index++;
}
}
// System.out.println(poker);
// 2.洗牌
Collections.shuffle(pokerIndex);
// System.out.println(pokerIndex);
// 3.发牌
List<Integer> player01 = new ArrayList<>();
List<Integer> player02 = new ArrayList<>();
List<Integer> player03 = new ArrayList<>();
List<Integer> diPai = new ArrayList<>();
for (int i = 0; i < pokerIndex.size(); i++) {
Integer pokerNum = pokerIndex.get(i);
if (i >= 51) {
diPai.add(pokerNum);
} else if (i % 3 == 0) {
player01.add(pokerNum);
} else if (i % 3 == 1) {
player02.add(pokerNum);
} else if (i % 3 == 2) {
player03.add(pokerNum);
}
}
// 4.排序
Collections.sort(player01);
Collections.sort(player02);
Collections.sort(player03);
Collections.sort(diPai);
// 5.看牌
lookPoker("周润发", player01, poker);
lookPoker("刘德华", player02, poker);
lookPoker("周星驰", player03, poker);
lookPoker("底 牌", diPai, poker);
}
// 看牌的实现方法
private static void lookPoker(String name, List<Integer> list, HashMap<Integer, String> poker) {
System.out.print(name + ":");
for (Integer key : list) {
String value = poker.get(key);
System.out.print(value + " ");
}
System.out.println(""); // 打印完每个玩家的牌,转到下一行
}
// 获取存储牌号的List
private static List<String> getNumbers() {
List<String> list = new ArrayList<>();
list.add("2");
list.add("A");
list.add("K");
list.add("Q");
list.add("J");
list.add("10");
list.add("9");
list.add("8");
list.add("7");
list.add("6");
list.add("5");
list.add("4");
list.add("3");
return list;
}
// 获取存储花色的List
private static List<String> getColors() {
List<String> list = new ArrayList<>();
list.add("♠");
list.add("♥");
list.add("♣");
list.add("♦");
return list;
}
}
运行结果: