工具类
package com.homework;
import java.util.ArrayList;
import java.util.Arrays;
// 定义一个工具类
public class ToolsUtil {
// 准备一个牌盒用来存储牌
static ArrayList<Poker> pokerBox = new ArrayList<>();
// 初始化牌盒,准备一副新牌
public static ArrayList<Poker> initPoker(){
// 1.1 准备花色数组
String[] colors = {"♥","♠","♦","♣"};
// 1.2 准备数字数组
String[] numbers = {"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
// 1.3 创造牌 拼接牌
// 双重for循环,增强for循环 foreach
for (String color : colors) {
//
for (String number : numbers) {
String content = color + number;
pokerBox.add(new Poker(content)); // 使用全参构造
}
}
// 1.4 存储大王小王
// 存储的都是对象
pokerBox.add(new Poker("大王"));
pokerBox.add(new Poker("小王"));
// 最后把组装好的牌,返回给方法
return pokerBox;
}
// 2. 洗牌
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()));
pokers.add(list.remove(index));
// Poker remove(index) 删除ArrayList容器中的指定元素
// 并返回删除指定的元素
}
return pokers;
}
// 3.看牌 三个玩家的牌 和 底牌 ,可变参数列表
// 知识点:可变参数列表放最后
// String[] cards 底牌
public static void checkup(Poker[] cards,Player ... players){
System.out.println("三位玩家和底牌依次为: ");
//非空校验
if(cards != null && players!=null && players.length!= 0){
// 遍历是N个玩家的牌,
// 如果使用可变参数列表, player相当于是一个数组,不是对象!!!!
// players 相当于是一个数组Player[] players;
for (int i = 0; i < players.length; i++) {
// 一个一个玩家,在ArrayList类中有重写的toString方法.
// player[i] == poker 其中一个玩家
System.out.println("玩家"+players[i].getName()+"的牌是:"+players[i].getPokers());
}
// 查看底牌
// String[] cards 底牌
// Arrays.toString(数组类型的变量)
System.out.println(Arrays.toString(cards));
}
}
}
定义一个poker类
package com.homework;
// 定义一个poker类
public class Poker {
// 属性
private String content;
// 牌底 = 花色 + 数字
// 当打印poker类对象时,只想查看该牌的内容
// 默认调用
@Override
public String toString() {
return content ;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public Poker() {
}
public Poker(String content) {
this.content = content;
}
}
定义一个玩家类
package com.homework;
import java.util.ArrayList;
// 定义一个【玩家类】
public class Player {
//
private String name;
// 对应关系
// private Poker poker;
// 一一对应的关系
// 一对多关系
private ArrayList<Poker> pokers;
@Override
public String toString() {
return "Player{" +
"name='" + name + '\'' +
", pokers=" + pokers +
'}';
}
public Player() {
}
public Player(String name, ArrayList<Poker> pokers) {
this.name = name;
this.pokers = 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;
}
}
主函数类
package com.homework;
import java.util.ArrayList;
// 定义一个主启动类
public class MainProgram {
//
public static void main(String[] args) {
// 1.准备牌
ArrayList<Poker> pokers = ToolsUtil.initPoker();
System.out.println(pokers);
// 2.洗牌
ArrayList<Poker> pokersBox = ToolsUtil.shufflePoker(pokers);
// 3.发牌
// 准备三个玩家,创建三个Player对象 Ctrl+D
Player p1 = new Player("小明", new ArrayList<>());
Player p2 = new Player("小刘", new ArrayList<>());
Player p3 = new Player("小王", new ArrayList<>());
// 准备底牌
Poker[] cards = new Poker[3];
// 准备三个玩家轮流摸牌,通过索引操作[0,53] 底牌的索引是 51,52,53
// 遍历
for (int i = 0; i < pokersBox.size(); i++) {
// 获取纸牌
Poker poker = pokersBox.get(i);
// 流出三张底牌,存储到底牌数组中
if (i >= 51) {
// 数组存储,越界,i-51后
// cards 的索引是0 1 2
cards[i - 51] = poker;
// 当i=51的时候i-51 = 0
} else {
// 玩家抽牌
if (i % 3 == 0) {
// 第一个玩家
p1.getPokers().add(poker);
// ArrayList 中增加用add
} else if (i % 3 == 1) {
// 第二个玩家
p2.getPokers().add(poker);
} else if (i % 3 == 2) {
// 第三个玩家
p3.getPokers().add(poker);
}
}
}
// 4.看牌
ToolsUtil.checkup(cards,p1,p2,p3);
}
}