Map集合的应用(斗地主)

实现思路:

①定义存牌的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();

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值