javascript - Javascript 对数组中的特定对象求和(游戏配对引擎优化)
问题描述
我希望改进用于确定 4 人游戏中的冲突的配对引擎,重点是速度。这个问题只是关于我拥有的碰撞检查代码,而不是配对引擎本身的其余部分。
目前,每个玩家都是这样定义的,其中nTotal
玩家总数是:
class Player {
constructor(nIndex, nTotal)
{
this.index = nIndex;
this.matched = Array.from(Array(nTotal), () => 0);
}
}
这是我当前的碰撞检查代码。它的工作原理是,如果前一个表是玩家 0、1、2 和 3,那么玩家 [0] 的matched
数组将是[0, 1, 1, 1...]
等等。roundPlayers
是所有玩家的列表,其中前 4 个值是第一个表,接下来的 4 个是第二个表,依此类推。
checkMatchups()
{
var collisions = 0;
// 4 players per game, collision score is (number of times previously matched ** 2).
for (let i = 0; i < this.roundPlayers.length; i++) {
switch(i%4) {
case 0:
collisions += (this.roundPlayers[i].matched[this.roundPlayers[i+1].index] ** 2);
collisions += (this.roundPlayers[i].matched[this.roundPlayers[i+2].index] ** 2);
collisions += (this.roundPlayers[i].matched[this.roundPlayers[i+3].index] ** 2);
break;
case 1:
collisions += (this.roundPlayers[i].matched[this.roundPlayers[i+1].index] ** 2);
collisions += (this.roundPlayers[i].matched[this.roundPlayers[i+2].index] ** 2);
collisions += (this.roundPlayers[i].matched[this.roundPlayers[i-1].index] ** 2);
break;
case 2:
collisions += (this.roundPlayers[i].matched[this.roundPlayers[i+1].index] ** 2);
collisions += (this.roundPlayers[i].matched[this.roundPlayers[i-1].index] ** 2);
collisions += (this.roundPlayers[i].matched[this.roundPlayers[i-2].index] ** 2);
break;
case 3:
collisions += (this.roundPlayers[i].matched[this.roundPlayers[i-1].index] ** 2);
collisions += (this.roundPlayers[i].matched[this.roundPlayers[i-2].index] ** 2);
collisions += (this.roundPlayers[i].matched[this.roundPlayers[i-3].index] ** 2);
break;
}
}
collisions /= 2;
}
它按原样工作,但速度很慢,重复计数,并且需要先用 0 初始化数组,如果稍后将更多玩家添加到回合中,这将成为一个问题(构造函数最初只获取总数)。我将如何做到这一点(a)更快(因为必须运行它来检查每一种可能性),以及(b)不需要初始化?
解决方案
推荐阅读
- c++ - 在 Visual Studio 代码中为 C++ 构建和运行当前活动文件
- asp.net - 如何为剃须刀页面创建一个孤立的组件?
- javascript - 如何为箭头函数编写替代代码?
- r - 为什么测试趋势日志排名结果与 R survMisc 和 survminer 包中的数字或分类变量不同?
- angular - Angular ngFor 循环遍历字典
- bash - 具有多个参数的用户添加
- python - sqlite3.OperationalError: near "(": 语法错误。一个非常烦人的错误
- python - 在 set 的子类上调用 super().__repr__() 时出现意外行为?
- python-3.x - 如何在两个圆括号()之间打印文本
- python - Python 将任务排入队列并按顺序获取结果(多进程)