1.斗地主程序 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); } } |