刚学完集合,老师讲了个斗地主发牌的练习,在这里记录一下。这里使用了HashMap,ArrayList,TreeSet三种集合。
package shuffleCards;
import java.util.*;
/**
* 斗地主
* @author 杰哥
*1、洗牌 2、发牌 3、看牌
*/
public class ShuffleCards {
/*看牌函数(输出玩家发到的牌)*/
public static void lookCard(String name,TreeSet<Integer> ts,HashMap<Integer,String> hm){
System.out.println(name + "的牌是:");
for(Integer index : ts){
System.out.print(hm.get(index) + " ");
}
System.out.println();
}
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> cards = new HashMap<Integer,String>();//储存索引和对应的扑克牌
ArrayList<Integer> all = new ArrayList<Integer>();//存储索引
int index = 0; //初始化索引
/*初始化,将索引和扑克牌都储存在cards中*/
for(String s1 : num){
for(String s2 : color){
cards.put(index, s1.concat(s2)); //把牌的数字和花色连接起来并当做索引的value
all.add(index); //把索引加到ArrayList中
index++;
}
}
/*将大王和小王加到两个集合中*/
cards.put(index,"小王" );
all.add(index);
cards.put(++index,"大王");
all.add(index);
/*洗牌就相当于打乱索引*/
Collections.shuffle(all); //调用了Collections的shuffle函数
/*发牌(用TreeSet储存每个玩家和底牌的索引,可实现发牌过程中的自动排序,相当于玩家整理牌)*/
TreeSet<Integer> player1 = new TreeSet<Integer>();
TreeSet<Integer> player2 = new TreeSet<Integer>();
TreeSet<Integer> player3 = new TreeSet<Integer>();
TreeSet<Integer> dipai = new TreeSet<Integer>();
for(int i = 0;i<all.size();i++){
/*把最后三张牌作为底牌*/
if(i>=all.size()-3){
dipai.add(all.get(i));
}
/*三个玩家按顺序一张一张发牌*/
else if(i % 3 == 0){
player1.add(all.get(i));
}
else if(i % 3 == 1){
player2.add(all.get(i));
}
else{
player3.add(all.get(i));
}
}
/*看牌,参数分别是name,TreeSet对象,HashMap对象*/
lookCard("player1",player1,cards);
lookCard("player2",player2,cards);
lookCard("player3",player3,cards);
lookCard("底牌",dipai,cards);
}
}