战舰游戏:允许在长度不超过4的战舰上注册命中

Battleship game: Allowing hits to be registered on ships with lengths other than 4

本文关键字:注册 不超过 游戏      更新时间:2023-09-26

我正在为一个学校项目用JavaScript制作《战舰》,我被卡住了。

计算机随机生成船只,用户必须通过输入坐标来尝试击沉计算机的所有船只。船上的命中被保存在阵列中。该数组包含表示船的长度的零(因此长度为4的船有一个包含4个零的数组)。当一艘船被击中时,0变为1。如果所有元素都为1,则船会下沉。问题是,我的代码记录了命中次数,但只有当你命中长度为4的船时,才会将其放入数组中。

有人能帮我吗?以下是"游戏"本身的代码:

function game() {
    inputArray = [4, 3, 2];
    var boats = randomBoats(inputArray);
    var currentBoat = 0;
    var sunkenBoat = 0;
    var numberOfTurns = 0;
    while (sunkenBoat !== inputArray.length) {
        var hit = false;
        var target = "(" + prompt("Enter targetcoordinate (x,y)") + ")";
        var targetString = target.replace(/'s+/g, '');
        for (var i = 0; i !== inputArray.length; i++) {
            for (var j = 0; j !== boats[i].usedPositions().length; j++) {
                console.log(targetString)
                if (targetString === boats[i].usedPositions()[j].toString()) {
                    raak = true;
                    boats[i].hits[j] = 1;
                    console.log(boats[i].hits);
                    currentBoat = boats[i];
                } else {
                    currentBoat = boats[i];
                }
            }
        }
        console.log(currentBoat.hits);
        console.log(allEquals(currentBoat.hits, 1));
        if (hit)
            alert("Hit!");
        else
            alert("Miss!");
        if (allEquals(currentBoat.hits, 1)) {
            alert("Boat with length " + currentBoat.hits.length + " has sunken!");
            sunkenBoat++;
        }
        numberOfTurns++
    }
    alert("You've won! You did it in " + numberOfTurns + " turns.")
}

问题在于内循环中的其他,因为您处理了每艘船(外循环)和所有位置(内循环)的

else {
    currentBoat = boats[i];
} 

总是将当前的船设置为最后一艘[i];

当你发现命中时,你也不需要处理任何其他位置或船只,所以当你检测到命中时,早点休息:

raak = false;
for(var i = 0; i < inputArray.length && !raak; i++) {
        for(var j = 0; j !== boats[i].usedPositions().length; j++) {
            console.log(targetString)
            if(targetString === boats[i].usedPositions()[j].toString()) {
                raak = true;
                boats[i].hits[j] = 1;
                console.log(boats[i].hits);
                currentBoat = boats[i];
                break;
            }
       }  
}