斗地主案例
分析
1、准备牌:54张牌,存储到一个集合中
特殊牌:大王,小王
其他52张牌:
定义一个数组/集合,存储4种花色:♠,♥,♣,♦
定义一个数组/集合,存储13个序号:2,A,K...3
循环嵌套遍历两个数组/集合,组装52张牌
♠2,♠A,♠K...♠3,♥2,♥A,♥K...♥3
....
2.洗牌
使用集合工具类Collections的方法
static void shuffle(List<?> list) 使用指定的随机源对指定列表进行置换。
会随机的打乱集合中元素的顺序
3.发牌
要求:1人17张牌,剩余3张作为底牌,一人一张轮流发牌:集合的索引(0-53)%3
定义4个集合,存储3个玩家的牌和底牌
索引%2,有两个值(0,1) 0%2=0 1%2=1 2%2=0 3%2=1
索引%3,有三个值(0,1,2) 0%3=0 1%3=1 2%3=2 3%3=0
索引>=51 改底牌发牌
4.看牌
直接打印集合,遍历存储玩家和底牌的集合
public class DouDiZhu { public static void main(String[] args) { ArrayList<String> poker = new ArrayList<>(); //创建花色 String[] color = {"♦","♠","♥","♣"}; //创建点数 String[] num = {"2","3","4","5","6","7","8","9","10","J","Q","K","A"}; //存入HasMap poker.add("大王"); poker.add("小王"); for (String numa : num){ for (String col : color){ poker.add(col+numa); } } //洗牌 Collections.shuffle(poker); //玩家和底牌 TreeSet<String> Tset1 = new TreeSet<>(); TreeSet<String> Tset2 = new TreeSet<>(); TreeSet<String> Tset3 = new TreeSet<>(); TreeSet<String> Dset4 = new TreeSet<>(); //分牌 for (int i = 0; i < poker.size(); i++) { String integer = poker.get(i); if (i>=51){ Dset4.add(integer); }else if (i%3==0){ Tset1.add(integer); }else if (i%3==1){ Tset2.add(integer); }else if (i%3==2){ Tset3.add(integer); } } lookPoker("张三",Tset1); lookPoker("李四",Tset2); lookPoker("王五",Tset3); lookPoker("底牌",Dset4); } public static void lookPoker(String name, TreeSet<String> play) { System.out.print(name + "的牌是:"); for (String i : play) { System.out.print(i + " "); } System.out.println(""); } }