模拟三人斗地主
* 1.创建一副牌
* 注意:拼接出来的牌 要跟索引一样 从小到大
* 2.洗牌(洗索引) 需要一个list 并且 list保存的是 索引
* 3.发牌(发索引)
* 4.看牌(看牌的时候需要排序)(用发到手里的索引 去取牌)
*
* 3 4 5 6 7 8 9 10 J Q K A 2
* ♠️ ❤️ ♦️ ♣
public class Demo05 {
public static void main(String[] args) {
// 创建一个map 保存Kay=索引 value=牌的字符串
HashMap<Integer, String> pai = new HashMap<>();
// 声明一个索引
int index = 0;
// 声明一个list保存索引
ArrayList<Integer> list = new ArrayList<>();
// 拼接牌
String[] s1 = {"3","4","5","6","7","8","9","10","J","Q","K","A","2"};
String[] s2 = {"♥","♠","♣","♦"};
for (int i = 0; i < s1.length; i++) {
for (int j = 0; j < s2.length; j++) {
// 拼接字符串
String string = s2[j] + s1[i];
// 存入牌中
pai.put(index, string);
// 保存把索引保存进list中
list.add(index);
// 让索引 + 1
index++;
}
}
// 单独添加大小王
pai.put(index, "小王");
// 单独把索引 添加到list中
list.add(index);
index++;
pai.put(index, "大王");
list.add(index);
// 洗牌就是洗索引
// 该方法可以随机交换 集合中的元素
Collections.shuffle(list);
// 发牌 就是 发索引
// 创建4个TreeSet(可以对索引进行排序)
TreeSet<Integer> t1 = new TreeSet<>();
TreeSet<Integer> t2 = new TreeSet<>();
TreeSet<Integer> t3 = new TreeSet<>();
TreeSet<Integer> dipai = new TreeSet<>();
// 把每一个索引取出来 分发给这4个人
// 遍历装有索引的list
for (int i = 0; i < list.size(); i++) {
// 把每一个索引取出来
int num = list.get(i);
// 留三张 当底牌
if (i>=list.size()-3) {
// 把底牌的索引放入 底牌的集合中
dipai.add(num);
}else if(i % 3== 0){
t1.add(num);
}else if (i % 3== 1) {
t2.add(num);
}else if (i % 3== 2) {
t3.add(num);
}
}
//看4次牌(这里可以封装一个看牌的方法)
kanpai(pai, t1, "发");
kanpai(pai, t2, "高");
kanpai(pai, t3, "何");
kanpai(pai, dipai, "底牌");
}
// 看牌方法(牌/每个人索引/人名)
public static void kanpai(HashMap<Integer, String> pai,TreeSet<Integer> t,String name) {
System.out.println(name + " : ");
// z在map中 用 key 取出对应 value
// 索引 取出 牌
for (Integer key : t) {
// 用索引 从 map 找出对应的牌
String value = pai.get(key);
System.out.print(value + " ");
}
// 换行
System.out.println();
}
}