星球大战JAVA实现

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

// 主游戏类
public class StarWarsGame {

    // 宏定义,用于设定游戏中的常量
    private static final int MAX_HEALTH = 100;
    private static final int MIN_ATTACK = 10;
    private static final int MAX_ATTACK = 20;

    // --- 角色内部类定义 ---
    // `Character` 类用于代表一个战斗角色,包含其姓名、生命值和攻击力。
    static class Character {
        String name;
        int health;
        int attackPower;

        // 构造函数
        public Character(String name, int health, int attackPower) {
            this.name = name;
            this.health = health;
            this.attackPower = attackPower;
        }

        /**
         * 模拟角色进行一次攻击。
         *
         * @param defender 被攻击的角色。
         * @param random   随机数生成器。
         */
        public void attack(Character defender, Random random) {
            // 随机计算本次攻击造成的伤害
            int damage = random.nextInt(MAX_ATTACK - MIN_ATTACK + 1) + MIN_ATTACK;

            // 绝地武士或西斯尊主用他们的光剑进行攻击
            defender.health -= damage;

            // 确保生命值不会低于0
            if (defender.health < 0) {
                defender.health = 0;
            }

            // 打印战斗日志
            System.out.printf("%s 用光剑攻击 %s,造成 %d 点伤害!\n", this.name, defender.name, damage);
        }
    }

    // --- 主函数 ---
    public static void main(String[] args) {
        // 设置随机数生成器
        Random random = new Random();
        
        System.out.println("欢迎来到光剑对决!");
        
        // 创建两个星球大战角色
        // `jedi` 代表绝地武士,`sith` 代表西斯尊主
        Character jedi = new Character("Luke Skywalker", MAX_HEALTH, 15);
        Character sith = new Character("Darth Vader", MAX_HEALTH, 18);

        System.out.printf("绝地武士 %s vs. 西斯尊主 %s\n\n", jedi.name, sith.name);

        // 显示初始状态
        displayStats(jedi, sith);

        // --- 游戏主循环 ---
        // 只要双方都还有生命值,战斗就继续
        while (!isGameOver(jedi, sith)) {
            // 绝地武士攻击
            jedi.attack(sith, random);
            // 如果游戏结束,则跳出循环
            if (isGameOver(jedi, sith)) break;

            // 西斯尊主攻击
            sith.attack(jedi, random);
            System.out.println();
            
            // 显示当前状态
            displayStats(jedi, sith);
        }

        // --- 游戏结束 ---
        System.out.println("---------------------------");
        System.out.println("对决结束!");

        // 根据最终生命值判断胜者
        if (jedi.health > 0) {
            System.out.printf("%s 赢得了这场光剑对决!愿原力与你同在!\n", jedi.name);
        } else {
            System.out.printf("%s 赢得了这场光剑对决!黑暗面占了上风!\n", sith.name);
        }
    }

    // --- 函数实现 ---

    /**
     * @brief 显示两个角色的当前生命值。
     * @param player1 第一个角色。
     * @param player2 第二个角色。
     */
    public static void displayStats(Character player1, Character player2) {
        System.out.printf("%s 的生命值: %d\n", player1.name, player1.health);
        System.out.printf("%s 的生命值: %d\n", player2.name, player2.health);
        System.out.println("---");
    }

    /**
     * @brief 检查游戏是否结束。
     * @param player1 第一个角色。
     * @param player2 第二个角色。
     * @return 如果任一角色的生命值归零,返回true(游戏结束),否则返回false。
     */
    public static boolean isGameOver(Character player1, Character player2) {
        // 只要有一方生命值小于等于0,游戏就结束
        return player1.health <= 0 || player2.health <= 0;
    }
}

这是一个用 Java 语言重写的星球大战程序。它采用了面向对象的编程思想,将角色(Character)定义为一个独立的类,使得代码结构更加清晰。
这个 Java 版本使用了 Character 类来封装角色的属性和行为,这比 C 语言中的结构体更符合面向对象的思想。攻击逻辑被封装在 Character 类内部的 attack 方法中,使得代码更具模块化和可读性。