Java 扑克牌游戏:规则、代码和类关系图
Java 扑克牌游戏:规则、代码和类关系图
这是一个简单的 Java 扑克牌游戏,规则如下:
- 游戏使用标准的 52 张扑克牌。
- 玩家数量为 2 人。
- 每位玩家发 3 张牌。
- 玩家通过比较手牌中最大的牌来决定胜负。
- 牌的大小比较规则如下:
- 点数:A 最大,然后是 K、Q、J、10、9、8、7、6、5、4、3、2。
- 花色:黑桃 > 红桃 > 梅花 > 方片。
- 如果两位玩家最大的牌点数和花色相同,则为平局。
代码实现
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 |
+----------------+ +-----------------+
| - suit: String | | - id: String |
| - rank: String | | - name: String |
+----------------+ | - cards: ArrayList<Card> |
| + getSuit(): String | | + addCard(card: Card): void |
| + getRank(): String | | + getMaxCard(): Card |
| + getSuitValue(): int | | + showCards(): void |
| + compareTo(o: Card): int | + getId(): String |
| + toString(): String | | getName(): String |
+----------------+ +-----------------+
^ ^
| |
| |
+------------------+ +-----------------+
| CardGame | | Scanner |
+------------------+ +-----------------+
| - main(args: String[]): void | |
+------------------+ +-----------------+
解释:
Card类表示一张扑克牌,包含花色和点数。Player类表示一名玩家,包含 ID、姓名和手牌。CardGame类是游戏的主类,负责游戏逻辑,包括创建牌堆、发牌、比较牌的大小和显示结果。
总结
本文介绍了一个简单的 Java 扑克牌游戏,包含游戏规则、代码实现和类关系图。通过这个例子,您可以学习如何使用 Java 实现一个简单的游戏,并了解面向对象编程中的类关系。
原文地址: https://www.cveoy.top/t/topic/oR1e 著作权归作者所有。请勿转载和采集!