我不太确定标题中的措辞是否准确地描述了我想要做的事情,请允许我解释一下:
假设在游戏中,您通过升级获得不同类型的积分。但是每个级别获得的每种类型的点数可以是任意的。
例如,我offensive
每 2 级得到 3 分。但是我defensive
在 2、4、5 和 6 级得到 2 分。除了第一级之外,每个级别都可能有 1supportive
分。
现在这是我所做的:
//Suppose I have my hero
var Sylin = new Hero();
Sylin.Level = 5;
//My goal is then to set
// Sylin.OffensivePoint to 6
// Sylin.DefensivePoint to 6
// Sylin.SupportivePoint to 4
Sylin.prototype.OffensivePoint = function() {
return 3*Math.floor(this.Level/2);
};
Sylin.prototype.DefensivePoint = function() {
var defPoint = 0;
for(var i=2; i <= this.Level; i++) {
//maximum level being 6
if(i==2 || i >= 4) {
defPoint += 2;
}
}
return defPoint;
};
Sylin.prototype.SupportivePoint = function() {
return this.Level - 1;
};
一切都很好,花花公子,但如果最高级别被延长,积分列表将被更新,然后它变得非常笨拙,特别是如果我有这样的事情:每 3 级 2 分,但在第 9 和第 13 级时 3 分或显然缺乏模式的东西,所以我不能总是像我想要的那样做OffensivePoint()
。
对于这类问题,我通常想到的是这样的结构:
水平 总点
。. 1. . . . . 一个
。. 2. . . . . 乙
。. 3. . . . . 丙
。. 4. . . . . d
. . 5. . . . . e
以此类推,直到最高级别
在代码中,我也许可以这样做:
Sylin.prototype.talentPoint = function() {
return readTalentPointTable(this.Level); //?
};
但是,如果您可以获得 20 个级别和 5 种不同类型的点,那么这仍然会变得非常复杂,比如说:/
.
.
编辑
好的,所以我可以做类似的事情:
var OffensivePointTable = [0,0,2,2,4,6,8,8,8,10,12];
function getOffensivePoint(level) {
return OffensivePointTable[level];
}
如果我按增加一个点的级别存储数据,还是按上面的运行总数存储数据会更容易吗?
.
.
编辑 2
好的,我可以颠倒结构的顺序以先查看类型,然后查看级别吗?
var theTable = {
o: [0,1,0,1,1,0,0,0],
d: [0,0,2,0,2,0,2,0],
s: [0,1,2,3,4,5,6,7]}
//then your CalculateStats:
Sylin.prototype.CalculateStats = function() {
this.offensivePoint = 0;
for(var i=1; i<= this.Level; i++) {
this.offensivePoint += theTable[o][i];
}
}