终极:用集合模拟斗地主

时间:2023-01-12小编:迷失传奇版本

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,"大王");

list.add(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;

}

}

※最后输出



展开

上一篇:肝帝+氪金大佬看过来 《王者荣耀》全新王者星会员体系正式上线

下一篇:明日方舟大部分四五星出场即压仓为什么还要出呢?

相关内容更多
热门攻略更多
返回顶部