斗地主发牌主要分四个步骤:买牌,洗牌,发牌和看牌;
1.买牌
//1.买牌
//1.1 定义一个双列集合
Map<Integer, String> Pokers = new HashMap<>();
//1.2 定义一个单列集合
List<Integer> list = new ArrayList();
//1.3 具体买牌的动作
//通过循环嵌套,有数字,有花色,字符串的连接可以用+号
String[] colors = {"?", "?", "?", "?"};
String[] numbers = {"3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2"};
int num = 0;
for (String number : numbers) { //外循环,获取所有的花色
for (String color : colors) { //内循环,获取所有的数字
String poker = color + number;
//将牌的编号,具体的牌放在双列集合中
Pokers.put(num, poker);
//将牌的编号放到单列集合中
list.add(num);
//每添加一张牌,编号要自增1
num++;
}
}
//大小王
Pokers.put(num, "小王");
list.add(num++);
Pokers.put(num, "大王");
list.add(num);
//打印牌
System.out.println("所有的牌:" + Pokers);
System.out.println("所有的编号:" + list);
System.out.println(".............................");
2.洗牌
//2.洗牌
Collections.shuffle(list);
//System.out.println("洗牌之后的编号" + list);
3.发牌
//3.发牌
//先定义四个集合,三个玩家和地主的三张底牌
List<Integer> A = new ArrayList<>();
List<Integer> B = new ArrayList<>();
List<Integer> C = new ArrayList<>();
List<Integer> DP = new ArrayList<>();
//for循环,利用编号与3的模只有0,1,2分配给三个玩家,最后的三张牌留作底牌
for (int i = 0; i < list.size(); i++) {
Integer poker = list.get(i);
if (i >= list.size() - 3) {
DP.add(poker);
} else if (i % 3 == 0) {
A.add(poker);
} else if (i % 3 == 1) {
B.add(poker);
} else {
C.add(poker);
}
}
/*System.out.println("A:" + A);
System.out.println("B:" + B);
System.out.println("C:" + C);
System.out.println("DP:" + DP);*/
System.out.println("A:" + PrintPokers(A, Pokers));
System.out.println("B:" + PrintPokers(B, Pokers));
System.out.println("C:" + PrintPokers(C, Pokers));
System.out.println("DP:" + PrintPokers(DP, Pokers));
}
4.看牌
//4.看牌
/*
* 定义一个方法,先将编号按照升序排列,然后获得编号,在双列集合在找到对应的具体牌
* */
public static String PrintPokers(List<Integer> num, Map<Integer, String> poker) {
//先对编号升序排列
Collections.sort(num);
StringBuilder sb = new StringBuilder();
//遍历编号
for (Integer i : num) {
//根据编号找到具体的牌
String s = poker.get(i);
//将牌进行拼接
sb.append(s + " ");
}
//将拼接后的结果返回
String str = sb.toString();
//return str;
return str.trim();
|