首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >技能系统优化

技能系统优化
EN

Code Review用户
提问于 2015-06-24 00:18:40
回答 1查看 190关注 0票数 4

我觉得这段代码又长又笨重。如果可能的话,我怎样才能把它缩短呢?

我正在为一个libGDX游戏写作,我需要一个技巧算法。我想要它,所以一旦玩家拿起一些东西(我已经检查过了),我将a,b或c设置为某个SkillType,下面是枚举。然后,通过使用枚举的方法获得冷却时间和成本,获得特定SkillType的值。

代码语言:javascript
运行
复制
public SkillType[] skills;
public SkillType a, b, c;
public int acost, bcost, ccost;
public int acooldown, bcooldown, ccooldown;

skills = new SkillType[3];
skills[0] = a; skills[1] = b; skills[2] = c;
acost = a.getCost(); bcost = b.getCost(); ccost = c.getCost();
acooldown = a.getCooldown(); bcooldown = b.getCooldown(); ccooldown = c.getCooldown();

public SkillType getSkill(int index) { return skills[index]; }
public void setSkill(int index, SkillType skill) { skills[index] = skill; }

这段代码声明了上面使用的枚举。它拥有我想要使用的所有技能。它在SkillType内部声明它的成本和冷却时间。我不想改变这些值,这就是为什么我没有设置。

代码语言:javascript
运行
复制
public static enum SkillType {
        ROAR(1,3),
        DUST_CLOAK(2,10),
        THORN_CLOAK(2,10),
        SPARK(2,5),
        FLUTTER(0,0),
        EMBER(2,2),
        GLOW(0,0),
        SCRATCH(0,0),
        BITE(0,0);

        int cost;
        int cooldown;
        SkillType(int cost, int cooldown) {
                this.cost = cost;
                this.cooldown = cooldown;
        }
        public int getCooldown() { return cooldown; }
        public int getCost() { return cost; }
}

编辑:

我已经更新了枚举类,以包括更多的项目。

代码语言:javascript
运行
复制
public class SkillData {

public SkillType[] skills;
public static final int MAX_SKILLS = 3;
public static final int SLOT_PRIMARY = 0;
public static final int SLOT_SECONDARY = 1;
public static final int SLOT_SECONDARY_TWO = 2;

public static enum SkillType {
    ROAR(1,3),
    DUST_CLOAK(2,10),
    THORN_CLOAK(2,10),
    SPARK(2,5),
    FLUTTER(0,0),
    EMBER(2,2),
    GLOW(0,0),
    SCRATCH(0,0),
    BITE(0,0);

    int cost;
    int cooldown;
    SkillType(int cost, int cooldown) {
        this.cost = cost;
        this.cooldown = cooldown;
    }
    public int getCooldown() { return cooldown; }
    public int getCost() { return cost; }
}

public SkillData() {
    skills = new SkillType[MAX_SKILLS];
}

public int getCost(int index) { return skills[index].getCost(); }
public int getCooldown(int index) { return skills[index].getCost(); }
public void setSkill(int index, SkillType skill) { skills[index] = skill; }
public SkillType getSkill(int index) { return skills[index]; }
public SkillType[] getSkills() { return skills; }

}

EN

回答 1

Code Review用户

回答已采纳

发布于 2015-06-24 15:09:47

如果将技能集封装到一个单独的类中,就不会那么麻烦了:

代码语言:javascript
运行
复制
public class Skills {

    private static final int MAXSKILLS = 3;

    public final SkillType[] skills = new SkillType[MAXSKILLS];

    public int getTotalCost() {
        return skills[0].getCost() + skills[1].getCost() + skills[2].getCost();
    }

    public int getTotalCooldown() {
        return skills[0].getCooldown() + skills[1].getCooldown() + skills[2].getCooldown();
    }

    public SkillType getSkill(int index) {
        return skills[index];
    }

    public void setSkill(int index, SkillType skill) {
        skills[index] = skill;
    }
}

你现在可以做了。

代码语言:javascript
运行
复制
class Person {
    final Skills skills = new Skills();
    //...
}

并将所需的功能折叠到Skills对象中。

票数 3
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/94505

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档