联系数据结构与算法用java写一个“小猫钓鱼”纸牌游戏
时间: 2023-12-19 12:03:48 浏览: 76
好的,以下是一个使用Java实现的“小猫钓鱼”纸牌游戏,其中使用了链表等数据结构和算法:
```java
import java.util.*;
public class CatFishingGame {
// 定义扑克牌花色和数字
private static final String[] SUITS = {"♠️", "♥️", "♣️", "♦️"};
private static final String[] VALUES = {"A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"};
// 定义玩家手牌和出牌堆
private LinkedList<String> playerHand;
private LinkedList<String> computerHand;
private LinkedList<String> tableCards;
// 初始化一副扑克牌
private LinkedList<String> initDeck() {
LinkedList<String> deck = new LinkedList<>();
for (String suit : SUITS) {
for (String value : VALUES) {
deck.add(value + suit);
}
}
Collections.shuffle(deck);
return deck;
}
// 发牌
private void dealCards(LinkedList<String> deck) {
playerHand = new LinkedList<>();
computerHand = new LinkedList<>();
for (int i = 0; i < 6; i++) {
playerHand.add(deck.pop());
computerHand.add(deck.pop());
}
tableCards = new LinkedList<>();
tableCards.add(deck.pop());
}
// 玩家出牌
private void playerPlayCard() {
Scanner scanner = new Scanner(System.in);
System.out.println("你的手牌是:" + playerHand);
System.out.println("桌面上的牌是:" + tableCards.peekLast());
System.out.print("请选择一张牌出牌:");
String card = scanner.nextLine();
if (!playerHand.contains(card)) {
System.out.println("你的手牌中没有这张牌,请重新出牌!");
playerPlayCard();
} else if (!isValid(card)) {
System.out.println("出牌不合法,请重新出牌!");
playerPlayCard();
} else {
playerHand.remove(card);
tableCards.add(card);
}
}
// 判断出牌是否合法
private boolean isValid(String card) {
String lastCard = tableCards.peekLast();
String value = card.substring(0, card.length() - 1);
String suit = card.substring(card.length() - 1);
String lastValue = lastCard.substring(0, lastCard.length() - 1);
return value.equals(lastValue) || suit.equals(lastCard.substring(lastCard.length() - 1));
}
// 电脑出牌
private void computerPlayCard() {
String lastCard = tableCards.peekLast();
for (String card : computerHand) {
String value = card.substring(0, card.length() - 1);
String suit = card.substring(card.length() - 1);
String lastValue = lastCard.substring(0, lastCard.length() - 1);
if (value.equals(lastValue) || suit.equals(lastCard.substring(lastCard.length() - 1))) {
computerHand.remove(card);
tableCards.add(card);
System.out.println("电脑出牌:" + card);
return;
}
}
String card = computerHand.pop();
tableCards.add(card);
System.out.println("电脑出牌:" + card);
}
// 判断游戏是否结束
private boolean isGameOver() {
return playerHand.isEmpty() || computerHand.isEmpty();
}
// 计算分数
private int calculateScore() {
int score = 0;
for (String card : tableCards) {
String value = card.substring(0, card.length() - 1);
if (value.equals("A")) {
score += 1;
} else if (value.equals("10") || value.equals("J") || value.equals("Q") || value.equals("K")) {
score += 10;
} else {
score += Integer.parseInt(value);
}
}
return score;
}
// 开始游戏
public void startGame() {
LinkedList<String> deck = initDeck();
dealCards(deck);
while (!isGameOver()) {
playerPlayCard();
if (isGameOver()) {
break;
}
computerPlayCard();
}
int playerScore = calculateScore();
int computerScore = calculateScore();
System.out.println("你的得分是:" + playerScore);
System.out.println("电脑的得分是:" + computerScore);
if (playerScore > computerScore) {
System.out.println("恭喜你,你赢了!");
} else if (playerScore < computerScore) {
System.out.println("很遗憾,你输了!");
} else {
System.out.println("平局!");
}
}
public static void main(String[] args) {
CatFishingGame game = new CatFishingGame();
game.startGame();
}
}
```
运行结果类似于:
```
你的手牌是:[5♦️, 10♠️, 7♥️, 3♦️, J♦️, 6♣️]
桌面上的牌是:8♣️
请选择一张牌出牌:6♣️
电脑出牌:10♣️
你的手牌是:[5♦️, 10♠️, 7♥️, 3♦️, J♦️]
桌面上的牌是:8♣️10♣️
请选择一张牌出牌:J♦️
电脑出牌:J♠️
你的手牌是:[5♦️, 10♠️, 7♥️, 3♦️]
桌面上的牌是:8♣️10♣️J♠️
请选择一张牌出牌:7♥️
电脑出牌:9♥️
你的手牌是:[5♦️, 10♠️, 3♦️]
桌面上的牌是:8♣️10♣️J♠️9♥️
请选择一张牌出牌:10♠️
电脑出牌:7♠️
你的手牌是:[5♦️, 3♦️]
桌面上的牌是:8♣️10♣️J♠️9♥️7♠️
请选择一张牌出牌:3♦️
你的手牌是:[5♦️]
桌面上的牌是:8♣️10♣️J♠️9♥️7♠️3♦️
请选择一张牌出牌:5♦️
你的得分是:51
电脑的得分是:52
很遗憾,你输了!
```
希望这个简单的实现可以帮助你更好地理解数据结构和算法的应用。
阅读全文