package www.test1.com;
import java.util.*;
/**
* 思路:
* 存牌(HashMap)
* 存下标(ArrayList)
* 洗牌(洗下标)
* 发牌 (TreeSet,使得到手的牌有序)
* 看牌
*/
public class MapStudy {
public static void main(String[] args) {
// 扑克以键值对的形式保存在 HashMap 中
HashMap<Integer, String> pokerMap = new HashMap<Integer, String>();
// 发牌的时候发的是 HashMap 的“键”(扑克对应下标),后期到了用户手里再通过“键”取“指”
ArrayList<Integer> pokerList = new ArrayList<Integer>();
// 发到用户手上是排序后的“键”,所以用 TreeSet
TreeSet<Integer> pokerSet = new TreeSet<Integer>();
String[] color = {"♥", "♣", "♦", "♠"};
String[] poker = {"3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2"};
// 将54张扑克以键值对的形式存入 HashMap 中
int pokerSuffix = 0;
for (String poker_for : poker) {
for (String color_for : color) {
// 打印:♥3 ♣3 ♦3 ♠3...♥2 ♣2 ♦2 ♠2
pokerMap.put(pokerSuffix, color_for + poker_for);
// 将扑克下标存入 list,后期发牌使用
pokerList.add(pokerSuffix);
// 此时值是52
pokerSuffix++;
}
}
/**
* 还差大王小王,单独存入
* 打印 pokerMap: 0:♥3 1:♣3 2:♦3 3:♠3 。。。 51:♠2 52:queen 53:king
* 打印 pokerList:[0,1,2, ... 52,53]
*/
pokerMap.put(pokerSuffix,"queen");
pokerList.add(pokerSuffix++);
pokerMap.put(pokerSuffix,"king");
pokerList.add(pokerSuffix);
// 生成随机顺序的下标(即发牌)
Collections.shuffle(pokerList);
// 发到这三个人手里,使用 TreeSet 可以使其得到的【下标】能够自然排序
TreeSet<Integer> sunwukong = new TreeSet<Integer>();
TreeSet<Integer> tangsanzang = new TreeSet<Integer>();
TreeSet<Integer> zixia = new TreeSet<Integer>();
// 底牌
TreeSet<Integer> dipai = new TreeSet<Integer>();
// 发牌,每人一张,发的也是下标
int length = pokerList.size();
for(int x = 0;x<length;x++){
int n = pokerList.get(x);
// 最后三张牌留作底牌
if(x >= length - 3){
dipai.add(n);
// 三个人轮着发牌,每人一张,直到只剩下最后三张底牌
}else if(x % 3 == 0){
sunwukong.add(n);
}else if(x % 3 == 1){
tangsanzang.add(n);
}else if(x % 3 == 2){
zixia.add(n);
}
}
showPoker("suwukong:",sunwukong,pokerMap);
showPoker("tangsanzang:",tangsanzang,pokerMap);
showPoker("zixia:",zixia,pokerMap);
showPoker("dipai:",dipai,pokerMap);
// 测试存入 pokerMap 的牌
// Set<Integer> integers = pokerMap.keySet();
// for (int j : integers) {
// System.out.print(j+":"+pokerMap.get(j) + " ");
// }
}
// 看牌,根据牌的下标取出牌名
public static void showPoker(String name,TreeSet<Integer> set,HashMap<Integer,String> map){
System.out.print(name);
for(int m :set){
System.out.print(map.get(m)+" ");
}
System.out.println();
}
}
结果(每次刷新):
suwukong:♣3 ♥4 ♣4 ♠4 ♦5 ♣6 ♣7 ♦7 ♥8 ♣9 ♥10 ♦J ♦Q ♥K ♣K queen king
tangsanzang:♦3 ♦4 ♠5 ♥6 ♦6 ♥7 ♠7 ♥9 ♥J ♠J ♣Q ♠Q ♥A ♦A ♣2 ♦2 ♠2
zixia:♥3 ♠3 ♥5 ♣5 ♠6 ♣8 ♦8 ♠8 ♦9 ♠9 ♣10 ♦10 ♠10 ♥Q ♠K ♠A ♥2
dipai:♣J ♦K ♣A
Java 存牌洗牌发牌看牌
于 2022-03-04 09:57:49 首次发布