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();
}
}
类关系图:
CardGame
/ \
/ \
Card Player
^
|
Card
解释:
- CardGame 类是游戏的入口,负责创建牌、玩家、洗牌、发牌、比较大小以及显示手牌等操作。
- Card 类代表一张牌,包含花色和点数。
- Player 类代表一名玩家,包含ID、姓名和手牌。
代码说明:
- **创建一副扑克牌:**代码使用两个字符串数组
suits和ranks来表示花色和点数,然后使用嵌套循环遍历所有可能的组合,创建Card对象并添加到poker数组中。 - **创建两名玩家:**代码使用
Scanner类从控制台获取玩家的ID和姓名,创建Player对象。 - **洗牌:**代码使用
Collections.shuffle()方法随机打乱poker数组。 - **发牌:**代码使用
poker.remove(0)方法依次从poker数组中移除牌,并分别添加到两个玩家的手牌中。 - **比较大小:**代码首先比较两名玩家手牌中的最大牌,如果最大牌相同,则比较花色,最后根据比较结果打印出获胜者。
- **显示手牌:**代码使用
Player.showCards()方法显示两名玩家的手牌。
总结:
本代码示例提供了一个简单的扑克牌游戏,可以帮助初学者了解Java面向对象编程的基本概念,如类、对象、方法、属性、继承、多态等。
其他建议:
- 可以考虑添加更多游戏功能,例如:
- 可以添加更多玩家,
- 可以添加更多回合,
- 可以添加更多玩法,例如比点数、比花色等。
- 可以使用图形界面来改善游戏体验,例如使用 Swing 或 JavaFX。
- 可以使用单元测试来验证代码的正确性。
希望本代码示例对您有所帮助!
原文地址: https://www.cveoy.top/t/topic/oR6d 著作权归作者所有。请勿转载和采集!