斗地主实例 --- HashMap实例应用
【摘要】
前言: 在学习单列集合的时候做过一版,无序的 斗地主实例。那个主要是应用,单列集合来实现。 这次学习了双列集合,所以还是那个斗地主实例,使用双列集合的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);
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
2 洗牌
//洗牌,对hashMap的key进行打乱
Set<Integer> keySet = map.keySet();//获取hashMap的key,以集合形式返回
for (Integer key : keySet) { //把Set集合中的key,存到List集合中
paiKey.add(key);
}
//打乱牌的索引
Collections.shuffle(paiKey);
- 1
- 2
- 3
- 4
- 5
- 6
- 7
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);
}
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
4 排序
//排序
Collections.sort(play1);
Collections.sort(play2);
Collections.sort(play3);
Collections.sort(dipai);
- 1
- 2
- 3
- 4
- 5
- 6
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);
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
看牌的方法(公共方法)
private static void showPaike(HashMap<Integer,String> poker,ArrayList<Integer> list){
for (Integer integer : list) {
String s = poker.get(integer);
System.out.print(s+"");
}
}
- 1
- 2
- 3
- 4
- 5
- 6
6结果
总结:
这次比上一次多了一个给玩家牌排序的步骤,(默认按照升序排序,真对HashMap的key)。
目前暂时只实现了发牌,下一步就是逐渐的实现发牌之后的步骤,敬请期待!
文章来源: kangshihang.blog.csdn.net,作者:康世行,版权归原作者所有,如需转载,请联系作者。
原文链接:kangshihang.blog.csdn.net/article/details/108507218
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)