模拟斗地主发牌功能

案例:模拟斗地主发牌功能

需求:定义一个集合对象存储一副扑克牌,将所有扑克牌的顺序打乱,然后分别用集合表示的三个玩家和底牌,并打印玩家和底牌的集合内容

1、一副扑克牌:将花色和数字分别进行组合,生成所有的普通牌,手动添加大小王

2、洗牌:使用Collection工具的shuffle()方法打乱牌的顺序

3、发牌:遍历牌堆,将?一?牌分?到三个玩家集合中,留三?作?底牌

 4、看牌:分别打印三个玩家集合的内容

分析:

?牌:1、?建数字数?:String[] nums={"3","4","5","6","7","8","9","10","J","Q","K","2"};

?           2、?建花色数?:String[] colors={"方片","梅花","?桃","黑桃"};

?           3、将?个花色分?和数字?行拼接

?牌:1、分??建三个玩家集合?象和底牌集合?象

?            2、遍?牌堆的?一?牌,分?将索引?3取模的??0、1、2的牌存放到三个玩家集合中,将最后三?存放到底牌集合中

看牌:1、将玩家集合中的牌按自然?序?行排序Collections.sort(list);

?            2、打印

package com.example;

import com.sun.xml.internal.ws.api.model.wsdl.WSDLOutput;
import org.w3c.dom.ls.LSOutput;

import java.util.*;

public class SendPokerDemo {
public static void main(String[] args) {
//1、买牌
//1.1定义一个双列集合,键表示牌的编号,值表示具体的牌 规则:编号越小,牌越小
Map<Integer,String> pokers=new HashMap<>();
//1.2定义一个单列集合,用来存储牌的编号
List<Integer> list=new ArrayList<>();
//1.3具体的买牌动作
String[] colors={"♥","♠","♦","■"};//■表示梅花
String[] numbers={"3","4","5","6","7","8","9","10","J","Q","K","A","2"};
int num=0;
for (String number : numbers) {//外循环,获取所有点数
for (String color : colors) {//内循环,获取所有花色
String poker=color+number;
//将牌的编号,具体的牌放到双列集合中,
pokers.put(num,poker);
//将牌的编号放到单列集合中
list.add(num);
//每添加一张牌,编号自增一
num++;
}
}
pokers.put(num,"小王");
list.add(num++);
pokers.put(num,"大王");
list.add(num);
//打印牌
System.out.println("所有的牌:"+pokers);
System.out.println("牌的编号:"+list);

//2、洗牌
Collections.shuffle(list);
System.out.println("洗好牌后,编号为:"+list);

//3、发牌
//3.1定义四个集合,分别表示三个玩家和底牌
List<Integer> user1=new ArrayList<>();
List<Integer> user2=new ArrayList<>();
List<Integer> user3=new ArrayList<>();
List<Integer> dipai=new ArrayList<>();
//3.2具体的发牌动作,将索引和3取模,决定发给谁
for (int i=0;i<list.size();i++) {
//获取编号
Integer pokerNum=list.get(i);
if(i>=list.size()-3){
dipai.add(pokerNum);
}else if(i%3==0){
user1.add(pokerNum);
}else if(i%3==1){
user2.add(pokerNum);
}else if(i%3==2){
user3.add(pokerNum);
}
}
//3.3查看玩家和底牌的编号
System.out.println("user1:"+user1);
System.out.println("user2:"+user2);
System.out.println("user3:"+user3);
System.out.println("dipai:"+dipai);
System.out.println("====================================");

//看牌
System.out.println("user1:"+printPoker(user1,pokers));
System.out.println("user2:"+printPoker(user2,pokers));
System.out.println("user3:"+printPoker(user3,pokers));
System.out.println("dipai:"+printPoker(dipai,pokers));
}


//定义一个方法用来看牌 printPoker,参数列表:List<Integer>,Map<Integer,String>
public static String printPoker(List<Integer> nums,Map<Integer,String> pokers){
//对牌的编号进行升序排列
Collections.sort(nums);
//遍历牌的编号集合,获取每一个编号,根据编号,在双列集合中查找该编号对应的具体牌
StringBuilder sb=new StringBuilder();
for (Integer num : nums) {
String poker=pokers.get(num);
//将获取到的牌进行拼接
sb.append(poker+" ");
}
//将最终结果返回
String str=sb.toString();
return str.trim();//移除首尾空格
}
}

猜你喜欢

转载自www.cnblogs.com/wyj96/p/11918696.html