集合模拟斗地主洗牌,发牌,看牌

时间:2021-03-15 19:23:39

1.一副牌54张,A-K13张,乘以四花色,加大小王
2.54张牌有大小,我们就用数字0-53表示大小,一个数字对应一个牌,所以我们就用Map集合来装牌。
3.洗牌:就是将牌对应的数字的集合打乱,所以我们就新建一个集合专门用来装牌对应的数字,用集合ArrayList。
4.发牌:就是将54张牌对应的数字除下3张底牌,平均分配给3位玩家,最好还可以排序,所以我们创建4个TreeSet分别来装玩家的牌和底牌。
5.看牌:定义一个方法参数是整副牌的集合,该玩家的姓名,玩家的TreeSet集合。

public class Demo1 {
public static void main(String[] args) {
//首先要生成一副牌
//牌面大小从小到大
char[] num={'3','4','5','6','7','8','9','d','J','Q','K','A','2'};
//花色从小到大
String [] flower={"方块", "梅花","红桃","黑桃"};
//整副牌的集合
HashMap<Integer,String> puker = new HashMap<>();
//牌对应的数字(key)的集合
ArrayList<Integer> list = new ArrayList<>();
int index=0;
for (char s2 : num) {
for (String s1 : flower) {
puker.put(index, s1+s2);
list.add(index);
index++;
}
}
//添加大小王
puker.put(index, "小王");
list.add(index);
index++;
puker.put(index, "大王");
list.add(index);
//洗牌,就是将索引打乱
Collections.shuffle(list);
//发牌,创建4个Set集合来装牌,还有排序,就用treeSet
TreeSet dushen = new TreeSet();
TreeSet duba = new TreeSet();
TreeSet duwang = new TreeSet();
TreeSet dipai = new TreeSet();

for (int i = 0; i < list.size(); i++) {
if(i>=list.size()-3){
dipai.add(list.get(i));
}else if(i%3==0){
dushen.add(list.get(i));
}else if(i%3==1){
duba.add(list.get(i));
}else{
duwang.add(list.get(i));
}
}
//看牌
lookPuker(puker,dipai,"底牌");
lookPuker(puker,dushen,"赌神");
lookPuker(puker,duba,"赌霸");
lookPuker(puker,duwang,"赌王");
}
public static void lookPuker(HashMap<Integer,String> puker,TreeSet<Integer> set,String name){
//通过拿到key拿到value
System.out.print(name+"的牌是:");
for (Integer i : set) {
System.out.print(puker.get(i)+" ");
}
System.out.println();

}
}