下面是Elo国际象棋评级算法的一部分(请原谅命名惯例,这是临时的(:
let newRankRed = red[rank] + (redK * (results[result] - winProbRed))
let newRankBlue = blue[rank] + (blueK * (Math.abs(results[result]-1) - winProbBlue))
K因子(红K,蓝K(是一个数字,它会根据球员的比赛次数而变化。Player对象存储在数据库中,记录属性(它们的匹配次数(只是Player对象上的数字属性。我的问题是:两名球员进行了一场比赛,结果被提交到了应用程序中。该应用程序进入数据库,获取两名玩家,并检查他们的记录,以确定每个玩家的正确K系数。两个玩家,两个独立的K因子:分配正确的K因子的最佳方式是什么?我知道我们可以有一堆条件语句,比如:
if (red.record >= 0 && red.record <=10) redK = 32
else if ...
但这会产生冗长而笨拙的代码,而且必须为每个玩家完成。
有人能提出一个更好的替代方案吗?
刚刚想好了。以下是解决方案的一部分;红色和蓝色是具有"记录"属性的播放器对象:
let redK, blueK
let red = await PlayerData.getPlayerById(redId)
let blue = await PlayerData.getPlayerById(blueId)
[[red, redK], [blue, blueK]].forEach((pair) =>{
if(pair[0].record >=0 && pair[0].record <= 12) pair[1]= 32
else if(pair[0].record >=13 && pair[0].record <= 24) pair[1]= 24
else pair[1]= 16
})
这使我不必为每个玩家重写条件语句。如果有人有更好的解决方案,那就太好了。