题目:编写一个Java程序,模拟实现太空侵略者游戏。(进阶)

题目:编写一个Java程序,模拟实现一个简单的太空侵略者游戏。

要求:

  • 游戏界面由一个二维字符数组表示;
  • 初始时,玩家在地图的底部中间位置,用P表示;
  • 敌人随机出现在地图顶部的不同位置,用E表示;
  • 玩家可以向左(W)或向右(D)移动,但不能超出地图边界;
  • 如果玩家与敌人在同一行相遇,则游戏结束;
  • 每次玩家移动后,所有敌人向下移动一格;
  • 当敌人到达地图底部时,游戏结束;
  • 输入指令可以是 W, D, 或者 Q(退出游戏)。

示例代码:

import java.util.Random;
import java.util.Scanner;

public class SpaceInvaders {
    private static final int FIELD_WIDTH = 10;
    private static final int FIELD_HEIGHT = 10;
    private static final char PLAYER = 'P';
    private static final char ENEMY = 'E';
    private static final char EMPTY = ' ';
    
    private char[][] field;
    private int playerPositionX;
    private int enemyPositionY;
    
    public SpaceInvaders() {
        // 初始化游戏场地和玩家位置
        this.field = new char[FIELD_HEIGHT][FIELD_WIDTH];
        for (int i = 0; i < FIELD_HEIGHT; i++) {
            for (int j = 0; j < FIELD_WIDTH; j++) {
                if (i == FIELD_HEIGHT - 1 && j == playerPositionX) {
                    this.field[i][j] = PLAYER; // 玩家开始在中间位置
                } else if (i == 0) {
                    this.field[i][j] = ENEMY; // 敌人开始在顶部随机位置
                } else {
                    this.field[i][j] = EMPTY; // 其他位置为空
                }
            }
        }
        this.playerPositionX = FIELD_WIDTH / 2; // 玩家开始在中间位置
        this.enemyPositionY = 0; // 敌人开始在顶部位置
    }
    
    public void startGame() {
        Scanner scanner = new Scanner(System.in);
        Random random = new Random();
        
        while (true) {
            // 打印当前游戏状态
            printField();
            
            // 获取用户输入并处理
            System.out.println("Enter move (W/D) or Q to quit:");
            String input = scanner.nextLine().toUpperCase();
            if (input.equals("Q")) {
                break;
            } else if (input.equals("W") && playerPositionX > 0) {
                playerPositionX--;
            } else if (input.equals("D") && playerPositionX < FIELD_WIDTH - 1) {
                playerPositionX++;
            } else {
                System.out.println("Invalid move!");
                continue;
            }
            
            // 检查游戏是否结束
            if (playerPositionX == enemyPositionY) {
                System.out.println("Game Over! You were invaded by enemies!");
                break;
            }
            
            // 移动敌人
            enemyPositionY++;
            if (enemyPositionY >= FIELD_HEIGHT) {
                System.out.println("Game Over! Enemies reached the bottom!");
                break;
            }
            for (int i = 0; i < FIELD_WIDTH; i++) {
                this.field[enemyPositionY - 1][i] = EMPTY; // 清空上一行敌人的位置
                if (enemyPositionY < FIELD_HEIGHT) {
                    this.field[enemyPositionY][i] = ENEMY; // 在新位置生成敌人
                }
            }
        }
        
        scanner.close();
        System.out.println("Thanks for playing!");
    }
    
    private void printField() {
        for (int i = 0; i < FIELD_HEIGHT; i++) {
            for (int j = 0; j < FIELD_WIDTH; j++) {
                System.out.print(field[i][j]);
            }
            System.out.println();
        }
    }
    
    public static void main(String[] args) {
        SpaceInvaders game = new SpaceInvaders();
        game.startGame();
    }
}

解释:

  • SpaceInvaders构造函数中,我们初始化了游戏场地和玩家位置。首先,我们将整个游戏场地填充为空位(EMPTY)。然后,我们在底部中间位置放置玩家(PLAYER),并在顶部随机位置放置敌人(ENEMY)。
  • startGame方法中,我们使用一个循环来不断读取用户输入、更新游戏状态、检查游戏是否结束等。每次循环中,我们首先打印当前的游戏状态,然后根据用户输入来移动玩家或退出游戏。接着,我们检查游戏是否结束,即玩家和敌人在同一行相遇或者敌人到达底部。如果游戏结束,则打印相应的提示信息并退出循环。最后,我们移动敌人,即将所有敌人向下移动一格,并在新位置生成敌人。
  • printField方法用于打印当前的游戏状态,它遍历整个游戏场地并打印每个位置的字符。
  • main方法中,我们创建了SpaceInvaders对象并启动了游戏。
  • 9
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值