使用双列集合Map进行模拟斗地主发牌

Map集合存储的是键值对,是一种映射关系,其中键和值是一一对应的,且键不可以重复,而值就可以。

Map接口本身是无法新建对象的,只能利用其实现类,如HashMap,LinedHashMap,去新建对象。其中HashMap是无序,即存储和取出的顺序是不一样的,比如存储a b c d ,输出时可能是b d a c.

Map父接口的方法:

   public V put(K key, V value):  把指定的键与指定的值添加到Map集合中

   public V remove(Object key): 把指定的键 所对应的键值对元素 在Map集合中删除,返回被删除元素的值

   public V get(Object key)返回到指定键所映射的值,或null如果此映射包含该键的映射。

   public boolean containsKey(Object key) 判断集合中是否包含指定的键

现在我们就可以来进行模拟斗地主了,使用两个集合,一个是单列集合ArrayList,用来存储的是索引值;一个是双列集合即Map集合,其键存储索引值,和ArrayList一一对应,而value用来存储牌。

package day03;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;

public class map_doudizhu {

    public static void main(String[] args) {
//        map集合的键用来存储索引值,value用来存储牌
        HashMap<Integer, String> pocker = new HashMap<>();
//        再创建一个单列集合,用来存储索引值
        ArrayList<Integer> list = new ArrayList<>();
        int n=0;
        pocker.put(n,"大王");
        list.add(n);
        n++;
        pocker.put(n,"小王");
        list.add(n);
        String [] colors = new String[]{"♠","♣","♦","♥"};
        String [] numbers = new String[]{"2","A","K","Q","J","10","9","8","7","6","5","4","3"};
        for (String color : colors) {
            for (String number : numbers) {
                n++;
                pocker.put(n,color+number);
                list.add(n);
            }
        }
//        现在这副牌就已经准备好了,现在来洗牌,对索引值进行打乱
        Collections.shuffle(list);
//        发牌,这时创建三个玩家和一副底牌,创建的对象集合存储的是索引值
        ArrayList<Integer> player01 = new ArrayList<>();
        ArrayList<Integer> player02 = new ArrayList<>();
        ArrayList<Integer> player03 = new ArrayList<>();
        ArrayList<Integer> dipai = new ArrayList<>();
        for(int i=0;i<list.size();i++){
            Integer index = list.get(i);
            if(i>50){
                dipai.add(index);
            }else if(i%3==0){
                player01.add(index);
            }else if(i%3==1){
                player02.add(index);
            }else{
                player03.add(index);
            }
        }
//        牌已经发好,因为我们是按照索引值来取牌的,所以还可以利用这个单列集合的特点来 对牌进行排序,这里选升序
        Collections.sort(player01);
        Collections.sort(player02);
        Collections.sort(player03);
        Collections.sort(dipai);
//        接下来就是利用玩家们手里的索引值来取出map集合中对应的牌了,因为有四份牌,所以用一个函数
        fapai("热  巴",pocker,player01);
        fapai("周杰伦",pocker,player02);
        fapai("马思纯",pocker,player03);
        fapai("底  牌",pocker,dipai);
    }
    public static void fapai(String name,HashMap<Integer,String> map,ArrayList<Integer> list){
        System.out.print("玩家名称"+"("+name+"): ");
//        根据list集合中的索引值,取出map集合中对应的value即牌
        for (Integer keys : list) {
            String values = map.get(keys);
            System.out.print(values);
        }
        System.out.println();
    }
}

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值