栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

慕课Java3 简易扑克牌游戏

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

慕课Java3 简易扑克牌游戏

代码是在一个文件里的写的,完整性强,基本都有注释

代码中未使用到 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 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 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 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 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 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;
    }
}

希望对暂时没有头绪的初学者朋友有一定借鉴作用,代码有什么不对之处也欢迎指正(●’◡’●)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/237240.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号