我写足球模拟器是为了好玩,我不知道如何组织我的球员的属性评级。我知道属性的数量会随着我对游戏的改进而改变。我需要单独访问每一个,即。
SoccerPlayer.getSpeed()
SoccerPlayer.getShooting()
我也知道,我希望能够平均他们与一个单一的功能,以获得一个整体评分。
SoccerPlayer.getOverall()
我的第一个倾向是使用一个列表或数组,用常量来定义数组中每个属性的索引。
static final int SPEED_INDEX = 0;
static final int SHOOTING_INDEX = 1;
static final int NUM_ATTRIBUTES = 2;
int[] attributes = new int[NUM_ATTRIBUTES];
int getSpeed() {
return attributes[SPEED];
}
int getOverall() {
int total = 0;
for (int i : attributes) {
total += i;
}
return (total / attributes.length);
}
这样,每当我添加一个新属性时,我只需更改total常量,并添加一个新的索引常量,total函数就会一直工作。但是有没有更好的方法呢?
3条答案
按热度按时间byqmnocz1#
您可以使用枚举作为属性,使用Map作为评级:
然后要添加新属性,只需将其添加到枚举。
在调试时,分级将更容易理解,因为属性具有名称而不是数字。
此外,如果您想在属性中添加比例因子之类的内容(例如,速度的权重是射击的两倍),枚举是放置它的方便位置。
qkf9rpyu2#
我很惊讶你会对一个玩家的属性总和感兴趣。我的意思是,把我的跑步能力和准确的投篮能力结合起来真的有意义吗?
假设你真的想这么做,你所描述的似乎足够明智。
z8dt9xmd3#
依我看,你的排名系统是有效的。但是,有一件事你可能需要检查并确保它是正确的。为了让你的排名准确,1分的射击指数必须与1分的速度指数具有同等的竞争力。如果速度指数的变化比射击指数更有价值,反之亦然,排名就会不准确。不过,到目前为止,这似乎是一个优雅的设计,只要它是适当的平衡。
例:4速4投可能每次都能击败10速1投,但排名还是会更低。你必须调整每一个速度/射门实际给某人多少奖金,以确保排名较高的球队有更好的获胜机会。