斗地主(双列),使用HashMap,ArrayList,只查看玩家和底牌,并排序

/*准备牌:
         * 完成数字与纸牌的映射关系,用map集合,完成一个数字与字符串纸牌的对应关系
         * 洗牌:
         * 通过数字完成洗牌collections.shuffle
         * 发牌:
         * 将每个玩家和底牌设计为ArrayList,将最后3张牌直接放到底牌list
         * 通过对3%依次发牌
         * 存放过程中要求数字大小与斗地主规则的大小对应
         * 将代表不同纸牌的数字分配给不同的玩家和底牌
         * 看牌:
         * 通过map集合找到对应字符展示
         * 通过查询纸牌与数字的对应关系,由数字转成纸牌字符串再进行展示
         */
        
        /*
         * 1组装54张扑克牌
         */
//        1.1创建map集合存储
        HashMap<Integer,String> pokerMap=new HashMap<Integer,String>();
//        1.2创建花色集合与数字集合
        ArrayList<String> colors=new ArrayList<String>();
        ArrayList<String> numbers=new ArrayList<String>();
//        1.3存储花色与数字
        Collections.addAll(colors, "♠","♥","♣","♦");
        Collections.addAll(numbers, "2","A","K","Q","J","10","9","8","7","6","5","4","3");
//        设置存储编号变量
        int count=1;
        pokerMap.put(count++, "大王");
        pokerMap.put(count++, "小王");
    
//        1.4创建牌存储到map集合
        for(String number:numbers) {
            for(String color:colors) {
                String card=color+number;
                pokerMap.put(count++, card);
            }
        }
//        将54张牌打乱
//        取出编号集合
        Set<Integer> numberSet=pokerMap.keySet();
//        因为要将编号打乱顺序,所以先转到list集合中
        ArrayList<Integer> numberList=new ArrayList<Integer>();
        numberList.addAll(numberSet);
//        打乱顺序
        Collections.shuffle(numberList);
        
//        完成3个玩家交替摸牌,每人17张,最后3张留作底牌
//        3.1发牌的编号
//        创建3个玩家编号集合和一个底牌编号集合
        ArrayList<Integer> numPlay1=new ArrayList<Integer>();
        ArrayList<Integer> numPlay2=new ArrayList<Integer>();
        ArrayList<Integer> numPlay3=new ArrayList<Integer>();
        ArrayList<Integer> numDipai=new ArrayList<Integer>();
//        3.2发牌的编号
        for(int i=0;i<numberList.size();i++) {
//            获取牌的编号
            Integer num=numberList.get(i);
//            发牌,留出底牌
            if(i>=51) {
                numDipai.add(num);
            }else {
                if(i%3==0) {
                    numPlay1.add(num);
                }else if(i%3==1) {
                    numPlay2.add(num);
                }else {
                    numPlay3.add(num);
                }
            }
        }
        
//        4查看3个玩家手中的牌(大小排序),底牌
//        4.1对手中编号进行排序
        Collections.sort(numPlay1);
        Collections.sort(numPlay2);
        Collections.sort(numPlay3);
        Collections.sort(numDipai);
//        4.2进行牌面转换
//        创建3个玩家牌面集合,和底牌牌面集合
        ArrayList<String> player1=new ArrayList<String>();
        ArrayList<String> player2=new ArrayList<String>();
        ArrayList<String> player3=new ArrayList<String>();
        ArrayList<String> dipai=new ArrayList<String>();
        
//        4.3转换,根据编号找到牌面,添加到对应的牌面集合中
        for(Integer i:numPlay1) {
            String card=pokerMap.get(i);
            player1.add(card);
        }
        for(Integer i:numPlay2) {
            String card=pokerMap.get(i);
            player2.add(card);
        }
        for(Integer i:numPlay3) {
            String card=pokerMap.get(i);
            player3.add(card);
        }
        for(Integer i:numDipai) {
            String card=pokerMap.get(i);
            dipai.add(card);
        }
//        4.5查看
        System.out.println("玩家1"+player1);
        System.out.println("玩家2"+player2);
        System.out.println("玩家3"+player3);
        System.out.println("底牌"+dipai);

 

posted @ 2021-07-21 17:02  静静奇女子  阅读(107)  评论(0)    收藏  举报