我正在使用JavaScript进行战舰游戏,我偶然发现了一个问题
var targetString = target.replace(/\s+/g, '');
for(var i = 0; i !== inputArray.length; i++) {
for(var j = 0; j !== boats[i].usedPositions.length; j++) {
if(targetString === boats[i].usedPositions[j].toString()) {
hit = true;
boats[i].hits[j] = 1;
console.log(boats[i].hits);
currentBoat = boats[i];
boats[i].usedPositions.splice(j,1);
break;
}
}
}
if(hit && stop == false) {
alert ("Hit!");
if(allEquals(currentBoat.hits, 1) && hit) {
alert("Boat with length " + currentBoat.hits.length + " has sunken!");
sunkenBoat++;
}
}
第一段代码检查输入的坐标是否与船只的坐标匹配(所有这些都存储在usedPositions中)。为了防止玩家再次击中该船,我想使用拼接从该阵列中取出击中的坐标。但是当我这样做时,它不会在船沉没时提醒我(第二段代码)。当删除带有拼接的行时,它会发出警报。谁能帮我?找到完整代码here。
答案 0 :(得分:0)
splice
向下移动后续数组元素以填充空格。你的逻辑看起来并不像是期望事情那样移动。
而不是splice
,您可能只想为该数组位置分配一些其他值,例如:
boats[i].usedPositions[j] = " "; // Where " " is assumed not to represent a boat