斗地主的代码:
package demo8;
import java.util.*;
public class Test8 {
public static void main(String[] args) {
// 生成扑克
HashMap<Integer,String> map=new HashMap<>();
ArrayList<Integer> picket=new ArrayList<>(); // 用来存键值,也是存扑克的张数
String[] type=new String[]{"♦","♣","♥","♠"};
String[] nums=new String[]{"3","4","5","6","7","8","9","10","J","Q","K","A","2"};
int index=0;
for (int i=0;i<nums.length;i++){
for (int j=0;j<type.length;j++){
map.put(index,type[j]+nums[i]);
picket.add(index);
index++;
}
}
//System.out.println(index);//输的索引为52
picket.add(index);//存第52张牌进集合,因为索引从0开始,第52张就是第53张牌
map.put(index,"小♛");
index++;
picket.add(index);//存第53张牌进去
map.put(index,"大♛");
// System.out.println(map);//查看生成的牌齐全没
//洗牌
Collections.shuffle(picket);
//System.out.println(picket);// 查看牌的索引是否被打乱
//发牌(拿牌)
TreeSet<Integer> player1=new TreeSet<>(); // 玩家1
TreeSet<Integer> player2=new TreeSet<>(); // 玩家2
TreeSet<Integer> player3=new TreeSet<>(); // 玩家3
TreeSet<Integer> dipai=new TreeSet<>(); // 底牌
// 发牌 ,发索引,根据索引找值,map
for (int i=0;i<picket.size();i++){
if (i>=picket.size()-3){
dipai.add(picket.get(i));
}else if (i%3==0){
player1.add(picket.get(i));
}else if (i%3==1){
player2.add(picket.get(i));
}else if(i%3==2){
player3.add(picket.get(i));
}
}
//System.out.println(player1);// 输出一个玩家查看是否为17张牌
seeCards("小明",player1,map);
seeCards("小饭",player2,map);
seeCards("小扣",player3,map);
seeCards("底牌",dipai,map);
}
// 封装看牌方法,需要的形参为玩家名字,玩家的牌号(索引),牌的值(map)
public static void seeCards(String name,TreeSet<Integer> players, HashMap<Integer,String> map){
System.out.print(name+"的牌为:");
Iterator<Integer> iter=players.iterator();// 玩家的牌开始遍历
while (iter.hasNext()){
System.out.print(map.get(iter.next())+" ");// 得到玩家的牌值
}
System.out.println();
}
}
灵活运用HashMap的键值对,键存张数,value存花色。