- 创建扑克牌类
public class Poker {
private String content;//牌底=花色+数字
public Poker() {
}
public Poker(String content) {
this.content = content;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
@Override
public String toString() {
return content ;
}
}
2.创建玩家类
//定义一个玩家类
public class Player {
private String name;
//对应关系
//private Poker poker; //一一对应
private ArrayList<Poker> pokers;//一对多
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public ArrayList<Poker> getPokers() {
return pokers;
}
public void setPokers(ArrayList<Poker> pokers) {
this.pokers = pokers;
}
public Player() {
}
public Player(String name, ArrayList<Poker> pokers) {
this.name = name;
this.pokers = pokers;
}
@Override
public String toString() {
return "Player{" +
"name='" + name + '\'' +
", pokers=" + pokers +
'}';
}
}
3.定义工具类
//定义一个工具类
public class ToolsUtil {
//准备一个牌盒,用来存储牌
static ArrayList<Poker> pokerBox = new ArrayList<>();
//1.初始化 准备一副牌
public static ArrayList<Poker> initPoker() {
//准备花色
String[] color = {"红桃", "黑桃", "方块", "梅花"};
//准备数值
String[] nums = {"A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"};
//造牌
for (String s : color) {
for (String num : nums) {
//此时s和num就是元素内容
String card = s + num;
pokerBox.add(new Poker(card));
}
}
/*Poker poker=new Poker();*/
//存储大小王
pokerBox.add(new Poker("大王"));
pokerBox.add(new Poker("小王"));
return pokerBox;
}
//洗牌
public static ArrayList<Poker> shufflePoker(ArrayList<Poker> list) {
//打乱顺序
/* ArrayList<Poker> pokers = new ArrayList<>();
for (int i = 0; i < 54; i++) {
//随机索引
int index = (int) (Math.random() * list.size());
//Poker remove (index) 删除ArrayList容器中的
//指定元素,并且返回删除指定的元素
pokers.add(list.remove(index));
}
return pokers;*/
Collections.shuffle(list);
return list;
}
//看牌 三个玩家的牌 可变参数列表
public static void checkUp(Poker[] dipai, Player... players) {
System.out.println("明牌");
//非空校验
if (dipai != null && players.length != 0 && players != null) {
for (int i = 0; i < players.length; i++) {
//3个玩家的牌 在ArrayList类中有重写的toString()方法可以直接打印
//如果使用可变参数列表,player相当于一个数组Player[] players
System.out.println("玩家" + players[i].getName() + ":" + players[i].getPokers());
}
//查看底牌 Arrays.toString(数组类型变量)
System.out.println(Arrays.toString(dipai));
}
}
}
4.测试类
//测试类
public class Test {
public static void main(String[] args) {
//准备牌
ArrayList<Poker> pokers = ToolsUtil.initPoker();
System.out.println(pokers);
// 洗牌
ArrayList<Poker> pokersBox = ToolsUtil.shufflePoker(pokers);
// 发牌
//准备三个玩家 创建3个玩家对象
Player player2 = new Player("小明", new ArrayList<>());
Player player1= new Player("小刘", new ArrayList<>());
Player player = new Player("小张", new ArrayList<>());
Poker[] diapi= new Poker[3];
//模拟3个玩家轮流摸牌
for (int i = 0; i < pokersBox.size(); i++) {
//获取牌面
Poker poker = pokersBox.get(i);
//留出三张底牌存储到底牌数组中
if(i>=51){ //当i=51时,i-51=0...
diapi[i-51]=poker;
System.out.println(poker);
}else {
if(i%3==0){
player.getPokers().add(poker);
}else if(i%3==1){
player1.getPokers().add(poker);
}else{
player2.getPokers().add(poker);
}
}
}
ToolsUtil.checkUp(diapi, player,player1,player2);
}
}