Java集合斗地主案例升级版(新增看牌排序)

上一个斗地主案例是全是用ArrayList集合做的,ArrayList集合不能实现排序功能,现在刚学会Map集合,利用Map集合的键值对来实现排序功能非常方便。
大体思路是这样的:

  1. 先建立一个Map集合,key用来存放扑克牌的索引,value用来存54张扑克牌。
  2. 再建立一个ArrayList集合,专门用来存放索引,这个ArrayList集合非常关键,能否实现排序就是靠ArrayList集合里面存放的索引,索引也是从0-53,一共54个,这个ArrayList的索引最后当做Map集合的key来取出Map集合的value。
  3. 然后再对ArrayList集合进行打乱,用到了Collection接口中的shuffle方法。
  4. 打乱之后就是发牌,建立四个ArrayList集合,三个存放玩家的索引,一个存放底牌的索引。
  5. 最后输出Map集合中的值,建立一个方法lookpoker,分别用三个玩家和底牌的list集合中的索引来取出Map集合中相应的value,然后输出即可。事实上,Map集合中的值一直没有变,插入的时候什么样最后还是什么样,变得是list集合的索引,取出value的关键就是map.get(list里面的索引)。
    代码如下:
package cn.gather;

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

/**
 * 斗地主综合案例升级版(实现了看牌时排序功能)
 * 1.准备牌
 * 2.洗牌
 * 3.发牌
 * 4.看牌
 */
public class DouDiZhuT {
    public static void main(String[] args ){
        /**
         * 1.准备牌
         */
        //先建立两个数组用来存放花色和数字,然后再对他们进行合并,插入Map数组
        String[] colors ={"♥","♣","♦","♠"};
        String[] numbers = {"2","A","K","Q","J","10","9","8","7","6","5","4","3"};
        //建立一个Map数组,先存放大王和小王
        HashMap<Integer,String> map = new HashMap<>();
        //创建List集合对扑克牌进行洗牌,List集合里面放的是Map集合的索引
        ArrayList<Integer> list = new ArrayList<>();
        map.put(0,"大王");
        map.put(1,"小王");
        list.add(0);
        list.add(1);
        Integer k = 2;
        for (String i : numbers) {
            for (String j : colors) {
                map.put(k,j+i);
                list.add(k);
                k = k +1;
            }
        }
        //System.out.println(map);
        //System.out.println(list);
        /**
         * 2.洗牌
         */
        //对List集合进行乱序
        Collections.shuffle(list);
        //System.out.println(list);
        /**
         * 3.发牌
         */
        ArrayList<Integer> player01 = new ArrayList<>();
        ArrayList<Integer> player02 = new ArrayList<>();
        ArrayList<Integer> player03 = new ArrayList<>();
        ArrayList<Integer> dipai    = new ArrayList<>();

        //遍历List集合
        for (int i = 0; i < list.size(); i++) {
            Integer s = list.get(i);
            if (i>=51){
                dipai.add(s);
            }else if (i%3==0){
                player01.add(s);
            }else if(i%3==1){
                player02.add(s);
            }else if(i%3==2){
                player03.add(s);
            }
        }
        //排序
        Collections.sort(player01);
        Collections.sort(player02);
        Collections.sort(player03);
        Collections.sort(dipai);

        /**
         * 4.看牌
         */
        lookpoker("云长",map,player01);
        lookpoker("翼德",map,player02);
        lookpoker("玄德",map,player03);
        lookpoker("底牌",map,dipai);

    }

    /**
     *建立看牌的方法
     * @param name : 玩家姓名
     * @param map :存放扑克牌的Map集合
     * @param list :存放索引的List集合
     */
    public  static  void lookpoker(String name,HashMap<Integer,String> map,ArrayList<Integer> list){
        //输出姓名
        System.out.print(name + ": ");
        //遍历玩家或者底牌集合,获取索引
        for (Integer key : list) {
            String value = map.get(key);
            System.out.print(value + " ");
        }
        System.out.println();
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值