Map案例总结-斗地主案例

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);




    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值