Map案例总结-斗地主案例
Map集合元素是成对存在,每个元素分为键和值两部分,合在一起则称“键值对”。
Map斗地主这个案例用HashMap集合将54张扑克牌存储,然后随机发放给3名玩家,并且留下底牌。我们需要做的则是:
①创建HashMap集合,范式为Integer和String,分别存储扑克牌序号和扑克牌数(以下简称牌序和牌数)。
②将HashMap集合中的键值对随机发放给3名玩家,并且保留底牌。**
创建HashMap集合很容易,那如何将54张扑克牌的花色和牌数存储至HashMap中,并且将集合打散呢?
解①:笔者先创建了两个ArrayList集合,分别存放花色(♥,♣,♦,♠)和牌数("A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K")。然后将花色集合和牌数集合相互搭配成功混合出52张带有花色且无一重复的扑克牌,然后将这份无一重复的扑克牌存入HashMap集合中,最后添加大小王至该集合中。
解②:这一步有两个重要步骤,分别是:将扑克牌打散,就是将HashMap集合打散,随机发放给3名玩家,并且保留底牌。随机发放这个功能需要调用Collections.shuffle()这个方法。但是该方法的变量不能为键值对,于是我们要提取HashMap集合中的键。这里笔者创建另一个Set集合,直接调用HashMap集合中的KeySet()方法即可将该集合中所有键获提取至Set集合中,接着继续创建ArrayList结婚将Set集合中的键全部提取到ArrayList集合中,再调用Collections.shuffle(ArrayList)方法即可实现随机键的功能。
接下来是发放给3名玩家并且保留底牌这个功能我们利用for循环遍历随机键中,将随机牌数发放给玩家,并且将最后3张牌保留为底牌即可。
上代码!!!!!
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Set;
/*HashMap玩斗地主游戏*/
public class PokerGame {
public static void main(String[] args) {
//创建poker集合
HashMap<Integer, String> pokerMap = new HashMap<>();
//创建花色
ArrayList<String> Colors = new ArrayList<>();
//将梅花,红桃,黑桃,方片
Colors.add("♣");
Colors.add("♥");
Colors.add("♦");
Colors.add("♠");
//创建牌数
ArrayList<String> Numbers = new ArrayList<>();
//将A~10添加到牌数中
Collections.addAll(Numbers, "A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K");
//将大小王,花色和牌数添加到pokerMap中
pokerMap.put(0, "大王");
pokerMap.put(1, "小王");
int count = 1;
for (String color : Colors) {
for (String number : Numbers) {
String strTemp = color + number;
pokerMap.put(++count, strTemp);
}
}
//System.out.println(pokerMap);
//将pokerMap中的牌序打乱要使用到Collections.shuffle方法,所以将pokerMap中的键值传到一个新的集合中
ArrayList<Integer> newNumbers = new ArrayList<>();
Set<Integer> setNubmber = pokerMap.keySet();//获取pokerMap中的键
newNumbers.addAll(setNubmber);
Collections.shuffle(newNumbers);//将集合打乱顺序
//System.out.println(newNumbers);
//分牌--------
//创建四个ArrayList集合,分别保存玩家牌和底牌
ArrayList<String> play1 = new ArrayList<>();
ArrayList<String> play2 = new ArrayList<>();
ArrayList<String> play3 = new ArrayList<>();
ArrayList<String> dipai = new ArrayList<>();
for (int i = 0; i < newNumbers.size(); i++) {
if (i >= 51) {
dipai.add(pokerMap.get(i));
} else if (i % 3 == 0) {
play1.add(pokerMap.get(i));
} else if (i % 3 == 1) {
play2.add(pokerMap.get(i));
} else {
play3.add(pokerMap.get(i));
}
}
System.out.println("1号玩家:"+play1);
System.out.println("2号玩家:"+play2);
System.out.println("3号玩家:"+play3);
System.out.println("底牌:"+dipai);
}
}