斗地主模拟(最终结果为控制台随机输出三个玩家和底牌的牌面)
分析:
输出结果:
public static void main(String[] args) {
// ------------------------- 创建扑克牌 ----------------------------------------
// 编号与牌面映射
Map<Integer, String> pokerMap = new HashMap<>();
// 存入编号,用于后面的打乱顺序
List<Integer> numberList = new ArrayList<>();
// 大小王最大,编号最小
pokerMap.put(0, "大王");
pokerMap.put(1, "小王");
numberList.add(0);
numberList.add(1);
String[] pokerNumbers = "2,A,K,Q,J,10,9,8,7,6,5,4,3".split(",");
String[] pokerTags = "♥-♦-♣-♠".split("-");
// 存入编号和牌面映射
int num = 2;
for (String pokerNumber : pokerNumbers) {
for (String pokerTag : pokerTags) {
pokerMap.put(num, pokerTag + pokerNumber);
numberList.add(num);
num++;
}
}
// ------------------------- 发牌 ----------------------------------------
// 乱序
Collections.shuffle(numberList);
// 三个玩家 和 底牌
Set<Integer> player1 = new TreeSet<>();
Set<Integer> player2 = new TreeSet<>();
Set<Integer> player3 = new TreeSet<>();
Set<Integer> bottom = new TreeSet<>();
// 先添加底牌
bottom.add(numberList.get(0));
bottom.add(numberList.get(1));
bottom.add(numberList.get(2));
for (int i = 3; i < numberList.size(); i++) {
if (i % 3 == 0) player1.add(numberList.get(i));
else if (i % 3 == 1) player2.add(numberList.get(i));
else player3.add(numberList.get(i));
}
// ------------------------- 看牌 ----------------------------------------
// 玩家和底牌
List<String> player1Poker = new ArrayList<>();
List<String> player2Poker = new ArrayList<>();
List<String> player3Poker = new ArrayList<>();
List<String> bottomPoker = new ArrayList<>();
// 在map映射中取牌面
for (Integer i : player1) {
String poker = pokerMap.get(i);
player1Poker.add(poker);
}
for (Integer i : player2) {
String poker = pokerMap.get(i);
player2Poker.add(poker);
}
for (Integer i : player3) {
String poker = pokerMap.get(i);
player3Poker.add(poker);
}
for (Integer i : bottom) {
String poker = pokerMap.get(i);
bottomPoker.add(poker);
}
System.out.println("玩家一:" + player1Poker);
System.out.println("玩家二:" + player3Poker);
System.out.println("玩家三:" + player2Poker);
System.out.println("底牌:" + bottom);
}