На первом круге срабатывает на следующем нет, надо исправить мой код, задача по книге

Решаю задачку по книге Фримен Э., Робсон Э. - Изучаем программирование на JavaScript там есть задачка морской бой, суть в том что при повторном вводе числа корабль потоплен этого быть не должно. У меня есть решение которое срабатывает правильно(первый круг), я знаю что в коде ошибка, но как додумать мое решение?

Дано

var location1 = 1;
var location2 = 2;
var location3 = 3;
var guess;
var hits = 0;
var guesses = 0;
var isSunk = false;

while (isSunk == false) {
    guess = prompt("Ready, aim, fire! (enter a number from 0-6):");
    if (guess < 0 || guess > 6) {
        alert("Please enter a valid cell number!");
    } else {
        guesses = guesses + 1;
        if (guess == location1 || guess == location2 || guess == location3) {
            alert("HIT!");
            hits = hits + 1;
            if (hits == 3) {
                isSunk = true;
                alert("You sank my battleship!");
            }
        } else {
            alert("MISS");
        }
    }
}
var stats = "You took " + guesses + " guesses to sink the battleship, " +
            "which means your shooting accuracy was " + (3/guesses);
alert(stats);

При повторе числа например 1, корабль потоплен. Я пытаюсь решить её так, но не получилось до конца, в чем ошибка в моей логике? Помогите пожалуйста разобраться...

var location1 = 1
var location2 = 2
var location3 = 3
var guess
var hits = 0
var guesses = 0
var isSunk = false
var repeat

while (isSunk == false) {
  guess = prompt('Ready, aim, fire! (enter a number from 0-6):')
  if (
    guess < 0 ||
    guess > 6 ||
    repeat == location1 ||
    repeat == location2 ||
    repeat == location3 ||
    guess == repeat
  ) {
    alert('Please enter a valid cell number!')
    repeat = 7
  } else {
    guesses = guesses + 1
    if (guess == location1 || guess == location2 || guess == location3) {
      alert('HIT!')
      hits = hits + 1
      repeat = guess
      if (hits == 3) {
        isSunk = true
        alert('You sank my battleship!')
      }
    } else {
      alert('MISS')
    }
  }
}
var stats =
  'You took ' +
  guesses +
  ' guesses to sink the battleship, ' +
  'which means your shooting accuracy was ' +
  3 / guesses
alert(stats)

Ответы (0 шт):