在不同类中操纵变量的基础知识

时间:2016-04-09 01:21:46

标签: java class variables

我已经做了相当多的挖掘,似乎无法找到我想要的答案,我可能会问这个问题是错的,因为我非常苛刻。< / p>

无论如何,我试图建立一个简单的口袋妖怪风格的游戏进行练习,我似乎无法在战斗事件中让对手或玩家的生命值发生变化..

我有它所以你选择1.使用以下代码进行攻击:

if(select == 1){
            System.out.println("You strike at the raccoon!");
            System.out.println("You deal " + play1.atk + " damage!");
            Math.subtract(raccoon1.hp, play1.atk);

Math.subtract类只是

public static int subtract(int x, int y){    
        return (x-y);           
    }

它从我从“对手”构建的对象中拉出raccoon1.hp。只有的课程:

public class Opponent { 
    public int hp = 5;
    public int def = 0;
    public int atk = 1;
} 

播放器的设置方式相同。

我确定我只是缺少和/或做了一些愚蠢的事情,但对新程序员的帮助将不胜感激。

谢谢!

3 个答案:

答案 0 :(得分:1)

Racoon1.hp = Math.subtract(raccoon1.hp, play1.atk)

您必须将返回值设置为raccoon.hp,否则返回值毫无意义。

答案 1 :(得分:1)

这是一个适当的面向对象编程的问题。而不是根据变量来考虑它,而是从方法的角度思考它。不要试图直接操纵变量,尝试通过类完成的操作来操纵变量。

在你的情况下......

if(select == 1){
            System.out.println("You strike at the raccoon!");
            System.out.println("You deal " + play1.atk + " damage!");
            //reduce the health by the current attack value of the player
            racoon.reduceHealth(play1.getAttackValue());

在您的Pokemon类中,或者您在创建新的Pokemon时实例化实例的类命名,创建一个这样的方法......

public void reduceHealth(int attackValue){
    this.hp = this.hp - attackValue;
}

在你的Player类中,或者你在创建新播放器时实例化该实例的那个类的任何名称,创建一个这样的方法......

public int getAttackValue(){
    return this.atk;
}

这样,对象所做的操作是由它自己的类完成的,而不是其他类。获取信息时,请创建返回所需信息的方法。在操作对象的变量时,使用对象的方法来进行操作。

答案 2 :(得分:0)

我建议你这样的事情

public class Opponent {
    public int hp = 5;
    public int def = 0;
    public int atk = 1;
    public void attack(Opponent target){
        target.hp -= atk;
    }
}

你可以简单地做完

Opponent player = new Opponent ();
Opponent badGuy = new Opponent ();
player.attack(badGuy);