需求
使用集合模拟斗地主洗牌发牌:
准备一个集合来存放花色
准备一个集合来存放点数 2-10 JQKA
准备一个集合来存放这拼好的52张牌
单独插进去大小王 JOKER joker
打乱顺序之后标记一张牌
从底部抽三张
验证一下玩家的人数 3
每个玩家的手牌抽象为一个集合
发牌,检查标记牌在哪个集合中
补发到对应的集合里 20 17 17
按照牌点数和花色排个序,输出
话不多说直接上代码
package 斗地主洗牌发牌;
import java.util.*;
import java.util.Map.Entry;
//斗地主洗牌发牌
public class Landlords2 {
// 无参构造器
public Landlords2() {
// 创建一个集合存放花色
List<String> flowerColor = new ArrayList<>();
flowerColor.add("♠");
flowerColor.add("♥");
flowerColor.add("♣");
flowerColor.add("♦");
// 创建一个集合存放点数
List<String> count = new ArrayList<>();
count.add("2");
count.add("A");
count.add("K");
count.add("Q");
count.add("J");
count.add("10");
count.add("9");
count.add("8");
count.add("7");
count.add("6");
count.add("5");
count.add("4");
count.add("3");
// 创建一个map集合用来存放54张牌
Map<Integer, String> cards = new HashMap<>();
cards.put(0, "JOKER");
cards.put(1, "joker");
int temp = 2;
for (int i = 0; i < count.size(); i++) {
for (int j = 0; j < flowerColor.size(); j++) {
cards.put(temp++, flowerColor.get(j) + count.get(i));
}
}
Set<Entry<Integer, String>> entrySet = cards.entrySet();
// 创建一个新的list存放map的key
List<Integer> num = new ArrayList<>();
for (int i = 0; i < cards.size(); i++) {
num.add(i);
}
// 打乱list中的顺序
Collections.shuffle(num);
// 随机标记一张牌(不能是第一张,也不能是最后三张)
Random r = new Random();
int dzp = r.nextInt(50 + 1);
// 抽出最后三张牌放在一个新的list中
List<Integer> threeCards = new ArrayList<>();
threeCards.add(num.get(51));
threeCards.add(num.get(52));
threeCards.add(num.get(53));
List<String> three = new ArrayList<>();
for (Integer key : threeCards) {
three.add(cards.get(key));
}
// 三个玩家的牌分别创建新的list
List<Integer> player1 = new ArrayList<>();
List<Integer> player2 = new ArrayList<>();
List<Integer> player3 = new ArrayList<>();
// 遍历num模拟发牌
for (int i = 0; i < num.size() - 3; i += 3) {
player1.add(num.get(i));
player2.add(num.get(i + 1));
player3.add(num.get(i + 2));
}
// 确定地主牌在哪个玩家手里(并加入三张底牌)
if (player1.contains(dzp)) {
player1.addAll(threeCards);
System.out.println("玩家1为地主 底牌为" + three);
} else if (player2.contains(dzp)) {
player2.addAll(threeCards);
System.out.println("玩家2为地主 底牌为" + three);
} else if (player3.contains(dzp)) {
player3.addAll(threeCards);
System.out.println("玩家3为地主 底牌为" + three);
}
//三个玩家整理牌(排序)
Collections.sort(player1);
Collections.sort(player2);
Collections.sort(player3);
//再创建三个list来显示玩家排序好的牌
List<String> splayer1 = new ArrayList<>();
List<String> splayer2 = new ArrayList<>();
List<String> splayer3 = new ArrayList<>();
for (Integer key : player1) {
splayer1.add(cards.get(key));
}
for (Integer key : player2) {
splayer2.add(cards.get(key));
}
for (Integer key : player3) {
splayer3.add(cards.get(key));
}
System.out.println("玩家1 : " + splayer1);
System.out.println("玩家2 : " + splayer2);
System.out.println("玩家3 : " + splayer3);
}
//程序主入口
public static void main(String[] args) {
new Landlords2();
}
}
运行结果: