代码是在一个文件里的写的,完整性强,基本都有注释
代码中未使用到 Comparable 和 Comparator,对输入没有进行检索
运行图如下:
代码如下
package 集合.慕课简易扑克牌游戏;
import java.util.*;
public class EasyPoker {
public static void main(String[] args) {
// 构建牌组管理器
PokerManager PokerM = new PokerManager();
// 构建玩家管理器
PlayerManager PlayerM = new PlayerManager();
// 创建牌组
PokerM.createPoker();
// 创建玩家
PlayerM.createTwoPlayer();
// 欢迎用语
for (Player player : PlayerM.players) System.out.println("- - - -> 欢迎玩家:" + player.getName());
// 玩家拿牌
PokerM.dealCards(PlayerM.players);
// 打印玩家的牌
PokerM.showCards(PlayerM.players);
// 输出玩家手中最大的牌,得到胜利者
PokerM.maxPoker(PlayerM.players);
}
}
// 扑克牌基本属性
class Poker
{
private final PokerType type;
private final String dot;
public Poker(PokerType type, String dot) {
this.type = type;
this.dot = dot;
}
// 重写 toString,直接打印 花色+点数
public String toString(){
return this.type.getPic() + this.dot;
}
public PokerType getType() {
return type;
}
public String getDot() {
return dot;
}
}
// 扑克管理器
class PokerManager
{
// 创建牌组集合
ArrayList<Poker> pokers = new ArrayList<>();
// 创建牌组并洗牌
public void createPoker(){
System.out.println("- - - - - - - - - - 开始创建扑克牌!- - - - - - - - - -");
for (int i = 0; i < Constant.DOTS.length; i++){
// 遍历 2-A
String dot = Constant.DOTS[i];
for (int j = 0; j < Constant.TYPE.length; j++){
// 遍历 四种花色
PokerType type = Constant.TYPE[j];
// 添加牌到牌组中
pokers.add(new Poker(type, dot));
}
}
System.out.println("- - - - - - - - - - 扑克牌创建成功!- - - - - - - - - -");
System.out.println("- - - - - - - - - - 开始洗牌!- - - - - - - - - - - -");
// 打乱集合顺序
Collections.shuffle(pokers);
System.out.println("- - - - - - - - - - 洗牌结束!- - - - - - - - - - - -");
}
// 发牌
public void dealCards(ArrayList<Player> players){
System.out.println("- - - - - - - - - - 开始发牌 - - - - - - - - - -");
for (Player player : players) {
// 从玩家集合中分别取出玩家拿牌
for (int j = 0; j < player.pokerT.length; j++) {
// 因为顺序已经打乱,每次获取第一张即可
player.pokerT[j] = pokers.get(0);
// 取完即删,不会获得重复扑克牌
pokers.remove(0);
}
System.out.println("- - - -> 玩家:" + player.getName() + " 已拿牌");
}
}
// 打印牌的信息
public void showCards(ArrayList<Player> players){
System.out.println("- - - -> 玩家各自的手牌为:");
for (Player player : players) {
System.out.println("- - - -> "+ player.getName() + Arrays.toString(player.pokerT));
}
}
// 比较两张牌的大小,并返回大的那个
public Poker comparePoker(Poker p1, Poker p2){
// 按 2-A 的索引取大小
if (Arrays.asList(Constant.DOTS).indexOf(p1.getDot()) > Arrays.asList(Constant.DOTS).indexOf(p2.getDot())) return p1;
// 同上
else if (Arrays.asList(Constant.DOTS).indexOf(p1.getDot()) < Arrays.asList(Constant.DOTS).indexOf(p2.getDot())) return p2;
// 按花色取大小,黑红梅方,ID依次变小
else
if (p1.getType().getId() > p2.getType().getId()) return p1;
else return p2;
}
// 输入两个玩家各自手中最大的牌,并进行比较,得出胜者
public void maxPoker(ArrayList<Player> players){
// 创建一个数组来保存2个玩家最大值
Poker[] pokerArr = new Poker[2];
for (int i = 0; i < players.size(); i++){
Player player = players.get(i);
// 取得其一最大值
Poker p = comparePoker(player.pokerT[0], player.pokerT[1]);
// 添加进数组
pokerArr[i] = p;
// 打印2个玩家的手牌信息
System.out.println("- - - -> 玩家:" + player.getName() + " 最大的手牌为:" + p.toString());
}
// 对比2个最大值得到最终最大扑克牌
Poker winPoker = comparePoker(pokerArr[0], pokerArr[1]);
for (Player player : players){
// 属于哪个玩家的,就是谁获胜
if (Arrays.asList(player.pokerT).contains(winPoker)) System.out.println("- - - -> 玩家:" + player.getName() + " 获胜!");
}
}
}
// 玩家基本属性
class Player
{
private final String name;
// 每个玩家2张牌,用数组来保存
public Poker[] pokerT = new Poker[2];
public Player(String name){
this.name = name;
}
public String getName(){
return this.name;
}
}
// 玩家管理器
class PlayerManager
{
// 创建玩家集合
ArrayList<Player> players = new ArrayList<>();
// 创建两个玩家
public void createTwoPlayer(){
Scanner in = new Scanner(System.in);
for (int i = 1; i < 3; i++){
System.out.println("- - - -> 请输入第" + i + "位玩家的姓名:");
String name = in.next();
// 添加玩家对象到集合中
players.add(new Player(name));
}
in.close();
}
}
// 常数类,用来放置不变类型
class Constant
{
// 方便后面通过索引位置比较大小
public static final String[] DOTS = {"2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A"};
public static final PokerType[] TYPE = {PokerType.SPADES, PokerType.HEARTS, PokerType.CLUBS, PokerType.DIAMOND};
}
// 设置扑克类型
class PokerType
{
private final String pic;
private final int id;
public PokerType(String pic, int id){
this.pic = pic;
this.id = id;
}
// 定义四个花色的构造器
public static final PokerType SPADES = new PokerType("黑桃", 4);
public static final PokerType HEARTS = new PokerType("红桃", 3);
public static final PokerType CLUBS = new PokerType("梅花", 2);
public static final PokerType DIAMOND = new PokerType("方块", 1);
// 获取花色,用来打印扑克牌信息
public String getPic(){
return this.pic;
}
// 获取id,后面用来比较同点数时比较花色用
public int getId(){
return this.id;
}
}
希望对暂时没有头绪的初学者朋友有一定借鉴作用,代码有什么不对之处也欢迎指正(●’◡’●)
热门评论
作者实在是太厉害了,膜拜一下。写的很清晰,结构很容易懂