我目前正在使用一个名为'gameStateArray'的数组来存储客户端和服务器之间发生的多个游戏的游戏状态。
游戏状态是一个对象,如下所示:
var currentGameState = {
playerOne: "",
playerTwo: "",
blackSoldiers: 0,
whiteSoldiers: 0,
isMillBlack: false,
isMillWhite: false,
numTurns: 1,
fillColour: "",
whiteLastThree: false,
blackLastThree: false,
positionMatrix: Array(7),
referenceMatrix: Array(7)
}
我有以下这段代码遍历数组以为用户提取正确的游戏状态:
for(var i = 0; i < gameStateArray.length; i ++){
if(gameStateArray[i].playerOne.includes(gameNumber)){
console.log("SERVER: Element number " + i + " contains " + gameNumber);
console.log("SERVER: currently setting gamestate to gamestatearray" + i);
gameState = gameStateArray[i];
}
}
如果我想更新numTurns,只需输入gameState.numTurns = 3;。例如。这可以使每个游戏状态保持独立,因为数组的每个元素都是不同的游戏状态对象。我遇到的问题是当我尝试更新positionMatrix或referenceMatrix时。
我正在使用以下代码为其创建值:
for (var i = 0; i < 7; i++) {
gameState.referenceMatrix[i] = Array(7);
gameState.positionMatrix[i] = Array(7);
}
for (var j = 0; j < 7; j++) {
for (var k = 0; k < 7; k++) {
// make diagonal buttons, boundary and centre equal to zero
if ((j == 3) || (k == 3) || (j == k) || (j + k == 6)) {
gameState.referenceMatrix[j][k] = 0;
gameState.positionMatrix[j][k] = 0;
}
else {
gameState.referenceMatrix[j][k] = -1;
gameState.positionMatrix[j][k] = -1;
}
}
}
// make centre -1
gameState.referenceMatrix[3][3] = -1;
gameState.positionMatrix[3][3] = -1;
每次创建新的游戏状态时,都会填充位置和参考矩阵。因此,当一个游戏开始时,我将使用在gameStateArray [0]和gameStateArray [0] .positionMatrix上找到的gameState(因为上面的代码尚未运行)为空,但是当第二个游戏由于某种原因而开始时,即gameStateArray [1]。当运行上述代码时,就会填充positionMatrix,并且它还会覆盖gameStateArray [0] .positionMatrix(稍后会通过不同的代码进行更改)。
我不确定为什么我可以更改.numTurns和gameState的所有其他参数而不在所有数组中进行更改,但是我不能在不影响所有游戏状态的情况下更改positionMatrix数组吗? / p>
任何帮助将不胜感激!