斗地主模拟java源码

方法一:

方法一:发出的牌随机排序没有使用
public static void main(String[] args) {
faPoKer();

}

// 创建一个方法 , 获取 所有的牌 , 并将顺序打乱 .
public static ArrayList<String> getPoKer() {
    // 1. 准备牌
    //定义一个集合,存储54张牌牌
    ArrayList<String> pai = new ArrayList<>();

    //先把大小王放进去
    pai.add("大王");
    pai.add("小王");

    // 创建两个数组 , 存储花色和序号 .
    String[] huaSe = {"黑桃♠", "红桃♥", "梅花♣", "方片♦"};
    String[] num = {"2", "A", "K", "Q", "J", "10", "9", "8", "7", "6", "5", "4", "3"};

    // 循环嵌套两个数组 , 拼接牌
    for (int i = 0; i < huaSe.length; i++) {
        for (int j = 0; j < num.length; j++) {
            // 把所有的牌 拼接之后 装进集合中
            pai.add(huaSe[i] + num[j]);
        }
    }
    // System.out.println(pai);  输出所有的牌
    // 2 . 洗牌 - 把牌的顺序打乱 .
    Collections.shuffle(pai);
    return pai;
}

// 创建一个方法 , 进行发牌 和 看牌 .
public static void faPoKer() {
    // 调用getPoker()方法拿到所有的牌
    List<String> poKer = getPoKer();
    // 创建四个集合 , 三个玩家和底牌
    List<String> person01 = new ArrayList<>();
    List<String> person02 = new ArrayList<>();
    List<String> person03 = new ArrayList<>();
    List<String> diPai = new ArrayList<>();

    // 遍历集合 , 发牌 .
    for (int i = 0; i < poKer.size(); i++) {
        // 得到牌
        String s = poKer.get(i);
        if (i >= 51) {  // 剩余的最后三张牌留下来作为底牌.
            diPai.add(s);
        } else if (i % 3 == 0) {   // 按顺序依次把牌交给各个玩家.
            person01.add(s);
        } else if (i % 3 == 1) {
            person02.add(s);
        } else if (i % 3 == 2) {
            person03.add(s);
        }
    }

    // 输出集合 , 4.看牌 .
    System.out.println("张三:" + person01);
    System.out.println("李四:" + person02);
    System.out.println("赵五:" + person03);
    System.out.println("底牌:" + diPai);

方法二:

使用map 双列集合,将key值用数表示,然后通过比较key值进行排序。比较而言map的功能比list强大但是使用复杂一点
public static void main(String[] args) {
fapai();
}

private static void fapai() {
Map<Integer, String> pai = new HashMap<>();

    int count = 1;
    //先把大小王放进去
    pai.put(count++, "大王");
    pai.put(count++, "小王");

    //创建集合存储花色和牌的数
    List<String> huaSe = new ArrayList<>();
    List<String> num = new ArrayList<>();

    Collections.addAll(huaSe, "黑桃♠", "红桃♥", "梅花♣", "方片♦");
    Collections.addAll(num, "2", "A", "K", "Q", "J", "10", "9", "8", "7", "6", "5", "4", "3");

//强循环遍历
for (String n : num) {
for (String h : huaSe) {
String card=h+n;
pai.put(count++, card);
}
}

    Set<Integer> set = pai.keySet();
    List<Integer> list = new ArrayList<>();
    list.addAll(set);
    Collections.shuffle(list);

    // 创建四个集合 , 三个玩家和底牌
    List<Integer> person01 = new ArrayList<>();
    List<Integer> person02 = new ArrayList<>();
    List<Integer> person03 = new ArrayList<>();
    List<Integer> diPai = new ArrayList<>();

    // 遍历集合 , 发牌 .
    for (int i = 0; i < pai.size(); i++) {
        // 得到牌

        if (i >= 51) {  // 剩余的最后三张牌留下来作为底牌.
            diPai.add(list.get(i));
        } else if (i % 3 == 0) {   // 按顺序依次把牌交给各个玩家.
            person01.add(list.get(i));
        } else if (i % 3 == 1) {
            person02.add(list.get(i));
        } else if (i % 3 == 2) {
            person03.add(list.get(i));
        }
    }

    Collections.sort(person01);
    Collections.sort(person02);
    Collections.sort(person03);
    Collections.sort(diPai);

    List<String> player1 = new ArrayList<>();
    List<String> player2 = new ArrayList<>();
    List<String> player3 = new ArrayList<>();
    List<String> diPai1 = new ArrayList<>();

    for (Integer integer : diPai) {
        diPai1.add(pai.get(integer));
    }
    System.out.println(diPai1);
    for (Integer integer : person01) {
        player1.add(pai.get(integer));
    }
    for (Integer integer : person02) {
        player2.add(pai.get(integer));
    }
    for (Integer integer : person03) {
        player3.add(pai.get(integer));
    }
    System.out.println(player1);
    System.out.println(player2);
    System.out.println(player3);
    // 输出集合 , 4.看牌 .

}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值