斗地主实例 --- HashMap实例应用
前言:
在学习单列集合的时候做过一版,无序的 斗地主实例。那个主要是应用,单列集合来实现。
这次学习了双列集合,所以还是那个斗地主实例,使用双列集合的HashMap来实现一下。
实现步骤:
重点:
1 HashMap<Integer,String> map=new HashMap<>();//综合应用
2 List colors = List.of(“♠”, “♥”, “♣”, “♦”);//花色
3List paiIndex = List.of(“2”, “A”, “K”, “Q”, “J”, “10”, “9”, “8”, “7”, “6”, “5”, “4”, “3”);//牌号
1 准备牌
//1 准备牌
HashMap<Integer,String> map=new HashMap<>();//存放装好的牌
ArrayList<Integer> paiKey=new ArrayList<>();//用于打乱牌索引,打乱之后的集合
List<String> colors = List.of("♠", "♥", "♣", "♦");//花色
List<String> paiIndex = List.of("2", "A", "K", "Q", "J", "10", "9", "8", "7", "6", "5", "4", "3");//牌号
//用于记录牌的索引(HashMap的key)
int i=0;
//添加两张特殊牌
map.put(i++,"大王");
map.put(i++,"小王");
//组织牌,遍历两个集合进行组装
for (String index : paiIndex) {
for (String color : colors) {
String cp=color+index;//对52张牌进行组织
map.put(i++,cp);
}
}
2 洗牌
//洗牌,对hashMap的key进行打乱
Set<Integer> keySet = map.keySet();//获取hashMap的key,以集合形式返回
for (Integer key : keySet) { //把Set集合中的key,存到List集合中
paiKey.add(key);
}
//打乱牌的索引
Collections.shuffle(paiKey);
3发牌
轮流发牌公式:
集合索引%3 =0是第一个玩家,等于1是第二个玩家,等于2是第三个玩家。
//发牌
ArrayList<Integer> dipai=new ArrayList<>();//底牌
ArrayList<Integer> play1=new ArrayList<>();//玩家1
ArrayList<Integer> play2=new ArrayList<>();//玩家2
ArrayList<Integer> play3=new ArrayList<>();//玩家3
//遍历paikey集合
for (int index = 0; index < paiKey.size(); index++) {
//获取每一个牌的索引
Integer in = paiKey.get(index);
//判断是否只剩底牌
if(index>=51){
dipai.add(in);
}else {
if(index%3==0){
//给第一位玩家
play1.add(in);
}else if(index%3==1){
//给第二位玩家
play2.add(in);
}else if(index%3==2){
//给第三位玩家
play3.add(in);
}
}
}
4 排序
//排序
Collections.sort(play1);
Collections.sort(play2);
Collections.sort(play3);
Collections.sort(dipai);
5 看牌
//底牌
System.out.println("底牌是:");
showPaike(map,dipai);
System.out.println();
System.out.println("------------------------------------");
//玩家一
System.out.println("玩家一");
showPaike(map,play1);
System.out.println();
System.out.println("------------------------------------");
//玩家二
System.out.println("玩家二");
showPaike(map,play2);
System.out.println();
System.out.println("------------------------------------");
//玩家三
System.out.println("玩家三");
showPaike(map,play3);
看牌的方法(公共方法)
private static void showPaike(HashMap<Integer,String> poker,ArrayList<Integer> list){
for (Integer integer : list) {
String s = poker.get(integer);
System.out.print(s+"");
}
}
6结果
总结:
这次比上一次多了一个给玩家牌排序的步骤,(默认按照升序排序,真对HashMap的key)。
目前暂时只实现了发牌,下一步就是逐渐的实现发牌之后的步骤,敬请期待!
欢迎访问csdn的博客:
https://blog.csdn.net/kangshihang1998?spm=1010.2135.3001.5343