You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Magician类中访问测试类的Wizard实例实现对战?

问题:如何让Magician类中的巫师与测试类中的自定义巫师对战

我想让自己创建的巫师(Wizard)和另一个巫师对战,但问题是另一个巫师只存在于测试类里,不在Magician类文件中。我该怎么访问测试类里的巫师,让它和我已创建的巫师对战?

我试过在类文件里创建巫师,但我希望测试类能使用自定义的巫师来对战,而不是用基础测试类里预设好的对战巫师。目前我只写了这些代码,箭头标注的地方是我遇到的问题:

private String name = "Some_Wizard";
private String level = "unknown";
private String supplies = "branch";
private int health = 100;
private int galleons = 1000;
private int status = 1;

// 构造方法
public Magician(String name, String supplies){
    this.name = name;
    this.supplies = supplies;
}

// 获取名字
public String getName(){
    return name;
}

// 修改名字
public void setName(String nameUpdate){
    name = nameUpdate;
}

// 获取道具
public String getSupplies(){
    return supplies;
}

// 修改道具
public void setSupplies(String suppliesUpdate){
    supplies = suppliesUpdate;
}

// 获取等级
public String getLevel(){
    return level;
}

// 获取生命值
public int getHealth(){
    return health;
}

// 设置生命值
public void setHealth(int hitPoints){
    health = hitPoints;
}

// 获取加隆
public int getGalleons(){
    return galleons;
}

// 更新加隆数量
public void setGalleons(int credits){
    galleons = credits;
}

// 获取状态
public int getStatus(){
    return status;
}

// 升级等级
public boolean advanceLevel(){
    int i = 1;
    boolean upgrade = false;
    
    if (i > 0){
        upgrade = true;
        if (level.equals("unknown")){
            level = "apprentice";
        }
        else if(level.equals("apprentice")){
            level = "wizard";
        }
        else if(level.equals("wizard")){
            level = "shaman";
        }
        else if (level.equals("shaman")){
            level = "Level is maxed out";
        }
    }
    return upgrade;
}

// 降级等级
public boolean downgradeLevel(){
    int i = 1;
    boolean downgrade = false;
    
    if (i > 0){
        downgrade = true;
        if (level.equals("shaman")){
            level = "wizard";
        }
        else if(level.equals("wizard")){
            level = "apprentice";
        }
        else if(level.equals("apprentice")){
            level = "unknown";
        }
        else{
            level = "need to level up.";
        }
    }
    return downgrade;
}

// 购买道具
public boolean buyProp(){
    boolean flag = false;
    String supply = supplies.toUpperCase(); 
    char ch = supplies.charAt(0);
    if (ch == 'S'){
        flag = true;
        galleons -= 300;
    }
    else if (ch == 'C'){
        flag = true;
        galleons -= 75;
    }
    else if (ch == 'B'){
        flag = true;
        galleons -= 100;
    }
    else if (ch == 'T'){
        flag = true;
        galleons -= 150;
    }
    else if (ch == 'S'){
        flag = true;
        galleons -= 300;
    }
    else if (ch == 'W'){
        flag = true;
        galleons -= 200;
    }
    else if( galleons <= 74){
        galleons += 1000;
    }
    return flag;
}

// 对战方法(问题所在)
public void spellBind(){
    int dmg = 1;
    if ((dmg >= 1) && (health >= 1)){
        health -= 0.1 * health;
    }
}

// equals方法未完成
public boolean equals(){
    boolean equal = false;
    // if (magician 
    return equal;
}

解决方案

1. 修改spellBind方法,接收目标巫师参数

当前的spellBind只是修改自身生命值,要实现和其他巫师对战,需要让方法接收一个Magician对象作为攻击目标,这样就能操作目标的生命值:

public void spellBind(Magician target) {
    // 确保双方都存活才能对战
    if (this.getHealth() > 0 && target.getHealth() > 0) {
        // 可根据等级、道具自定义伤害计算逻辑
        int damage = calculateDamage();
        // 扣除目标生命值,防止生命值为负数
        target.setHealth(Math.max(0, target.getHealth() - damage));
        // 可选:添加战败判定,生命值为0时修改状态
        if (target.getHealth() == 0) {
            // 可新增setStatus方法标记战败
            // target.setStatus(0);
        }
    }
}

// 辅助方法:根据当前巫师的等级、道具计算伤害
private int calculateDamage() {
    int baseDamage = 10;
    // 根据等级提升伤害
    switch (this.getLevel()) {
        case "apprentice":
            baseDamage += 5;
            break;
        case "wizard":
            baseDamage += 15;
            break;
        case "shaman":
            baseDamage += 25;
            break;
        default:
            break;
    }
    // 根据道具调整伤害(示例:魔杖增加伤害)
    if (this.getSupplies().equalsIgnoreCase("wand")) {
        baseDamage += 10;
    }
    return baseDamage;
}

2. 在测试类中创建自定义巫师并触发对战

在测试类里,你可以自由创建两个自定义的Magician实例,然后通过调用spellBind方法让它们互相攻击:

public class MagicianBattleTest {
    public static void main(String[] args) {
        // 创建自定义巫师1
        Magician myWizard = new Magician("我的巫师", "wand");
        // 升级到巫师等级
        myWizard.advanceLevel();
        myWizard.advanceLevel();

        // 创建自定义巫师2(来自测试类)
        Magician enemyWizard = new Magician("敌方巫师", "elder_wand");
        enemyWizard.advanceLevel();
        enemyWizard.advanceLevel();
        enemyWizard.advanceLevel();

        // 回合制对战,直到一方战败
        while (myWizard.getHealth() > 0 && enemyWizard.getHealth() > 0) {
            // 我的巫师攻击敌方
            myWizard.spellBind(enemyWizard);
            System.out.println(enemyWizard.getName() + " 剩余生命值:" + enemyWizard.getHealth());

            // 如果敌方还存活,反击
            if (enemyWizard.getHealth() > 0) {
                enemyWizard.spellBind(myWizard);
                System.out.println(myWizard.getName() + " 剩余生命值:" + myWizard.getHealth());
            }
        }

        // 输出对战结果
        if (myWizard.getHealth() > 0) {
            System.out.println(myWizard.getName() + " 获得胜利!");
        } else {
            System.out.println(enemyWizard.getName() + " 获得胜利!");
        }
    }
}

3. 补充必要的方法(可选)

如果需要更完善的对战逻辑,可以给Magician类添加setStatus方法,用于标记战败状态:

public void setStatus(int newStatus) {
    this.status = newStatus;
}

内容的提问来源于stack exchange,提问作者Peanut Walrus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 09:17:06