Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 有没有办法制作我的物品;更新;他们基于公式的变量?_Java_Variables_Arraylist - Fatal编程技术网

Java 有没有办法制作我的物品;更新;他们基于公式的变量?

Java 有没有办法制作我的物品;更新;他们基于公式的变量?,java,variables,arraylist,Java,Variables,Arraylist,我有一种在游戏中创建“灵魂”对象的方法。我创建了spirit类的一个实例,然后为我想要创建的spirit调用一个方法。例如: public void risp(){ species = "Risp"; eletype = "plant"; baseattack=4; basespeed=4; baseevasion=5; basearmor=2; basemagres=3; basehealth = 13+2*strength; basemana = 13+intelligence; attac

我有一种在游戏中创建“灵魂”对象的方法。我创建了spirit类的一个实例,然后为我想要创建的spirit调用一个方法。例如:

public void risp(){
species = "Risp";
eletype = "plant";
baseattack=4; basespeed=4; baseevasion=5; basearmor=2; basemagres=3; basehealth = 13+2*strength; basemana = 13+intelligence;
attack = (int) (baseattack+.2*4*strength+strength); speed = (int) (basespeed+4*.2*dexterity); health = 13+2*strength; mana = 13+intelligence; 

armor = (int) (basearmor+2*.2*strength); armit = 0; magres = (int) (basemagres+.2*3*intelligence); mrmit = 0; evasion = (int) (dexterity+.25*5*baseevasion); cooperation = 12; accuracy = 10+dexterity;           
fire = 5; water = 35; air = 35; ice = 25; mud = 40; rock = 20; toxic = 25; energy = 10; dark = 15; death = 15; light = 20; plant = 0; psychic = 5;
ability1 = "prick"; ability2 = "photosynethesize"; ability3 = "regrowth"; ability4 = "None Equipped";
spiritimage = new Image(risptexture);
spiritimage2 = new Image(risptexture);
spiritxp = 0; spiritlvl = 1;

}
问题是,在我的noobness中,我为一些值设置了公式,希望在使用对象时变量会更新。事实似乎并非如此,仔细想想,它只使用初始化为的值是有意义的

所以,当我升级了我的“risp”,使它的基础攻击更高,比如说,10-它不在乎。Risp仍然有它的初始攻击值,它是6,当我想它应该是12

我创建的表示risp的对象存储在保存我的“精神角色”的arraylist中

我不知道如何更新基于攻击、速度、生命值等公式的变量

我知道我可以编写这样的代码

if(spirit.species = "Risp") { 
attack = (int) (baseattack+.2*4*strength+strength); 

以及其他变量,然后在我更改RISP的基值时调用它。但那将是。。打字太多了。我有很多精神。我想尽量避免这种情况。有更简单的方法吗?

如果您使用Java,您可以将不同的字符设置为不同的类,并让getter为当前统计数据执行计算

例如:

public class Risp {
    private int baseattack, basespeed; // ... and so on
    // also have a constructor that sets all base stats

    public void setStrength(int strength) {
        this.strength = strength;
    }

    public String getSpecies() {
        return "Risp";
    }
    public int getAttack() {
        return (int) (baseattack+.2*4*strength+strength);
    }
    // remaining setters & getters omitted
}
然后,无论何时需要使用这些值:

Risp risp = new Risp();
risp.getAttack(); // Returns attack with base stats
risp.setStrength(120);
risp.getAttack(); // Returns attack with base stats, but w/ strength 120

使用方法并调用这些方法。当提出问题时,请将其设置为(最小、完整、可验证的示例),并在代码中使用适当的空格和缩进,以便更易于阅读。这里有很多与问题无关的任意信息。
risp
中的一个字段不按您希望的方式运行就足够了。