具体规则:
1. 组装54张扑克牌将
2. 54张牌顺序打乱
3. 三个玩家参与游戏,三人交替摸牌,每人17张牌,最后三张留作底牌。
4. 查看三人各自手中的牌(按照牌的大小排序)、底牌
5. 手中扑克牌从大到小的摆放顺序:大王,小王,2,A,K,Q,J,10,9,8,7,6,5,4,3
import java.lang.reflect.Array;
import java.util.*;
public class Landlords {
public static void main(String[] args) {
// 1.造牌
// 1.1 创建一个扑克盒双列集合,用来存储扑克牌,和对应的索引 ,键为索引,值为牌面值
Map<Integer,String> pokes = new HashMap<>();
// 1.2 创建一个单列集合用来存储花色
ArrayList<String> colors = new ArrayList<>();
// 1.3 创建一个单列集合用来存储牌面值
ArrayList<String> numbers = new ArrayList<>();
// 1.4 给花色集合添加花色
colors.add("♠");
colors.add("♥");
colors.add("♣");
colors.add("♦");
// 1.5,给牌面值集合添加牌面值
numbers.add("2");
numbers.add("A");
numbers.add("K");
numbers.add("Q");
numbers.add("J");
int index = 0;
pokes.put(index++,"大王");
pokes.put(index++,"小王");
for (int i = 10; i>=3; i--) {
numbers.add(i+"");
}
// 1.6 循环嵌套遍历花色集合和牌面值集合,进行拼接得到扑克牌,并添加到扑克盒集合中
for (String number : numbers) {
for (String color : colors) {
String str = color+number;
pokes.put(index,str);
index++;
}
}
// 2.洗牌
// 2.1 获取扑克盒双列集合的所有键,也就是索引
System.out.println(pokes+"..."+index);
Set<Integer> indexs = pokes.keySet();
// 2.2 把Set集合转换为List集合
ArrayList<Integer> indexlist = new ArrayList<>();
indexlist.addAll(indexs);
System.out.println(indexlist);
// 2.2 随机打乱索引
Collections.shuffle(indexlist);
System.out.println(indexlist);
// 3.发牌
// 3.1.创建4个集合,分别用来存储3个玩家的索引和底牌的索引
ArrayList<Integer> index1 = new ArrayList<>();
ArrayList<Integer> index2 = new ArrayList<>();
ArrayList<Integer> index3 = new ArrayList<>();
ArrayList<Integer> indexdipai = new ArrayList<>();
// 3.2.按照规则发索引
for (int i = 0; i < indexlist.size(); i++) {
Integer indexpai = indexlist.get(i);
if (i >= indexlist.size()-3){ // 先发底牌
indexdipai.add(indexpai);
}else if (i%3==0){
index1.add(indexpai);
}else if (i%3==1){
index2.add(indexpai);
}else {
index3.add(indexpai);
}
}
// 3.3.对这4个存储索引的集合按照从小到大排序
Collections.sort(indexdipai);
Collections.sort(index1);
Collections.sort(index2);
Collections.sort(index3);
// 3.4.创建4个集合,分别用来存储3个玩家和底牌的牌面值
ArrayList<String> play1 = new ArrayList<>();
ArrayList<String> play2 = new ArrayList<>();
ArrayList<String> play3 = new ArrayList<>();
ArrayList<String> dipai = new ArrayList<>();
// 3.5.遍历排序之后的索引集合去扑克盒集合中取牌,然后添加到存储牌面值的4个结婚中
for (Integer i1 : indexdipai) {
dipai.add(pokes.get(i1));
}
for (Integer i2 : index1) {
play1.add(pokes.get(i2));
}
for (Integer i3 : index2) {
play2.add(pokes.get(i3));
}
for (Integer i4 : index3) {
play3.add(pokes.get(i4));
}
System.out.println(dipai);
System.out.println(play1);
System.out.println(play2);
System.out.println(play3);
}
}