Java 纸牌游戏:模拟扑克牌比大小
Java 纸牌游戏:模拟扑克牌比大小
本文将使用 Java 语言编写一个模拟纸牌游戏的软件,实现两名玩家比大小的功能。游戏包含以下步骤:
-
创建一副扑克牌
- 包括四种花色:黑桃、红桃、梅花、方片。
- 包括十三种点数:2-10、J、Q、K、A。
-
创建两名玩家
- 玩家至少要有 ID(由玩家自己创建)、姓名和手牌等属性。
- 手牌为扑克牌的集合。
-
随机洗牌
- 将创建好的扑克牌进行随机洗牌。
-
发牌
- 从洗牌后的扑克牌的第一张开始,发给每个玩家,按照一人一张的方式,每人发三张牌。
-
比较大小
- 比较两名玩家手中的扑克牌,比较规则为:
- 取两人各自手中点数最大的牌进行比较,点数大的赢。
- 若两人各自的点数最大的牌相等,则再按照花色比较,大小由黑(4)、红(3)、梅(2)、方(1)决定,花色大者获胜。
- 比较两名玩家手中的扑克牌,比较规则为:
-
输出结果
- 输出比较结果,显示获胜者的 ID 和手牌。
代码实现
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class Poker {
private List<Card> cards;
public Poker() {
cards = new ArrayList<>();
for (int i = 2; i <= 10; i++) {
cards.add(new Card('黑桃', i));
cards.add(new Card('红桃', i));
cards.add(new Card('梅花', i));
cards.add(new Card('方片', i));
}
cards.add(new Card('黑桃', 'J'));
cards.add(new Card('黑桃', 'Q'));
cards.add(new Card('黑桃', 'K'));
cards.add(new Card('黑桃', 'A'));
cards.add(new Card('红桃', 'J'));
cards.add(new Card('红桃', 'Q'));
cards.add(new Card('红桃', 'K'));
cards.add(new Card('红桃', 'A'));
cards.add(new Card('梅花', 'J'));
cards.add(new Card('梅花', 'Q'));
cards.add(new Card('梅花', 'K'));
cards.add(new Card('梅花', 'A'));
cards.add(new Card('方片', 'J'));
cards.add(new Card('方片', 'Q'));
cards.add(new Card('方片', 'K'));
cards.add(new Card('方片', 'A'));
}
public void shuffle() {
Collections.shuffle(cards);
}
public Card getCard() {
if (cards.size() > 0) {
return cards.remove(0);
}
return null;
}
}
class Card implements Comparable<Card> {
private String suit;
private String rank;
private int point;
public Card(String suit, int point) {
this.suit = suit;
this.point = point;
this.rank = String.valueOf(point);
}
public Card(String suit, String rank) {
this.suit = suit;
this.rank = rank;
if (rank.equals('J')) {
point = 11;
} else if (rank.equals('Q')) {
point = 12;
} else if (rank.equals('K')) {
point = 13;
} else if (rank.equals('A')) {
point = 14;
}
}
public String getSuit() {
return suit;
}
public String getRank() {
return rank;
}
public int getPoint() {
return point;
}
@Override
public int compareTo(Card o) {
if (point > o.point) {
return 1;
} else if (point < o.point) {
return -1;
} else {
int s1 = getSuitValue(suit);
int s2 = getSuitValue(o.getSuit());
if (s1 > s2) {
return 1;
} else if (s1 < s2) {
return -1;
} else {
return 0;
}
}
}
private int getSuitValue(String suit) {
if (suit.equals('黑桃')) {
return 4;
} else if (suit.equals('红桃')) {
return 3;
} else if (suit.equals('梅花')) {
return 2;
} else if (suit.equals('方片')) {
return 1;
}
return 0;
}
@Override
public String toString() {
return suit + rank;
}
}
class Player {
private String id;
private String name;
private List<Card> hand;
public Player(String id, String name) {
this.id = id;
this.name = name;
hand = new ArrayList<>();
}
public void addCard(Card card) {
hand.add(card);
}
public void sortHand() {
Collections.sort(hand);
}
public Card getMaxCard() {
if (hand.size() > 0) {
sortHand();
return hand.get(hand.size() - 1);
}
return null;
}
public String getId() {
return id;
}
public String getName() {
return name;
}
public List<Card> getHand() {
return hand;
}
}
class Game {
private Poker poker;
private Player player1;
private Player player2;
public Game(String id1, String name1, String id2, String name2) {
poker = new Poker();
player1 = new Player(id1, name1);
player2 = new Player(id2, name2);
}
public void start() {
poker.shuffle();
for (int i = 0; i < 3; i++) {
player1.addCard(poker.getCard());
player2.addCard(poker.getCard());
}
System.out.println(player1.getName() + '的手牌:' + player1.getHand());
System.out.println(player2.getName() + '的手牌:' + player2.getHand());
Card maxCard1 = player1.getMaxCard();
Card maxCard2 = player2.getMaxCard();
if (maxCard1.compareTo(maxCard2) > 0) {
System.out.println(player1.getName() + '获胜!');
System.out.println('最大的牌是:' + maxCard1);
} else if (maxCard1.compareTo(maxCard2) < 0) {
System.out.println(player2.getName() + '获胜!');
System.out.println('最大的牌是:' + maxCard2);
} else {
System.out.println('平局!');
System.out.println('最大的牌是:' + maxCard1);
}
}
public static void main(String[] args) {
Game game = new Game('001', '小明', '002', '小红');
game.start();
}
}
代码说明
- Poker 类: 代表一副扑克牌,包含创建、洗牌、发牌等功能。
- Card 类: 代表一张扑克牌,包含花色、点数、比较大小等功能。
- Player 类: 代表一个玩家,包含 ID、姓名、手牌等功能。
- Game 类: 代表游戏,包含开始游戏、发牌、比较大小、输出结果等功能。
运行结果
程序运行后,将会输出两名玩家的手牌和最终的获胜者以及最大的牌。
总结
本文通过 Java 代码实现了简单的纸牌游戏,通过该例子,可以了解如何使用 Java 进行面向对象的编程,以及如何实现简单的游戏逻辑。
原文地址: https://www.cveoy.top/t/topic/oQXj 著作权归作者所有。请勿转载和采集!