实现思路:
①定义存牌的map集合(键值存牌号,值存牌),定义存牌号的list集合(用于洗牌的操作)
②定义花色的数组和牌号的数组,用于生成牌
③定义牌号index=2,0和1为大王与小王位置
④遍历两个数组生成新的牌,将牌和牌号存入map集合,牌号存入list集合,最后自增牌号
⑤将大小王插入到生成好的map集合当中。再将大小王的牌号存入到list集合。,此时一副牌已生成好
⑥调用Collections集合工具类的shuffle方法进行随机排列,简称洗牌
⑦定义三个玩家集合和 一个底牌集合
⑧进行发牌操作,对list牌号集合进行for循环遍历,提前将三张底牌存入到底牌集合,再将i进行%3(对3进行取余运算,如果为0,则发给第一个玩家。同理,依次类推),将i对应list集合中的打乱的牌号存入到指定玩家的集合当中
⑨再将玩家集合进行排序
⑩用玩家集合中的牌号去遍历map集合寻找对应的牌
main方法:
//定义存储牌的集合map
Map<Integer,String> map=new HashMap<Integer,String>();
//定义存储牌号的集合list用于洗牌的操作(collections工具对list集合友善)
List<Integer> list=new ArrayList<Integer>();
//声明花色的数组
String[] color={"♥","♣","♦","♠"};
//声明牌号的数组
String[] number={"2","A","K","Q","J","10","9","8","7","6","5","4","3"};
//定义牌的序号
int index=2;//(0和1预留为大王和小王)
//遍历数组生成牌(如果要操作索引不能使用增强for)
for(String c:color){
for(String m:number){
String poker=c+m;//将花色与牌号进行组合生成牌
map.put(index, poker);
list.add(index);//将序号存入到序号数组
index++;//一定记住序号自增
}
}
//将大王和小王存入map和list集合当中
map.put(0,"大王");
map.put(1,"小王");
list.add(0);
list.add(1);
//调用Collections集合工具类的shuffle方法对牌号数组进行随机排列(洗牌)
Collections.shuffle(list);
//System.out.println(list);
//System.out.println(map);
//定义三个玩家集合
ArrayList<Integer> player01=new ArrayList<Integer>();
ArrayList<Integer> player02=new ArrayList<Integer>();
ArrayList<Integer> player03=new ArrayList<Integer>();
//定义底牌集合
ArrayList<Integer> dipai=new ArrayList<Integer>();
//进行发牌操作
for(int i=0;i<list.size();i++){
//提前将三张牌存入底牌数组
if(i<3){
dipai.add(list.get(i));
}else if(i%3==0){
player01.add(list.get(i));
}else if(i%3==1){
player02.add(list.get(i));
}else if(i%3==2){
player03.add(list.get(i));
}
}
//将牌进行整理,调用collections的sort方法进行排序
Collections.sort(player01);
Collections.sort(player02);
Collections.sort(player03);
send("player01",map,player01);
send("player02",map,player02);
send("player03",map,player03);
send("底牌",map,dipai);
遍历方法send:
public static void send(String name,Map<Integer,String> map,ArrayList<Integer> list){
System.out.print(name+" ");
for(Integer key:list){
String value=map.get(key);
System.out.print(value+" ");
}
System.out.println();
}