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

来源:互联网 发布:直播源码 诱导充值 编辑:程序博客网 时间:2024/05/18 03:21

模拟斗地主洗牌和发牌,,并对牌进行排序,具体规则: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();    }}

这里写图片描述