package com.inmind.collections04; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; /* 按照斗地主的规则,完成洗牌发牌的动作。 具体规则: 使用54张牌打乱顺序,三个玩家参与游戏,三人交替摸牌,每人17张牌,最后三张留作底牌。 分析: 1.准备54张牌(花色+数字) 2.洗牌(打乱顺序) 3.创建3个集合对象保存每个玩家的牌,创建1个集合保存底牌 4.打印集合的内容(排序后打印) 建议:自定义一个扑克牌类,有花色属性,数字属性(排序),54个牌对象 */ public class Test16 { public static void main(String[] args) { //创建54张牌的集合 ArrayList pokers = new ArrayList<>(); //创建54牌 String[] colors = {"♦","♣", "♥" ,"♠" }; String[] nums = {"3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2"}; int sortValue = 0; for (String num : nums) { for (String color : colors) { Poker poker = new Poker(color, num, sortValue); pokers.add(poker); sortValue++; } } pokers.add(new Poker("", "小王", sortValue++)); pokers.add(new Poker("", "大王", sortValue++)); System.out.println(pokers); System.out.println(pokers.size()); //洗牌(打乱顺序) Collections.shuffle(pokers); System.out.println(pokers); //3.创建3个集合对象保存每个玩家的牌,创建1个集合保存底牌 ArrayList player1 = new ArrayList<>(); ArrayList player2 = new ArrayList<>(); ArrayList player3 = new ArrayList<>(); ArrayList dipai = new ArrayList<>(); /* 玩家1 0 3 6 %3 == 0 玩家2 1 4 7 %3 == 1 玩家3 2 5 8 %3 == 2 */ for (int i = 0; i < pokers.size(); i++) { if (i >= 51) { dipai.add(pokers.get(i)); }else{ switch (i % 3) { case 0: player1.add(pokers.get(i)); break; case 1: player2.add(pokers.get(i)); break; case 2: player3.add(pokers.get(i)); break; } } } //把各自的牌整理好(排序)(自然排序) /*Collections.sort(player1); Collections.sort(player2); Collections.sort(player3); Collections.sort(dipai);*/ //使用比较器的方法 sortPokers(player1,player2,player3,dipai); //抓完牌了,看牌 System.out.println("玩家1:"+player1); System.out.println("玩家2:"+player2); System.out.println("玩家3:"+player3); System.out.println("底牌:"+dipai); } //自定义一个排序功能,对扑克牌排序(降序) public static void sortPokers(ArrayList... pokers) { for (ArrayList list : pokers) { Collections.sort(list, new Comparator() { @Override public int compare(Poker o1, Poker o2) { return o2.sortValue-o1.sortValue; } }); } } }