package doudizhu;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.TreeSet;
/**
* ClassName:Doudizhu
* Functio: 模拟三个人 斗地主(升级版),每人拿到牌之后,手中的牌自动排序
* 完成:
* 1.准备一副牌54张
* 2.利用collections中的静态方法洗牌
* 3.发牌
* 4.看牌
* @author zhang
* @since JDK 1.8
*/
public class DouDiZhu {
public static void main(String[] args) {
List list = new ArrayList();//list集合用来保存每张牌对应的序号
//准备54张牌
String [] num = {"3","4","5","6","7","8","9","10","J","Q","K","A","2"};
String [] color = {"红桃","梅花","黑桃","方块"};
Map map = new HashMap();//map集合用来存放54张牌
int index = 0;
for (String s1 : num) {
for (String s2 : color) {
map.put(index, s2.concat(s1));//将牌放到map集合中
list.add(index);//将每张牌的序号添加到list集合中,从0开始
index++;//每生成一张牌,对应的序号加一
}
}
map.put(index, "小王");//第53张牌
list.add(index);//小王这张牌对应的序号
index++;//序号自加
map.put(index, "大王");//第54张牌
list.add(index);//大王这张牌对应的序号
System.out.println("54张牌:\n"+map);//打印出54张牌
System.out.println("\n 洗牌前 牌的序号:\n"+list);//打印出牌序
Collections.shuffle(list);//洗牌:通过对牌的序号进行乱序操作,完成牌序的变化
System.out.println("\n 洗牌后 牌的序号:\n"+list);//洗牌后打印出牌序
//发牌(人数和底牌):将牌的序号发给三个人以及留到底牌中 底层可以进行排序
TreeSet zhangsan = new TreeSet();
TreeSet lisi = new TreeSet();
TreeSet wangwu = new TreeSet();
TreeSet dipai = new TreeSet();
for (int i = 0; i < list.size(); i++) {
if ((i+3) >= list.size()) {//留三张作为底牌,剩余的发给三个人
dipai.add(list.get(i));
}else if (i%3==0) {//list集合中的第一个序号给zhangsan
zhangsan.add(list.get(i));
}else if (i%3==1) {//list集合中的第二个序号给zhangsan
lisi.add(list.get(i));
}else {//list集合中的第三个序号给zhangsan
wangwu.add(list.get(i));
}
}
//看牌
//根据map中key编号找对应的牌:
kanpai(map, zhangsan, "zhangsan");
kanpai(map, lisi, "lisi");
kanpai(map, wangwu, "wangwu");
kanpai(map, dipai, "dipai");
}
public static void kanpai(Map map,TreeSet t,String name){
System.out.println("\n"+name+"的牌是:");
for (Integer integer : t) {//t中是map中牌的索引,这样只要遍历出每个人的牌的序号,就可以拿到map中的牌(value)
System.out.print(map.get(integer)+" ");
}
System.out.println();
}
}