6.1、模拟斗地主发牌之买牌
6.1.1、案例:模拟斗地主发牌
需求:使用一个集合对象存储一副扑克牌,将所有扑克牌的顺序打乱然后分发给用集合表示的三个玩家和底牌,并打印玩家和底牌的集合内容
步骤:
1.买一副扑克牌将花色和数字分别进行组合,生成所有的普通牌手动添加“大王”、“小王”
2.洗牌使用Collections工具类的shuffle方法打乱牌的顺序
3.发牌遍历牌堆,将每一张牌分发到三个玩家集合中留三张作为底牌
4.看牌分别打印每个玩家集合的内容
步骤一:买一副扑克牌
分析:
1.创建数字数组:String[]nums=("3","4","5","6","7","8","9","10","J","Q","K","A","2");
2.创建花色数组:String[]colors=["方片","梅花","红桃","黑桃");
3.将每一个花色分别和数字进行拼接colors[i].concat(nums[j]);
importjava.util.ArrayList;
importjava.util.HashMap;
importjava.util.List;
importjava.util.Map;
publicclassText{
publicstaticvoidmain(String[]args){
//1、买牌
//1.1、定义一个双列集合,键:表示牌的编号,值:表示具体的牌,规则:编号越小,牌越小
Mappokers=newHashMap<>;
//1.2、定义一个单例集合,用来存储所有的的牌号
Listlist=newArrayList<>;
//1.3、具体买牌动作
//普通牌,52
String[]colors={"♠","","♣",""};
String[]numbers={"3","4","5","6","7","8","9","10","J","Q","K","A","2"};
intnum=0;//表示牌的编号
//通过循环嵌套,造普通牌
for(Stringnumber:numbers){//外层循环获取所有的点数
for(Stringcolor:colors){//内循环获取所有的花色
Stringpoker=color+number;
//奖牌的编号,具体的牌放到双列集合中
pokers.put(num,poker);
//奖牌的编号放到单列集合中
list.add(num);
//每添加一张牌,编号要自增1
num++;
//大小王
//添加小王
pokers.put(num,"小王");
list.add(num++);
//添加大王
pokers.put(num,"大王");
//打印牌
System.out.println("所有牌:"+pokers);
System.out.println("牌的编号:"+list);
步骤二、三:洗牌和发牌
1.使用Collections工具类的shuffle方法打乱牌堆集合的顺序
2.分别创建三个玩家集合对象和底牌集合对象
3.遍历牌堆的每一张牌,分别将索引对3取模的值为0,1,2的牌存放到三个玩家集合中,将最后三张存放到底牌集合中
//2.洗牌
Collections.shuffle(list);
System.out.println("洗好牌后,编号为:"+list);
//3、发牌
//3.1、定义四个集合,分别表示3个玩家,底牌.
Listzhangsan=newArrayList<>;
Listlisi=newArrayList<>;
Listwangwu=newArrayList<>;
Listdipai=newArrayList<>;
//3.2、具体的发牌动作,将索引和3取模,决定发给谁
for(inti=0;i
//获取编号
IntegerpokerNum=list.get(i);
if(i>=list.size-3){
//底牌
dipai.add(pokerNum);
}elseif(i%3==0){
zhangsan.add(pokerNum);
}elseif(i%3==1){
lisi.add(pokerNum);
}elseif(i%3==2){
wangwu.add(pokerNum);
}
//3.3、查看具体的牌
System.out.println("张三:"+printPoker(zhangsan,pokers));
System.out.println("李四:"+printPoker(lisi,pokers));
System.out.println("王五:"+printPoker(wangwu,pokers));
System.out.println("底牌:"+printPoker(dipai,pokers));
步骤四、看牌
1.将玩家集合中的牌按自然顺序进行排序Collections.sort(List);
2.打印玩家集合中的牌
3.重复上面的操作打印所有玩家的牌和底牌
/*4.定义一个方法,用来看牌
方法名:printPoker
参数列表:List,Map
返回值:String
*/
publicstaticStringprintPoker(Listnums,Mappokers){
//1.对牌的编号进行升序排列
Collections.sort(nums);
//2.遍历牌的序号集合,获取到每一个编号
StringBuildersb=newStringBuilder;
for(Integernum:nums){
//num就是要查找的具体牌的编号
//3.根据编号双列集合中查找该编号对应的具体牌
Stringpoker=pokers.get(num);
//4.将获取到的牌进行拼接
sb.append(poker+"");
//5.将最终拼接结果返回即可
Stringstr=sb.toString;
returnstr.trim;
※最后输出
上一篇:肝帝+氪金大佬看过来 《王者荣耀》全新王者星会员体系正式上线
下一篇:明日方舟大部分四五星出场即压仓为什么还要出呢?
哈哈哈 子弹越打越多了
.
《刺客信条: 黑旗 记忆重置》回应DLC比本体贵: DLC非必须
当臭猫扶贫神秘嘉豪号主!
原神: 7.0奥黛塔定位反转! 并非木偶专属, 冰神设计成最大悬念
哪辆车能不被28吨钢卷压成废铁? 哪辆车能不被28吨钢卷压成废铁?
原神: 新超导木偶队顶配配装攻略! 告别刮痧与充能卡顿