diff --git a/s-day03/src/com/inmind/collections04/Poker.java b/s-day03/src/com/inmind/collections04/Poker.java new file mode 100644 index 0000000..fb0e3c8 --- /dev/null +++ b/s-day03/src/com/inmind/collections04/Poker.java @@ -0,0 +1,23 @@ +package com.inmind.collections04; + +public class Poker implements Comparable{ + String color;//花色 + String num;//排面值 + int sortValue;//排序值 + + public Poker(String color, String num, int sortValue) { + this.color = color; + this.num = num; + this.sortValue = sortValue; + } + + @Override + public String toString() { + return this.color+this.num; + } + + @Override + public int compareTo(Poker o) { + return this.sortValue - o.sortValue; + } +} diff --git a/s-day03/src/com/inmind/collections04/Test16.java b/s-day03/src/com/inmind/collections04/Test16.java index f885db3..101b5a6 100644 --- a/s-day03/src/com/inmind/collections04/Test16.java +++ b/s-day03/src/com/inmind/collections04/Test16.java @@ -1,21 +1,95 @@ 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) { - String[] colors = {"♠", "♥", "♣", "♦"}; + //创建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; + } + }); + } } }