A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

斗地主程序
package homework3;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.Random;
/*成龙,甄子丹,李连杰三个人打斗地主,三人约定,洗牌后,
* 随机抽取一张"明牌"并夹在中间;然后依次抓牌,谁抓到这张便自动作为地主,
* 并收取最后三张。
要求:请用程序实现这一过程,最后打印地主名,以及三个人的牌(要求排序);
思路:
  1.定义一个Map集合存储一副扑克牌;List存储编号;
  2.洗牌;
  3.随机抽取一个索引(该值必须在倒数三张之前),用于表示"明牌",在发牌
    时谁抓到这一张便作为"地主";
  4.依次给三个人(成龙,甄子丹,李连杰)发牌,并监督谁作为地主;地主自
     动收取最后三张。
  5.打印地主名;
  6.最后以排序后的方式打印每个人手里的牌;*/
public class Poker {
    public static void main(String[] args) {
        // 创建LinkedHashmap集合\一个list集合
        LinkedHashMap<Integer, String> poker = new LinkedHashMap<>();
        // 创建花色集合
        ArrayList<String> colors = new ArrayList<>();
        Collections.addAll(colors, "♥", "♠", "♦", "♣");
        // System.out.println(colors);
        // 创建序号集合
        ArrayList<String> num = new ArrayList<>();
        Collections.addAll(num, "2", "A", "K", "Q", "J", "10", "9", "8", "7", "6", "5", "4", "3");
        // System.out.println(num);
        // 组装键和值,扑克牌创建完成
        int i = 0;
        poker.put(i++, "大王");
        poker.put(i++, "小王");
        for (String n : num) {
            for (String c : colors) {
                String pai = c + n;
                poker.put(i++, pai);
            }
        }
        // System.out.println(poker);
        // 洗牌,打乱序号
        ArrayList<Integer> xuhao = new ArrayList<>();
        for (int x = 0; x < 54; x++) {
            xuhao.add(x);
        }
        Collections.shuffle(xuhao);
        System.out.println(xuhao);
        Random r = new Random();
        int mingpai = r.nextInt(50) + 1;
        // 创建玩家集合,存储牌的编号
        ArrayList<Integer> cl = new ArrayList<>();
        ArrayList<Integer> zzd = new ArrayList<>();
        ArrayList<Integer> llj = new ArrayList<>();
        for (int a = 0; a < 51; a++) {
            if (a % 3 == 0) {
                cl.add(xuhao.get(a));
            } else if (a % 3 == 1) {
                zzd.add(xuhao.get(a));
            } else {
                llj.add(xuhao.get(a));
            }
        }
        // 遍历最后三张牌序号
        for (int a = 51; a < 54; a++) {
            // 判断名牌被谁抓到,把最后三张牌给谁
            if (mingpai % 3 == 0) {
                cl.add(xuhao.get(a));
            } else if (mingpai % 3 == 1) {
                zzd.add(xuhao.get(a));
            } else {
                llj.add(xuhao.get(a));
            }
        }
        // 打印谁是地主
        if (mingpai % 3 == 0) {
            System.out.println("地主是:成龙");
        } else if (mingpai % 3 == 1) {
            System.out.println("地主是:甄子丹");
        } else {
            System.out.println("地主是:李连杰");
        }
        // 玩家手中牌编号排序
        Collections.sort(cl);
        Collections.sort(zzd);
        Collections.sort(llj);
        // 看牌,创建玩家牌内容的集合
        ArrayList<String> cl2 = new ArrayList<>();
        ArrayList<String> zzd2 = new ArrayList<>();
        ArrayList<String> llj2 = new ArrayList<>();
        // 为集合添加元素
        for (Integer nu : cl) {
            String pai2 = poker.get(nu);
            cl2.add(pai2);
        }
        for (Integer nu : zzd) {
            String pai2 = poker.get(nu);
            zzd2.add(pai2);
        }
        for (Integer nu : llj) {
            String pai2 = poker.get(nu);
            llj2.add(pai2);
        }
        System.out.println("成   龙的牌:" + cl2);
        System.out.println("甄子丹的牌:" + zzd2);
        System.out.println("李连杰的牌:" + llj2);
    }
}

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马