斗地主排序版
原理图解:
/*
案例演示:
模拟斗地主洗牌和发牌看牌,牌有序
一副牌 54 张牌
*/
public class Landlord{
public static void main(String[] args) {
//创建牌盒
HashMap<Integer, String> hm = new HashMap<>();
//创建索引集合
ArrayList<Integer> indexs = new ArrayList<>();
//花色 和 序号
String[] colors = {"♣", "♥", "♦", "♠"};
String[] nums = {"A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"};
int index = 0;
for (String num : nums) {
for (String color : colors) {
hm.put(index, num.concat(color));
indexs.add(index);
index++;
}
}
hm.put(index, "大鬼");
indexs.add(index);
index++;
hm.put(index, "小鬼");
indexs.add(index);
//System.out.println(hm);
//System.out.println(indexs);
//洗牌
Collections.shuffle(indexs);
//发牌
TreeSet<Integer> 星仔 = new TreeSet<Integer>();
TreeSet<Integer> 刀仔 = new TreeSet<Integer>();
TreeSet<Integer> 高进 = new TreeSet<Integer>();
TreeSet<Integer> 底牌 = new TreeSet<Integer>();
//斗地主3个人 留一副底牌
//发牌:一人一张轮流张发
// 一次数好发给你
// 星仔 = pokerBox.subList(0, 17);
//发牌:一人一张轮流发
//星仔:0 3 6 9 12 取余 0
//刀仔: 1 4 7 10 13 取余 1
//高进: 2 5 8 11 14 取余 2
for (int i = 0; i < indexs.size(); i++) {
if (i >= indexs.size() - 3) {
底牌.add(indexs.get(i));
} else if (i % 3 == 0) {
星仔.add(indexs.get(i));
} else if (i % 3 == 1) {
刀仔.add(indexs.get(i));
} else {
高进.add(indexs.get(i));
}
}
//看牌,键找值
lookPoker("星仔", 星仔, hm);
lookPoker("刀仔", 刀仔, hm);
lookPoker("高进", 高进, hm);
lookPoker("底牌", 底牌, hm);
}
private static void lookPoker(String name, TreeSet<Integer> set, HashMap<Integer, String> hm) {
System.out.println(name);
for (Integer key : set) {
System.out.print(hm.get(key) + " ");
}
System.out.println();
}
}