Логика крестиков ноликов в js

164
23 ноября 2018, 13:30

Подскажите пожалуйста. Нужно добавить окно alert при исходе игры "ничья"

window.onload = function(){  //выполнение кода после загрузки страницы
// ход Х и О
var step = 0;
document.getElementById('game').onclick = function(event){
    console.log(event);
    if(event.target.className == 'block'){
        if(step % 2==0){
             event.target.innerHTML = 'Х';
        } else {
             event.target.innerHTML = 'O';
        }
       step++;
        winner();
    }
}
//проверка победителя
function winner(){
    var allblock = document.getElementsByClassName('block');
    console.log(allblock);
    //проверка Х по горизонтали, вертикали, диагонали 
    if (allblock[0].innerHTML=='Х' && allblock[1].innerHTML=='Х' && allblock[2].innerHTML=='Х') 
        {
            alert('Победа Х');
            location.reload();
    }
    if (allblock[3].innerHTML=='Х' && allblock[4].innerHTML=='Х' && allblock[5].innerHTML=='Х')
         {
            alert('Победа Х');
            location.reload();
    }
    if (allblock[6].innerHTML=='Х' && allblock[7].innerHTML=='Х' && allblock[8].innerHTML=='Х') 
         {
            alert('Победа Х');
            location.reload();
    }
    if (allblock[0].innerHTML=='Х' && allblock[3].innerHTML=='Х' && allblock[6].innerHTML=='Х')
         {
            alert('Победа Х');
            location.reload();
    }
    if (allblock[1].innerHTML=='Х' && allblock[4].innerHTML=='Х' && allblock[7].innerHTML=='Х') 
         {
            alert('Победа Х');
            location.reload();
    }
     if (allblock[2].innerHTML=='Х' && allblock[5].innerHTML=='Х' && allblock[8].innerHTML=='Х')
          {
            alert('Победа Х');
            location.reload();
    }
    if (allblock[0].innerHTML=='Х' && allblock[4].innerHTML=='Х' && allblock[8].innerHTML=='Х') 
         {
            alert('Победа Х');
            location.reload();
    }
    if (allblock[2].innerHTML=='Х' && allblock[4].innerHTML=='Х' && allblock[8].innerHTML=='Х') 
         {
            alert('Победа Х');
            location.reload();
    }
    //проверка O по горизонтали, вертикали, диагонали 
    if (allblock[0].innerHTML=='O' && allblock[1].innerHTML=='O' && allblock[2].innerHTML=='O') 
         {
            alert('Победа O')
            location.reload();
    } 
    if (allblock[3].innerHTML=='O' && allblock[4].innerHTML=='O' && allblock[5].innerHTML=='O') 
         {
            alert('Победа O')
            location.reload();
    }
    if (allblock[6].innerHTML=='O' && allblock[7].innerHTML=='O' && allblock[8].innerHTML=='O') 
         {
            alert('Победа O')
            location.reload();
    }
    if (allblock[0].innerHTML=='O' && allblock[3].innerHTML=='O' && allblock[6].innerHTML=='O')
         {
            alert('Победа O')
            location.reload();
    }
    if (allblock[1].innerHTML=='O' && allblock[4].innerHTML=='O' && allblock[7].innerHTML=='O') 
         {
            alert('Победа O')
            location.reload();
    }
     if (allblock[2].innerHTML=='O' && allblock[5].innerHTML=='O' && allblock[8].innerHTML=='O') 
          {
            alert('Победа O')
            location.reload();
    }
    if (allblock[0].innerHTML=='O' && allblock[4].innerHTML=='O' && allblock[8].innerHTML=='O') 
         {
            alert('Победа O')
            location.reload();
    }
    if (allblock[2].innerHTML=='O' && allblock[4].innerHTML=='O' && allblock[8].innerHTML=='O') 
         {
            alert('Победа O')
            location.reload();
    }
}
}
Answer 1

Как вариант в функцию winner можно добавить в конец проверку:

if(step == 9){
    alert("Ничья");
}

Если оно дошло до этой проверки, значит победитель еще не обнаружен, а если при этом step == 9, значит, что свободных ячеек уже нет.

Answer 2
function winner(){
  ...
  else if (...) 
  {
    alert('Победа O')
    location.reload();
  } else {
    var moves = 0;
    for (var i = 0; i < allblock.length; i++) {
      if (allblock[i].innerHTML == '0' || allblock[i].innerHTML == 'X')
        moves++;
    }
    if (moves == 9) {
      alert("ничья");
      location.reload();
    }
  }
}
READ ALSO
применение this в javascript [дубликат]

применение this в javascript [дубликат]

На данный вопрос уже ответили:

133
Что такое стеки и очереди?

Что такое стеки и очереди?

Расскажите, пожалуйста, о стекахКак пишется программа?

174
нужно убрать стили из pjax

нужно убрать стили из pjax

Когда беру блок с ним идут и силикак их убрать ? Код:

135
Как ограничить столбец?

Как ограничить столбец?

Например, есть значение AgeКак сделать чтобы в его столбце число не могло быть меньше 0?

163