java斗地主代码花色,集合经典案例:斗地主发牌功能实现

这篇博客详细介绍了如何使用Java编程实现一副扑克牌的生成、洗牌和发牌过程。通过创建ArrayList和HashMap存储牌的信息,然后利用Collections.shuffle进行洗牌,并将牌均匀分配给三个玩家。最后,代码还展示了如何打印出底牌和每个玩家的牌面。这是一个基础的算法实践案例,适合初学者理解数据结构和控制流程的应用。

importjava.util.ArrayList;importjava.util.Collections;importjava.util.HashMap;importjava.util.List;importjava.util.Set;public classTest {public static voidmain(String[] args) {/*思路分析:

1,生成牌:用map集合保存54张牌,且从1-54数字对应起来*/List color = new ArrayList<>();

List point = new ArrayList<>();

Collections.addAll(color,"♥","♠","♣","♦");

Collections.addAll(point,"A","2","3","4","5","6","7","8","9","10","J","Q","K");

HashMap poker = new HashMap<>();

poker.put(0, "大王");

poker.put(1, "小王");int serialNum = 2;for(String d : point) {for(String c : color) {

poker.put(serialNum,c+d);

serialNum++;

}

}//一副扑克牌生成完成//System.out.println(poker);//输出验证//2,利用序号->洗牌->发牌//

//获取双列map集合中的所有key值

Set key =poker.keySet();//利用有参构造方法来初始化单列List集合

List pokerNum = newArrayList(key);//System.out.println(pokerNum);//获取所有key值完毕

Collections.shuffle(pokerNum);//利用三个玩家容器和一个底牌容器存储(容器使用单列集合,便于排序,利用序号(也就是双列集合中key值)取对应的牌面就行了)

List player1 = new ArrayList<>();

List player2 = new ArrayList<>();

List player3 = new ArrayList<>();

List lastPoker = new ArrayList<>();for (int i = 0; i < pokerNum.size(); i++) {if(i >= 51) {//注意要添加的值是扑克打乱后的值,非遍历的序号值

lastPoker.add(pokerNum.get(i));

}else if(i % 3 == 1){

player1.add(pokerNum.get(i));

}else if(i % 3 == 2) {

player2.add(pokerNum.get(i));

}else{

player3.add(pokerNum.get(i));

}

}//发牌完毕,整理牌面

Collections.sort(lastPoker);

Collections.sort(player1);

Collections.sort(player2);

Collections.sort(player3);//3.利用玩家获得牌面的序号,取牌//每个玩家遍历一次

System.out.print("底牌:");for(Integer i : lastPoker) {

String str=poker.get(i);

System.out.print(str+" ");

}

System.out.println();

System.out.print("玩家1:");for(Integer i : player1) {

String str=poker.get(i);

System.out.print(str+" ");

}

System.out.println();

System.out.print("玩家2:");for(Integer i : player2) {

String str=poker.get(i);

System.out.print(str+" ");

}

System.out.println();

System.out.print("玩家3:");for(Integer i : player3) {

String str=poker.get(i);

System.out.print(str+" ");

}

}

}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值