美文网首页
斗地主发牌

斗地主发牌

作者: 小熊先生很不开心 | 来源:发表于2018-01-31 14:30 被阅读21次

  模拟斗地主发牌。斗地主游戏中,有4个角色,2个农民1个地主,还有1个是底牌。现在需要模拟斗地主发牌。
也就是说,把17张扑克牌发给1个农民,把17张发给第2个农民,17张发给地主,最后3张作为底牌。
例如:
农民1:方块8, 梅花10,红桃4,。。。。黑桃K,小王
农民2:梅花Q, 方块7,红桃4,。。。。红桃K,梅花6
地主: 方块3, 梅花4,红桃4,。。。。黑桃2,红桃10
底牌: 梅花2, 梅花A,方块J

加强版 把牌进行排序

//斗地主加强版(排序版)
public class Map_Collection_Demo {
    public static void main(String[] args) {
        // 先做出一副扑克牌的映射表.
        // 为了便于排序,需要定义HashMap<Integer,String>()
        // Integer作为key,用于排序.
        HashMap<Integer, String> map = new HashMap<Integer, String>();
        // 然后接着做牌的集合.
        // 做出数字集合和花色集合.然后嵌套循环.
        ArrayList<String> nums = new ArrayList<String>();
        for (int i = 3; i <= 10; i++) {
            String num = i + "";
            nums.add(num);
        }
        Collections.addAll(nums, "J", "Q", "K", "A", "2");
        ArrayList<String> colors = new ArrayList<String>();
        Collections.addAll(colors, "?", "?", "?", "?");
        int x = 0;
        for (int i = 0; i < nums.size(); i++) {
            for (int j = 0; j < colors.size(); j++) {
                map.put(x, (nums.get(i) + colors.get(j)));
                x++;
            }
        }
        map.put(x++, "小王");
        map.put(x, "大王");
        // System.out.println(map);
        // 准备一副数字牌,发给每个玩家.
        ArrayList<Integer> pokers = new ArrayList<Integer>();
        for (int i = 0; i < 54; i++) {
            pokers.add(i);
        }
        // 打乱数字排序.然后发给玩家
        Collections.shuffle(pokers);
        // 创建三个玩家对象的集合和一个底牌的集合.遍历pokers数组分配元素给玩家和底牌
        // 注意,此时的pokers里面的元素都只是代表牌的数字只是Key,还要从map里面遍历得到真正的牌
        ArrayList<Integer> player1 = new ArrayList<Integer>();
        ArrayList<Integer> player2 = new ArrayList<Integer>();
        ArrayList<Integer> player3 = new ArrayList<Integer>();
        ArrayList<Integer> base = new ArrayList<Integer>();
        for (int i = 0; i < pokers.size(); i++) {
            Integer integer = pokers.get(i);
            if (i >= (pokers.size() - 3)) {
                base.add(integer);
            } else {
                if (i % 3 == 0) {
                    player1.add(integer);
                } else if (i % 3 == 1) {
                    player2.add(integer);
                } else {
                    player3.add(integer);
                }
            }
        }
        // 给玩家的牌进行重新排序
        Collections.sort(player1);
        Collections.sort(player2);
        Collections.sort(player3);
        Collections.sort(base);

        System.out.print("player1 : ");
        for (int i = 0; i < player1.size(); i++) {
            System.out.print(map.get(player1.get(i)) + "\t");
        }
        System.out.println();
        System.out.print("player2 : ");
        for (int i = 0; i < player2.size(); i++) {
            System.out.print(map.get(player2.get(i)) + "\t");
        }
        System.out.println();
        System.out.print("player3 : ");
        for (int i = 0; i < player3.size(); i++) {
            System.out.print(map.get(player3.get(i)) + "\t");
        }
        System.out.println();
        System.out.print("base is : ");
        for (int i = 0; i < base.size(); i++) {
            System.out.print(map.get(base.get(i)) + "\t");
        }
        System.out.println();
        Random r = new Random();
        int number = r.nextInt(3) + 1;
        System.out.println("本轮地主是player" + number);
    }
}


相关文章

网友评论

      本文标题:斗地主发牌

      本文链接:https://www.haomeiwen.com/subject/lrokzxtx.html