用JAVA帮我写一个塔牌小游戏
时间: 2023-10-27 21:04:33 浏览: 62
好的,以下是一个简单的塔牌小游戏的JAVA代码,供您参考:
```java
import java.util.*;
public class TowerDefenseGame {
// 初始化玩家和敌人的初始属性
private static final int PLAYER_HEALTH = 10;
private static final int ENEMY_HEALTH = 5;
private static final int PLAYER_GOLD = 50;
private static final int ENEMY_GOLD = 10;
// 初始化塔牌卡牌属性
private static int[] cardCosts = {5, 10, 15, 20, 25};
private static int[] cardDamages = {2, 4, 6, 8, 10};
// 主程序
public static void main(String[] args) {
// 初始化玩家和敌人
int playerHealth = PLAYER_HEALTH;
int playerGold = PLAYER_GOLD;
int enemyHealth = ENEMY_HEALTH;
int enemyGold = ENEMY_GOLD;
// 初始化塔牌卡组和场上卡牌
List<Integer> deck = new ArrayList<>();
for (int i = 0; i < cardCosts.length; i++) {
deck.add(i);
}
List<Integer> hand = new ArrayList<>();
List<Integer> field = new ArrayList<>();
// 开始游戏
while (true) {
// 玩家回合
playerTurn(playerHealth, playerGold, enemyHealth, field, hand, deck);
if (enemyHealth <= 0) {
System.out.println("You win!");
break;
}
// 敌人回合
enemyTurn(playerHealth, playerGold, enemyHealth, field, hand, deck);
if (playerHealth <= 0) {
System.out.println("You lose...");
break;
}
}
}
// 玩家回合
private static void playerTurn(int playerHealth, int playerGold, int enemyHealth,
List<Integer> field, List<Integer> hand, List<Integer> deck) {
System.out.println("Player's turn: ");
// 抽牌
if (deck.isEmpty()) {
playerHealth--;
System.out.println("Out of cards, lose 1 health");
} else {
int cardIndex = new Random().nextInt(deck.size());
int card = deck.remove(cardIndex);
hand.add(card);
System.out.println("Draw a card: " + card);
}
// 出牌
List<Integer> canPlay = new ArrayList<>();
for (int i = 0; i < hand.size(); i++) {
int card = hand.get(i);
if (cardCosts[card] <= playerGold) {
canPlay.add(i);
}
}
if (canPlay.isEmpty()) {
System.out.println("No card can be played.");
} else {
int playIndex = canPlay.get(new Random().nextInt(canPlay.size()));
int card = hand.remove(playIndex);
playerGold -= cardCosts[card];
field.add(card);
System.out.println("Play a card: " + card);
}
// 攻击敌人
int damage = 0;
for (int card : field) {
damage += cardDamages[card];
}
enemyHealth -= damage;
System.out.println("Enemy's health: " + enemyHealth);
// 结束回合
System.out.println("Player's gold: " + playerGold);
System.out.println("Player's health: " + playerHealth);
System.out.println("Player's field: " + field);
System.out.println("Player's hand: " + hand);
System.out.println("Deck size: " + deck.size());
System.out.println("--------------------------");
}
// 敌人回合
private static void enemyTurn(int playerHealth, int playerGold, int enemyHealth,
List<Integer> field, List<Integer> hand, List<Integer> deck) {
System.out.println("Enemy's turn: ");
// 抽牌
if (deck.isEmpty()) {
enemyHealth--;
System.out.println("Out of cards, lose 1 health");
} else {
int cardIndex = new Random().nextInt(deck.size());
int card = deck.remove(cardIndex);
hand.add(card);
System.out.println("Enemy draw a card.");
}
// 出牌
List<Integer> canPlay = new ArrayList<>();
for (int i = 0; i < hand.size(); i++) {
int card = hand.get(i);
if (cardCosts[card] <= enemyGold) {
canPlay.add(i);
}
}
if (canPlay.isEmpty()) {
System.out.println("Enemy has no card to play.");
} else {
int playIndex = canPlay.get(new Random().nextInt(canPlay.size()));
int card = hand.remove(playIndex);
enemyGold -= cardCosts[card];
field.add(card);
System.out.println("Enemy play a card.");
}
// 攻击玩家
int damage = 0;
for (int card : field) {
damage += cardDamages[card];
}
playerHealth -= damage;
System.out.println("Player's health: " + playerHealth);
// 结束回合
enemyGold += 10;
System.out.println("Enemy's gold: " + enemyGold);
System.out.println("Enemy's health: " + enemyHealth);
System.out.println("Enemy's field: " + field);
System.out.println("Enemy's hand: " + hand);
System.out.println("Deck size: " + deck.size());
System.out.println("--------------------------");
}
}
```
该游戏简单实现了玩家和敌人的回合制塔牌对战,玩家需要通过抽牌、出牌和攻击敌人来获胜。