我觉得这段代码又长又笨重。如果可能的话,我怎样才能把它缩短呢?
我正在为一个libGDX游戏写作,我需要一个技巧算法。我想要它,所以一旦玩家拿起一些东西(我已经检查过了),我将a,b或c设置为某个SkillType,下面是枚举。然后,通过使用枚举的方法获得冷却时间和成本,获得特定SkillType的值。
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
内部声明它的成本和冷却时间。我不想改变这些值,这就是为什么我没有设置。
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 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; }
}
发布于 2015-06-24 15:09:47
如果将技能集封装到一个单独的类中,就不会那么麻烦了:
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;
}
}
你现在可以做了。
class Person {
final Skills skills = new Skills();
//...
}
并将所需的功能折叠到Skills
对象中。
https://codereview.stackexchange.com/questions/94505
复制相似问题