const combs = [ [0, 1, 2], [3, 4, 5], [6, 7, 8], [0, 3, 6], [1, 4, 7], [2, 5, 8], [0, 4, 8], [2, 4, 6], ]; // Получаю ячейки таблицы в переменную: let cells = document.querySelectorAll('#field td'); start(cells); // Для начала делаю так, чтобы по нажатию на любую ячейку таблицы в этой ячейке просто появлялся крестик. // Для этого создаю функцию start, параметром принимающую массив ячеек таблицы. // Также реализую чередования крестиков и ноликов. Для этого вводится счётчик ходов: крестик будет появляться на чётные значения счётчика, а нолик - на нечётные. function start(cells) { let i = 0; for (let cell of cells) { cell.addEventListener('click', function step() { this.innerHTML = ['X', 'O'][i % 2]; this.removeEventListener('click', step); if (isVictory(cells)) { alert("Победил " + this.innerHTML); // выводится имя победителя - X или 0 } else if (i === 8) { alert('Ничья'); } i++; }); } } // Реализую функцию isVictory, которая параметром будет принимать массив ячеек и возвращать true, если на поле есть победа, и false, если нет. function isVictory(cells) { for (let comb of combs) { if ( cells[comb[0]].innerHTML === cells[comb[1]].innerHTML && cells[comb[1]].innerHTML === cells[comb[2]].innerHTML && cells[comb[0]].innerHTML !== '' ) { return true; } } return false; }