1

我一直在做一个游戏,在游戏中我是一个驯服怪物的召唤师(很像口袋妖怪)。我想做的是有一个背包,里面有 5 个驯服的怪物,我一次可以生成 1 个。有人推荐我使用枚举(我无法再联系那个人了:(),所以我一直在看一些枚举教程和示例,但我不知道这对我有什么帮助。

让我们说枚举看起来像这样:

public enum TamedMonsterStats {
    ELF(0,"res/siren_monster_girl_sprite_by_tsarcube-d52y2zu.png",0,100);
    DRAGON(0,"res/dragon.png",0,100);
    private int haveit;
    private String photoname;
    private int typeOfDamage;/* 
     * 0: dark
     * 1: light
     * 2: 
     */
    private int HP;

    TamedMonsterStats(int haveit,String photoname,int typeOfDamage,int HP){
        this.haveit = haveit;
        this.photoname = photoname;
        this.typeOfDamage = typeOfDamage;
        this.HP = HP;
    }
    public int getHaveIt(){
        return haveit;
    }
    public String getPhotoName(){
        return photoname;
    }
    public int getTypeOfDamage(){
        return typeOfDamage;
    }

    public int getHP(){
        return HP; 
    }
    public void setHp(int hp) {
        HP = hp;
    }
}

这会起作用,但正如 daveychu 指出的那样,这使我不可能拥有同一个生物的 2 个实例,所以我的想法是有一个带有 monster1,monster2,monster3,monster4,monster5 的枚举背包,然后填充它们具有动态的值,但我觉得这样做意味着我根本不需要枚举,这是真的吗?

4

1 回答 1

5

您可以在枚举上添加 setter 方法:

public void setHp(int hp) {
    HP = hp;
}

但是,我对您对枚举的使用有点警惕。在这种情况下,任何时候都只能存在一个“DRAGON”实例,所以我想知道如果用户想要更多或者敌人同时拥有一个,你会怎么做。

另一方面,您的 typeOfDamage 是枚举的绝佳候选者:

public enum DamageType {
    DARK,
    LIGHT,
    NORMAL
}

然后你可以使用这个枚举:

ELF(0, "res/siren_monster_girl_sprite_by_tsarcube-d52y2zu.png", DamageType.DARK, 100),
DRAGON(0, "res/dragon.png", DamageType.LIGHT, 100);
private DamageType typeOfDamage;

TamedMonsterStats(int haveit, String photoname, DamageType typeOfDamage, int HP) {
    this.typeOfDamage = typeOfDamage;
}

public DamageType getTypeOfDamage() {
    return typeOfDamage;
}

它比必须传递一些随机整数更具可读性。

于 2013-05-10T08:12:30.920 回答