s-day04-双列集合实现斗地主案例
This commit is contained in:
@@ -0,0 +1,91 @@
|
|||||||
|
package com.inmind.test07;
|
||||||
|
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
/*
|
||||||
|
按照斗地主的规则,完成洗牌发牌的动作。
|
||||||
|
|
||||||
|
具体规则:
|
||||||
|
组装54张扑克牌将
|
||||||
|
54张牌顺序打乱
|
||||||
|
三个玩家参与游戏,三人交替摸牌,每人17张牌,最后三张留作底牌。
|
||||||
|
查看三人各自手中的牌(按照牌的大小排序)、底牌
|
||||||
|
|
||||||
|
要求:使用双列集合实现
|
||||||
|
<Integer,String>:键为牌的序号(排序),值为牌的名称
|
||||||
|
可以通过键找值的方式,来排序后看牌
|
||||||
|
*/
|
||||||
|
public class Test14 {
|
||||||
|
public static void main(String[] args) {
|
||||||
|
//创建一个双列集合,键为牌的序号,值为牌名称
|
||||||
|
HashMap<Integer,String> pokers = new HashMap<>();
|
||||||
|
//组装牌
|
||||||
|
String[] nums = {"3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2"};
|
||||||
|
String[] colors = {"♦", "♣", "♥","♠" };
|
||||||
|
//1~54 对应54张牌,54张打乱
|
||||||
|
ArrayList<Integer> keys = new ArrayList<>();
|
||||||
|
int key = 1;
|
||||||
|
for (String num : nums) {
|
||||||
|
for (String color : colors) {
|
||||||
|
pokers.put(key, color + num);
|
||||||
|
keys.add(key++);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//大小王
|
||||||
|
pokers.put(key, "小王");
|
||||||
|
keys.add(key++);
|
||||||
|
pokers.put(key, "大王");
|
||||||
|
keys.add(key);
|
||||||
|
System.out.println(pokers);
|
||||||
|
System.out.println(keys);
|
||||||
|
//洗牌
|
||||||
|
Collections.shuffle(keys);
|
||||||
|
System.out.println( keys);
|
||||||
|
//创建4个集合(3个玩家和1个底牌)
|
||||||
|
//创建一个降序的比较器给TreeSet使用
|
||||||
|
Comparator<Integer> comparator = new Comparator<Integer>() {
|
||||||
|
@Override
|
||||||
|
public int compare(Integer o1, Integer o2) {
|
||||||
|
return o2-o1;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
TreeSet<Integer> player1 = new TreeSet<>(comparator);
|
||||||
|
TreeSet<Integer> player2 = new TreeSet<>(comparator);
|
||||||
|
TreeSet<Integer> player3 = new TreeSet<>(comparator);
|
||||||
|
TreeSet<Integer> dipai = new TreeSet<>(comparator);
|
||||||
|
/*
|
||||||
|
玩家1 0 3 6 %3 = 0
|
||||||
|
玩家2 1 4 7 %3 = 1
|
||||||
|
玩家3 2 5 8 %3 = 2
|
||||||
|
*/
|
||||||
|
for (int i = 0; i < keys.size(); i++) {
|
||||||
|
if (i >= 51) {
|
||||||
|
dipai.add(keys.get(i));
|
||||||
|
} else {
|
||||||
|
if (i % 3 == 0) {
|
||||||
|
player1.add(keys.get(i));
|
||||||
|
} else if (i % 3 == 1) {
|
||||||
|
player2.add(keys.get(i));
|
||||||
|
} else {
|
||||||
|
player3.add(keys.get(i));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//看牌
|
||||||
|
showPokers("玩家1", player1, pokers);
|
||||||
|
showPokers("玩家2", player2, pokers);
|
||||||
|
showPokers("玩家3", player3, pokers);
|
||||||
|
showPokers("底牌", dipai, pokers);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void showPokers(String name, TreeSet<Integer> pokerKeys, Map<Integer, String> pokers) {
|
||||||
|
String content = name + ":";
|
||||||
|
//遍历键值,双列集合中,键找值
|
||||||
|
for (Integer pokerKey : pokerKeys) {
|
||||||
|
content += pokers.get(pokerKey) + " ";
|
||||||
|
}
|
||||||
|
System.out.println(content);
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user