如何在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
相关产品推荐
相关产品推荐

