package homework; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; public class PokeList { public static void main(String[] args) { List<String> list = new ArrayList<>(); List<String> landlord = new ArrayList<>(); List<String> farmer1 = new ArrayList<>(); List<String> farmer2 = new ArrayList<>(); String color[] = {"♥", "♠", "♦", "♣"}; String num[] = {"3", "4", "5", "6", "7", "8", "9", "10", "A", "2", "J", "Q", "K"}; //取出一种花色与每个牌面值组成一张牌添加到list集合中 for (String s : num) { for (String s1 : color) { list.add(s1 + s); } } list.add("小王"); list.add("大王"); //2 洗牌, 把list集合中的元素乱序 Collections.shuffle(list); System.out.println(list); //3 发牌, 有三个玩家, 每个玩家手中有很多牌, 定义三个集合保存三个玩家手中的牌 for (int i = 0; i < list.size(); i += 3) { if (i < list.size() - 3) { landlord.add(list.get(i)); farmer1.add(list.get(i + 1)); farmer2.add(list.get(i + 3)); } else { landlord.add(list.get(i)); landlord.add(list.get(i + 1)); landlord.add(list.get(i + 2)); } } PokeComparator pokeComparator = new PokeComparator(); landlord.sort(pokeComparator); farmer1.sort(pokeComparator); farmer2.sort(pokeComparator); //把三个保存玩家扑克的集合打印到屏幕上 System.out.println(landlord); System.out.println(farmer1); System.out.println(farmer2); } //以静态内部类的形式定义类实现Comparator接口, 定义扑克的比较规则 static class PokeComparator implements Comparator<String> { @Override public int compare(String o1, String o2) { return numOf(o1) - numOf(o2); } //可以把J看作是11, 把Q看作12, 把K看作13, 对应的可以把A看作14, 把2看作15, 把小王看作16, 把大王看作17. 在比较扑克牌大小时, 就比较扑克牌对应的数字的大小即可 private int numOf(String poke) { if ("大王".equals(poke)) return 17; if ("小王".equals(poke)) return 16; String value = poke.substring(1); switch (value) { case "2": return 15; case "A": return 14; case "K": return 13; case "Q": return 12; case "J": return 11; default: return Integer.parseInt(value); } } } }
【* 模拟斗地主游戏中的发牌】
于 2022-10-28 09:45:00 首次发布