控制台游戏斗地主Java版(首版)

在论坛上看到有人用java写了个控制台游戏,但是有点bug,就在解决bug之余稍微优化了一下代码记录在这。时间关系目前第一版流程到了发牌看牌,后续有时间再继续开发抢地主和真正的斗地主。

import java.util.*;

public class PokerGame {
    private static  List<Integer> list;
    private static Map<Integer, String> pokers;
    private static  Map<Integer, Integer> pokerMap;
    private static String[] huase = {"梅花", "黑桃", "红桃", "方片"};
    private static  String[] shuzi = {"3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2"};
    private static Integer[] actualNumArr = {3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15};

    /**
     * 初始化
     */
    public static void init(){
        list = new ArrayList();
        pokers = new HashMap<>();
        pokerMap = new HashMap<>();
        int num = 0;
        for (String str : huase) {
            for (int i=0;i<shuzi.length;i++){
                String poke = str + shuzi[i];
                pokers.put(num, poke);
                list.add(num);
                if (i<13){
                    pokerMap.put(num,actualNumArr[i]);
                }
                num++;
            }
        }
        pokers.put(52, "小王");
        list.add(52);
        pokerMap.put(52,17);
        pokers.put(53, "大王");
        list.add(53);
        pokerMap.put(53,16);
    }
    public static void main(String[] args) {
        init();
        begin();
    }

    public static void begin(){
        //洗牌
        Collections.shuffle(list);
        List<Integer> xiaohua = new ArrayList<>();
        List<Integer> xiaohei = new ArrayList<>();
        List<Integer> xiaowang  = new ArrayList<>();
        List<Integer> dipai = new ArrayList<>();
        // 发牌
        for (int i =0; i < list.size();i++){
            Integer pokeNUM=list.get(i);
            if (i>=list.size()-3){
                dipai.add(pokeNUM);
            }else if (i%3==0){
                xiaohua.add(pokeNUM);
            }else if (i%3==1){
                xiaohei.add(pokeNUM);
            }else if (i%3==2){
                xiaowang.add(pokeNUM);
            }
        }
        System.out.println("小花:"+ lookAndSort(xiaohua));
        System.out.println("小黑:"+ lookAndSort(xiaohei));
        System.out.println("小王: "+lookAndSort(xiaowang));
        System.out.println("底牌:"+lookAndSort(dipai));
    }

    /**
     * 看牌及将牌按照从小到大排序
     * @param nums
     * @return
     */
    private static String lookAndSort(List<Integer> nums){
        Map<Integer,Integer> pokerMap = numsToMap(nums);
        List<Integer> sortList = sort(pokerMap);
        StringBuilder sb = new StringBuilder();
        for (Integer num :sortList){
            String poker= pokers.get(num);
            sb.append(poker+" ");
        }
        String str = sb.toString();
        return str.trim();
    }

    /**
     * 根据得到的牌索引集合获取每个索引实际的牌面
     * @param nums
     * @return
     */
    public static Map<Integer,Integer> numsToMap(List<Integer> nums){
        Map<Integer,Integer> map = new HashMap<>();
        for (Integer num : nums) {
            map.put(num,pokerMap.get(num));
        }
        return map;
    }

    /**
     * 按照牌面实际大小排序
     * @param map
     * @return
     */
    public static List<Integer> sort( Map<Integer,Integer> map){
        List<Integer> resList = new ArrayList<>();
        List<Map.Entry<Integer,Integer>> list = new ArrayList<Map.Entry<Integer,Integer>>(map.entrySet());
        Collections.sort(list, new Comparator<Map.Entry<Integer, Integer>>() {
            public int compare(Map.Entry<Integer, Integer> o1,
                               Map.Entry<Integer, Integer> o2) {
                return (o1.getValue() - o2.getValue());
            }
        });
        for (Map.Entry<Integer, Integer> integerIntegerEntry : list) {
            resList.add(integerIntegerEntry.getKey());
        }
        return resList;
    }
}
posted @ 2021-04-20 15:52  互联网-搬砖人  阅读(288)  评论(0编辑  收藏  举报