首页 > 解决方案 > 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)不需要初始化?

标签: javascriptarraysperformance

解决方案


推荐阅读