Java:引用自己方法中的类

Java:引用自己方法中的类,java,inheritance,methods,subclass,superclass,Java,Inheritance,Methods,Subclass,Superclass,我正在处理一项任务,目前我正试图调试该任务。我有许多错误:(类中的方法名(超类名)不能应用于给定的类型。该项目正在将一个以过程编程为中心的游戏重新调整为同一个游戏,但现在是面向对象的。我是Java新手,我的任务是创建大量的类,其中两个是超类的子类(很明显),我已经得到了要使用的方法及其参数。我遇到的问题是,子类中的一个方法应该控制两个角色(玩家和敌人)之间的战斗。这两个类都是character类(超类)的子类。由于这是一个类作业,我不想发布我所有的内容,但下面是我尝试执行的battle方法的一个

我正在处理一项任务,目前我正试图调试该任务。我有许多
错误:(类中的方法名(超类名)不能应用于给定的类型。该项目正在将一个以过程编程为中心的游戏重新调整为同一个游戏,但现在是面向对象的。我是Java新手,我的任务是创建大量的类,其中两个是超类的子类(很明显),我已经得到了要使用的方法及其参数。我遇到的问题是,子类中的一个方法应该控制两个角色(玩家和敌人)之间的战斗。这两个类都是character类(超类)的子类。由于这是一个类作业,我不想发布我所有的内容,但下面是我尝试执行的battle方法的一个示例。一般来说,我在继承方面遇到并将继续遇到的问题正是父类/子类之间继承了什么,以及如何在每个父类/子类之间传递某些值/变量

在下面的示例代码中,此方法嵌套在扩展
字符
类的
播放器
类中。此方法需要使用
敌方
类中的和敌方,并在中执行操作。根据结果,我将布尔值传递回程序的主方法


我的问题是,;在本例中,我不确定如何在已包含在“
Player
”类下的方法中调用已生成“
Player
”类的类。我被要求在调用该方法时使用一个参数,
敌方
。我确信我没有以适当的方式完成这项任务,有更好的方法来处理这项任务。但是,如果能帮助我理解什么是可能的,我将不胜感激,因为这将帮助我以正确的方式完成这项任务

Player
类的示例方法如下:

public abstract class Character{ //Character Superclass - attack method called

public int attack(Player _player){
    Random randomNumbers = new Random();
    int enemyRandAtk = randomNumbers.nextInt(Weapon.getMaxDamage - Weapon.getMinDamage) + Weapon.getMinDamage;
    int enemyAtk = enemyRandAtk + getStrength();
    int charRemainingHP = _player.getHitPoints() - enemyAtk; //can I call _player in the Character class????
    System.out.printf("%s attacks with ATK = %d + %d = %d\n", getName(), getStrength(), enemyRandAtk, enemyAtk);
    System.out.printf("%s HP is now %d - %d = %d\n\n", _player.getName(), _player.getHitPoints(), enemyAtk, charRemainingHP);
    return charRemainingHP;
}

public class Player extends Character{


  public int attack(Enemy _enemy){
    Random randomNumbers = new Random();
    int enemyHP = _enemy.getHitPoints();
    int charRandAtk = randomNumbers.nextInt(Weapon.getMaxDamage - Weapon.getMinDamage) + Weapon.getMinDamage;
    int charAtk = charRandAtk + getStrength();
    int enemyRemainingHP = _enemy.getHitPoints() - charAtk;
    System.out.printf("\n\n%s attacks with ATK = %d + %d = %d\n", getName(), getStrength(), charRandAtk, charAtk);
    System.out.printf("%s HP is now %d - %d = %d\n\n", _enemy.getName(), enemyHP, charAtk, enemyRemainingHP);
    return enemyRemainingHP;
  }
  public boolean battleWizard(Enemy _enemy){
    Random randomNumbers = new Random();
    Scanner userInput = new Scanner(System.in);
    int spellCast = randomNumbers.nextInt(4) + 1;
    System.out.printf("*** %s vs The Evil Wizard ***\n\n", getName()); //getName() is in Player Class
    boolean charWinning = false;
    int updWizHP = _enemy.getHitPoints(); //****** Question 1. below
    do{
        System.out.print("Choose your action: \n" +
                         "1. Attack\n" +
                         "2. Attempt Spell Cast\n\n" +
                         "What would you like to do?: ");
        int battleDecision = userInput.nextInt();

        if (battleDecision == 1){
            updWizHP = Player.attack(_enemy); //**** Question #2 Below
            if (updWizHP <= 0){
                charWinning = true;
                break;
            }
        }else if(battleDecision == 2){
            System.out.print("Enter your guess: ");
            int playerGuess = userInput.nextInt();
            if (playerGuess == spellCast){
                System.out.printf("The %s's spell is cast successfully!  The Wizard's HP is now 0!\n\n", getName());
                charWinning = true;
                updWizHP = 0;
                break;
            }else{
            System.out.print("Your spell missed the Wizard.  Now he attacks!\n");
            }
        }
        if (getHitPoints() > 0){
            enemyDamage = Enemy.attack();
            decreaseHitPoints(_enemy.attack(Player)); \\**** Question #3 below
            if (getHitPoints() < 0){
                charWinning = false;
                break;
            }
        }
    }while(getHitPoints() > 0 && _enemy.getHitPoints() > 0);

    if (charWinning)
        return true;
    else
        return false;
   }
  }
公共抽象类字符{//字符超类-调用攻击方法
公众智力攻击(玩家_玩家){
随机数=新随机数();
int enemyRandAtk=randomNumbers.nextInt(武器.getMaxDamage-武器.getMinDamage)+武器.getMinDamage;
int enemyAtk=enemyRandAtk+getStrength();
int charRemainingHP=\u player.getHitPoints()-enemyAtk;//我可以在角色类中调用\u player吗????
System.out.printf(“%s攻击,ATK=%d+%d=%d\n”、getName()、getStrength()、enemyRandAtk、enemyAtk);
System.out.printf(“%s HP现在是%d-%d=%d\n\n”、\u player.getName()、\u player.getHitPoints()、enemyAtk、charRemainingHP);
返回charRemainingHP;
}
公共类玩家扩展角色{
公众智力攻击(敌人_敌人){
随机数=新随机数();
int-enemyHP=_敌人.getHitPoints();
int charRandAtk=randomNumbers.nextInt(武器.getMaxDamage-武器.getMinDamage)+武器.getMinDamage;
int charAtk=charRandAtk+getStrength();
int enemyRemainingHP=\u敌军.getHitPoints()-charAtk;
System.out.printf(“\n\n%s攻击,ATK=%d+%d=%d\n”,getName(),getStrength(),charRandAtk,charAtk);
System.out.printf(“%s HP现在是%d-%d=%d\n\n”,\u敌方.getName(),enemyHP,charAtk,enemyRemainingHP);
返回Enemy剩余HP;
}
公共布尔战斗向导(敌人_敌人){
随机数=新随机数();
扫描仪用户输入=新扫描仪(System.in);
int-spellCast=randomNumbers.nextInt(4)+1;
System.out.printf(“***%s对邪恶的向导***\n\n”,getName());//getName()在播放器类中
布尔值=假;
int updWizHP=_敌方.getHitPoints();/*******问题1.如下
做{
System.out.print(“选择您的操作:\n”+
“1.攻击\n”+
“2.尝试施法\n\n”+
“你想做什么?:”;
int battleDecision=userInput.nextInt();
如果(battleDecision==1){
updWizHP=玩家。攻击(_敌人);/****问题2
如果(updWizHP 0){
敌人的伤害=敌人的攻击();
降低生命值(敌方攻击(玩家))\\****问题3
if(getHitPoints()<0){
查温=假;
打破
}
}
}而(getHitPoints()>0&&&u敌人.getHitPoints()>0);
如果(获胜)
返回true;
其他的
返回false;
}
}
请记住,这是一个子类(
Player
)中的一个方法,它包含与(
敌人
)大致相同的方法,除了这个和其他几个方法之外

关于我的上述代码,以下是我的具体问题:

  • 方法
    battleWizard
    中的第6行(注释中的1个问题)-由于此方法驻留在
    Player
    类中,我可以用这种方式引用
    敌人
    类吗?如果不是,有什么更好的方法

  • 方法
    battleWizard
    (#注释中的问题2)中的第12行-当使用方法(代码示例)时,如何引用以自己的名称创建对象的类是在类本身中吗?我想使用最终用户的player
    player
    并在其自身中引用该对象,如果这有意义的话?我试图想象编译器将如何执行此任务,但无法想象这会起作用

  • 底部13行(#注释中的3个问题参考): a) 在Java中,可以将一个方法作为参数传递给另一个类似这样的方法吗? b) 调用另一个子类(与调用该类的子类级别相同)的正确方法是这样的还是可能的

  • 谢谢你的帮助。正如我前面提到的,由于这是一个课堂作业,我不想提供更多的代码示例。但不可避免的是,如果这有助于我理解,我会的。
    int updWizHP = _enemy.getHitPoints(); //****** Question 1. below    
    
    decreaseHitPoints(_enemy.attack); // passing a method - not allowed
    decreaseHitPoints(_enemy.attack(Player)); // passing a return value from calling a method - OK