斗地主的发牌,洗牌和看牌
–
利用ArrayList,TreeSet,HashMap实现斗地主的发牌,洗牌和看牌
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.TreeSet;
/**
*斗地主
*分析:
*1.建一个集合对象,储存一副扑克
*2.洗牌 shuffle
*3.发牌
* (1)每人13张
* (2)底牌另算
*4.看牌
*
*/
public class Demo2 {
public static void main(String[] args) {
String[] num = {"3","4","5","6","7","8","9","10","J","Q","K","A","2"};
String[] color = {"红桃","梅花","方块","黑桃"};
HashMap<Integer, String> hm = new HashMap<>(); //存储索引和扑克牌,每张扑克牌一个索引
ArrayList<Integer> al = new ArrayList<>(); //存储索引(利用ArrayList对索引排了序,方便与扑克牌一一对应加入hm)
int index = 0 ; //初始化索引
//将索引和扑克牌储存在hm中
for(String s1 : num){
for(String s2 : color){
hm.put(index, s2.concat(s1));
al.add(index); //把索引放在ArrayList中,方便洗牌
index++; //索引递增
}
}
//将小王和大王添加到双列集合中
hm.put(index, "小王");
al.add(index);
hm.put(++index, "大王");
al.add(index); //每个索引都添加到ArrayList中
//洗牌就是洗索引
Collections.shuffle(al);
//发牌
TreeSet<Integer> ts1 = new TreeSet<>(); //利用TreeSet可排序
TreeSet<Integer> ts2 = new TreeSet<>();
TreeSet<Integer> ts3 = new TreeSet<>(); //三个人的牌
TreeSet<Integer> dipai = new TreeSet<>(); //底牌
for(int i = 0 ; i < al.size() ; i++){
if( i > al.size() - 4){
dipai.add(al.get(i));
} //发底牌
else if( i % 3 == 0 ){
ts1.add(al.get(i));
}
else if( i % 3 == 1 ){
ts2.add(al.get(i));
}
else{
ts3.add(al.get(i));
} //发三个人的牌
}
//看牌 ,遍历,通过索引获取值
lookPoker(hm,ts1,"二哈"); //hm一副扑克,ts13张,name谁在打牌
lookPoker(hm,ts2,"金毛");
lookPoker(hm,ts3,"泰迪");
lookPoker(hm,dipai,"底牌");
}
public static void lookPoker(HashMap<Integer, String> hm, TreeSet<Integer> ts , String name) { //
System.out.println(name + "的牌是;");
for(Integer i : ts){ //i表示双列集合中的每一个键
System.out.print(hm.get(i) + " "); //根据键返回值
}
System.out.println();
}
}