Крестики-нолики. Первая итерация


Первая ссылка в Google https://youtu.be/-YWO-YFW9Ag
Результат: https://projectstictactoe.github.io/ 

Понравилась манера говорить, детальность рассказа, иногда даже чрезмерная, то, что выложил архив с исходниками
Не понравилось:

- названия переменных, например, "hod"
- устаревший код, когда вместо
var game = document.getElementById("game");
game.addEventListener("click", function(e) { ... }
используют
document.getElementById('game').onclick = function(e){ ... }
- индусский код, например, проверка на выигрыш выглядит так:
 function checkWinner() {
        var allblocks = document.querySelectorAll(".block");
        if(allblocks[0].innerHTML === "✖" && allblocks[1].innerHTML === "✖" && allblocks[2].innerHTML === "✖")
            result.innerHTML = "Победили крестики";
        if(allblocks[3].innerHTML === "✖" && allblocks[4].innerHTML === "✖" && allblocks[5].innerHTML === "✖")
            result.innerHTML = "Победили крестики";
        if(allblocks[6].innerHTML === "✖" && allblocks[7].innerHTML === "✖" && allblocks[8].innerHTML === "✖")
            result.innerHTML = "Победили крестики";
        if(allblocks[0].innerHTML === "✖" && allblocks[3].innerHTML === "✖" && allblocks[6].innerHTML === "✖")
            result.innerHTML = "Победили крестики";
        if(allblocks[1].innerHTML === "✖" && allblocks[4].innerHTML === "✖" && allblocks[7].innerHTML === "✖")
            result.innerHTML = "Победили крестики";
        if(allblocks[2].innerHTML === "✖" && allblocks[5].innerHTML === "✖" && allblocks[8].innerHTML === "✖")
            result.innerHTML = "Победили крестики";
        if(allblocks[0].innerHTML === "✖" && allblocks[4].innerHTML === "✖" && allblocks[8].innerHTML === "✖")
            result.innerHTML = "Победили крестики";
        if(allblocks[2].innerHTML === "✖" && allblocks[4].innerHTML === "✖" && allblocks[6].innerHTML === "✖")
            result.innerHTML = "Победили крестики";
        if(allblocks[0].innerHTML === "O" && allblocks[1].innerHTML === "O" && allblocks[2].innerHTML === "O")
            result.innerHTML = "Победили нолики";
        if(allblocks[3].innerHTML === "O" && allblocks[4].innerHTML === "O" && allblocks[5].innerHTML === "O")
            result.innerHTML = "Победили нолики";
        if(allblocks[6].innerHTML === "O" && allblocks[7].innerHTML === "O" && allblocks[8].innerHTML === "O")
            result.innerHTML = "Победили нолики";
        if(allblocks[0].innerHTML === "O" && allblocks[3].innerHTML === "O" && allblocks[6].innerHTML === "O")
            result.innerHTML = "Победили нолики";
        if(allblocks[1].innerHTML === "O" && allblocks[4].innerHTML === "O" && allblocks[7].innerHTML === "O")
            result.innerHTML = "Победили нолики";
        if(allblocks[2].innerHTML === "O" && allblocks[5].innerHTML === "O" && allblocks[8].innerHTML === "O")
            result.innerHTML = "Победили нолики";
        if(allblocks[0].innerHTML === "O" && allblocks[4].innerHTML === "O" && allblocks[8].innerHTML === "O")
            result.innerHTML = "Победили нолики";
        if(allblocks[2].innerHTML === "O" && allblocks[4].innerHTML === "O" && allblocks[6].innerHTML === "O")
            result.innerHTML = "Победили нолики";
    }
- программа очень примитивная: нет проверки на ничью, можно ставить крестик или нолик поверх уже установленного, компьютер сам не ходит, нет завершения игры, нет предложения сыграть ещё раз