我正在通过创建一个战舰游戏来练习Javascript,我试图在游戏完成后向用户显示一条消息。
if (hit && model.shipsSunk === model.numShips) {
view.displayMessage("You Sank all my battleships, in " + this.guesses + " guesses");
}
但是什么也没发生,当我控制台时.log船舶沉没的值等于 9 而不是 3(numShips = 3,所以我需要确切的数字才能运行上面的代码(。
var view = {
displayMessage: function(msg) {
var messageArea = document.getElementById("messageArea");
messageArea.innerHTML = msg;
},
displayHit: function(location) {
var cell = document.getElementById(location);
cell.setAttribute("class", "hit");
},
displayMiss: function(location) {
var cell = document.getElementById(location);
cell.setAttribute("class", "miss");
}
};
var model = {
boardSize: 7,
numShips: 3,
shiplength: 3,
shipsSunk: 0,
ships: [
{locations: ["06", "16", "26"], hits: ["", "", ""] },
{locations: ["24", "34", "44"], hits: ["", "", ""] },
{locations: ["10", "11", "12"], hits: ["", "", ""] }],
fire: function(guess) {
for (var i = 0; i < this.numShips; i++) {
var ship = this.ships[i];
var index = ship.locations.indexOf(guess);
if (index >= 0) {
ship.hits[index] = "hit";
view.displayHit(guess);
view.displayMessage("HIT!");
if (this.isSunk(ship)) {
view.displayMessage("You sank my battleship!");
this.shipsSunk++;
}
return true;
}
}
view.displayMiss(guess);
view.displayMessage("You missed.");
return false;
},
isSunk: function(ship) {
for (var i = 0; i < this.shipLength; i++) {
if (ship.hits[i] !== "hit") {
return false;
}
}
return true;
}
};
var controller = {
guesses: 0,
processGuess: function(guess) {
var location = parseGuess(guess);
if (location) {
this.guesses++;
var hit = model.fire(location);
if (hit && model.shipsSunk === model.numShips) {
view.displayMessage("You Sank all my battleships, in " + this.guesses + " guesses");
}
}
}
};
function parseGuess(guess) {
var alphabet = ["A", "B", "C", "D", "E", "F", "G"];
if (guess === null || guess.length !== 2) {
alert("Oops, please enter a letter and a number on the board.");
} else {
firstChar = guess.charAt(0);
var row = alphabet.indexOf(firstChar);
var column = guess.charAt(1);
if (isNaN(row) || isNaN(column)) {
alert("Oops, that isn't on the board.");
} else if (row < 0 || row >= model.boardSize || column < 0 || column >= model.boardSize) {
alert("Oops, that's off the board!");
} else {
return row + column;
}
}
return null;
};
controller.processGuess("A0");
controller.processGuess("A6");
controller.processGuess("B6");
controller.processGuess("C6");
controller.processGuess("C4");
controller.processGuess("D4");
controller.processGuess("E4");
controller.processGuess("B0");
controller.processGuess("B1");
controller.processGuess("B2");
console.log(model.shipsSunk);
问题分为几类:阅读答案后跟着脸掌又名愚蠢的错误。答案很简单。在您的模型中,您可以使用小写l
定义shiplength: 3
,在isSunk
函数中,您可以使用大写L
读取this.shipLength
的值。修复其中一个,代码将按预期工作。