java中用map实现斗地主基础版

模拟斗地主洗牌和发牌,,并对牌进行排序,具体规则:1.组装54张扑克牌2.将54张牌随机处理3.三个玩家(一个地主两个农民),三个人交替摸牌,每人17张牌,最后流三张底牌4.查看三个人各自查看手中的大小排序

  1. 方法1
public class TestHashMpa {
    /*
     * 初始化
     */
    public static Map<Integer, String> initialize(){
        Map<Integer, String> map = new HashMap<>();
        map.put(1, "黑桃3");
        map.put(5, "黑桃4");
        map.put(9, "黑桃5");
        map.put(13, "黑桃6");
        map.put(17, "黑桃7");
        map.put(21, "黑桃8");
        map.put(25, "黑桃9");
        map.put(29, "黑桃10");
        map.put(33, "黑桃J");
        map.put(37, "黑桃Q");
        map.put(41, "黑桃K");
        map.put(45, "黑桃A");
        map.put(49, "黑桃2");
        map.put(2, "方块3");
        map.put(6, "方块4");
        map.put(10, "方块5");
        map.put(14, "方块6");
        map.put(18, "方块7");
        map.put(22, "方块8");
        map.put(26, "方块9");
        map.put(30, "方块10");
        map.put(34, "方块J");
        map.put(38, "方块Q");
        map.put(42, "方块K");
        map.put(46, "方块A");
        map.put(50, "方块2");
        map.put(3, "红桃3");
        map.put(7, "红桃4");
        map.put(11, "红桃5");
        map.put(15, "红桃6");
        map.put(19, "红桃7");
        map.put(23, "红桃8");
        map.put(27, "红桃9");
        map.put(31, "红桃10");
        map.put(35, "红桃J");
        map.put(39, "红桃Q");
        map.put(43, "红桃K");
        map.put(47, "红桃A");
        map.put(51, "红桃2");
        map.put(4, "梅花3");
        map.put(8, "梅花4");
        map.put(12, "梅花5");
        map.put(16, "梅花6");
        map.put(20, "梅花7");
        map.put(24, "梅花8");
        map.put(28, "梅花9");
        map.put(32, "梅花10");
        map.put(36, "梅花J");
        map.put(40, "梅花Q");
        map.put(44, "梅花K");
        map.put(48, "梅花A");
        map.put(52, "梅花2");
        map.put(53,"小王");
        map.put(54,"大王");
        return map;     
    }
    /*
     * 产生1-54的数,判断是否是map中的键
     */
    public static int random(Map<Integer, String> map){
        int key=0;
        while(true){
             key=((int)(Math.random()*54)+1);
             if(map.containsKey(key)){
                 break;
             }
        }
        return key;
    }
    /*
     * 根据键倒序排序
     */
    public static Comparator<Integer> compartaor(){
        return new Comparator<Integer>() {

            @Override
            public int compare(Integer o1, Integer o2) {
                // TODO Auto-generated method stub
                return o2-o1;
            }
        };
    }
    public static void main(String[] args) {


        Map<Integer, String> map=initialize();

        TreeMap<Integer, String> dizhu=new TreeMap<>(compartaor());
        TreeMap<Integer, String> nongmin1=new TreeMap<>(compartaor());
        TreeMap<Integer, String> nongmin2=new TreeMap<>(compartaor());
        for(int i=1;i<=17;i++){
            int key=random(map);
            dizhu.put(key, map.get(key));
            map.remove(key);
            key=random(map);;
            nongmin1.put(key, map.get(key));
            map.remove(key);
            key=random(map);
            nongmin2.put(key, map.get(key));
            map.remove(key);            
        }
        for(Integer key:map.keySet()){
            dizhu.put(key, map.get(key));
        }
        System.out.println("地主的牌为:");
        System.out.println(dizhu.values());
        System.out.println("农民1的牌为:");
        System.out.println(nongmin1.values());
        System.out.println("农民2的牌为:");
        System.out.println(nongmin2.values());
    }
}

这里写图片描述

2.方法二

public class DudiDemo {

    public static void main(String[] args) {

        //创建Map集合组合牌,key编号,value是牌(花色+数字)
        HashMap<Integer, String> mapPooker=new HashMap<>();
        //创建List集合存储编号
        ArrayList<Integer> listPookerNum=new ArrayList<>();
        //创建花色数组
        String[] colors={"♠","♥","♦","♣"};
        //创建电视数组
        String[] numbers={"2","A","K","Q","J","10","9","8","7","6","5","4","3"};
        //拼接扑克牌
        int index=0;
        mapPooker.put(index, "大王");
        listPookerNum.add(index);
        index++;
        mapPooker.put(index, "小王");
        listPookerNum.add(index);
        index++;
        for(String strNum:numbers){
            for(String strColors:colors){
                mapPooker.put(index, strColors+strNum);
                listPookerNum.add(index);//对key进行随机排序====》洗牌
                index++;
            }           
        }

        //随机洗牌
        Collections.shuffle(listPookerNum);
        //发牌并且排序
        TreeSet<Integer> play1=new TreeSet<>();
        TreeSet<Integer> play2=new TreeSet<>();
        TreeSet<Integer> play3=new TreeSet<>();
        //存放底牌
        TreeSet<Integer> buttomNum=new TreeSet<>();
        for(int i=0;i<listPookerNum.size();i++){
            //先拿出三张底牌
            if(i<3){
                buttomNum.add(listPookerNum.get(i));
            }else if(i%3==0){
                play1.add(listPookerNum.get(i));
            }else if(i%3==1){
                play2.add(listPookerNum.get(i));
            }else if(i%3==2){
                play3.add(listPookerNum.get(i));
            }
        }
        //看牌
        /*
         * 需要指定地主(name)
         * 指定那一份牌发给地主
         * 地主看牌
         */
        lookPookers("底牌",buttomNum,mapPooker);
        lookPookers("农民1",play1,mapPooker);
        lookPookers("农民2",play2,mapPooker);
        //把底牌放入地主牌中
        for(Integer num:buttomNum){
            play3.add(num);
        }
        lookPookers("地主",play3,mapPooker);

    }
    //打印牌
    public static void lookPookers(String name,TreeSet<Integer> play,HashMap<Integer, String> pooker){
        System.out.print(name+":");
        for(Integer key:play){
            String value=pooker.get(key);
            System.out.print(value+" ");
        }
        System.out.println();
    }

}

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值