Java 扑克牌游戏:规则、代码和类关系图
Java 扑克牌游戏:规则、代码和类关系图
这是一款简单的 Java 扑克牌游戏,其规则如下:
- 玩家:2 名玩家
- 牌:一副标准的 52 张扑克牌
- 游戏流程:
- 玩家输入 ID 和姓名
- 洗牌
- 每个玩家发 3 张牌
- 比较玩家手中最大的牌,点数大者获胜,点数相同则比较花色,花色顺序为:黑桃 > 红桃 > 梅花 > 方片
- 显示玩家手牌
以下是用 Java 代码实现的这个游戏:
import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;
public class CardGame {
public static void main(String[] args) {
// 创建一副扑克牌
ArrayList<Card> poker = new ArrayList<>();
String[] suits = {'黑桃', '红桃', '梅花', '方片'};
String[] ranks = {'2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K', 'A'};
for (String suit : suits) {
for (String rank : ranks) {
poker.add(new Card(suit, rank));
}
}
// 创建两名玩家
Scanner scanner = new Scanner(System.in);
System.out.println("请输入玩家1的ID:");
String id1 = scanner.next();
System.out.println("请输入玩家1的姓名:");
String name1 = scanner.next();
Player player1 = new Player(id1, name1);
System.out.println("请输入玩家2的ID:");
String id2 = scanner.next();
System.out.println("请输入玩家2的姓名:");
String name2 = scanner.next();
Player player2 = new Player(id2, name2);
// 洗牌
Collections.shuffle(poker);
// 发牌
for (int i = 0; i < 3; i++) {
player1.addCard(poker.remove(0));
player2.addCard(poker.remove(0));
}
// 比较大小
Card maxCard1 = player1.getMaxCard();
Card maxCard2 = player2.getMaxCard();
if (maxCard1.compareTo(maxCard2) > 0) {
System.out.println(player1.getName() + "赢了!");
} else if (maxCard1.compareTo(maxCard2) < 0) {
System.out.println(player2.getName() + "赢了!");
} else {
if (maxCard1.getSuitValue() > maxCard2.getSuitValue()) {
System.out.println(player1.getName() + "赢了!");
} else if (maxCard1.getSuitValue() < maxCard2.getSuitValue()) {
System.out.println(player2.getName() + "赢了!");
} else {
System.out.println("平局!");
}
}
// 显示手牌
player1.showCards();
player2.showCards();
}
}
class Card implements Comparable<Card> {
private String suit; // 花色
private String rank; // 点数
public Card(String suit, String rank) {
this.suit = suit;
this.rank = rank;
}
public String getSuit() {
return suit;
}
public String getRank() {
return rank;
}
public int getSuitValue() {
if (suit.equals("黑桃")) {
return 4;
} else if (suit.equals("红桃")) {
return 3;
} else if (suit.equals("梅花")) {
return 2;
} else {
return 1;
}
}
@Override
public int compareTo(Card o) {
if (this.rank.equals("A")) {
return 1;
} else if (o.getRank().equals("A")) {
return -1;
} else {
return Integer.compare(getRankValue(), o.getRankValue());
}
}
private int getRankValue() {
if (rank.equals("J")) {
return 11;
} else if (rank.equals("Q")) {
return 12;
} else if (rank.equals("K")) {
return 13;
} else {
return Integer.parseInt(rank);
}
}
@Override
public String toString() {
return suit + rank;
}
}
class Player {
private String id; // ID
private String name; // 姓名
private ArrayList<Card> cards; // 手牌
public Player(String id, String name) {
this.id = id;
this.name = name;
this.cards = new ArrayList<>();
}
public String getId() {
return id;
}
public String getName() {
return name;
}
public void addCard(Card card) {
cards.add(card);
}
public Card getMaxCard() {
Card maxCard = cards.get(0);
for (int i = 1; i < cards.size(); i++) {
if (cards.get(i).compareTo(maxCard) > 0) {
maxCard = cards.get(i);
}
}
return maxCard;
}
public void showCards() {
System.out.println(name + "的手牌:");
for (Card card : cards) {
System.out.print(card + " ");
}
System.out.println();
}
}
类关系图

解释:
- Card类和Player类之间是聚合关系,即一个Player对象包含多个Card对象。
- Card类实现了Comparable接口,用于实现卡牌的比较。
- CardGame类中使用了Card和Player类,用于实现一局扑克牌游戏的逻辑。
希望这篇文章能够帮助你理解如何使用 Java 来创建一个简单的扑克牌游戏,并对类的关系图有一个更深的了解。
注意: 为了更好地理解代码,你也可以将这段代码复制到你的 IDE 中运行。
更多功能:
如果你想要添加更多功能到这个游戏,例如:
- 玩家出牌
- 多轮游戏
- 计分系统
你可以参考本篇文章的代码并进行拓展。
原文地址: https://www.cveoy.top/t/topic/oRdH 著作权归作者所有。请勿转载和采集!