Создание игры "Крестики-нолики" с помощью JavaScript

Крестики-нолики — это популярная настольная игра, в которой два игрока пытаются заполнить линию из трех своих символов (крестиков или ноликов) горизонтально, вертикально или по диагонали. В этой статье мы рассмотрим создание игры "Крестики-нолики" с использованием языка программирования JavaScript.

HTML-разметка

Перед тем как приступить к JavaScript-коду, создадим HTML-разметку для игрового поля и ячеек.

<!DOCTYPE html>
<html>
<head>
    <title>Крестики-нолики</title>
    <style>
        .cell {
            width: 50px;
            height: 50px;
            border: 1px solid #000;
            display: inline-flex;
            justify-content: center;
            align-items: center;
            font-size: 24px;
            cursor: pointer;
        }
    </style>
</head>
<body>
    <h1>Крестики-нолики</h1>
    <div id="board"></div>
    <script>
        // JavaScript-код будет здесь
    </script>
</body>
</html>

В разметке мы определили заголовок h1, который называется "Крестики-нолики", и div с идентификатором "board", который будет содержать игровое поле. Мы также добавили стили для ячеек игрового поля.

Создание игрового поля

Теперь давайте приступим к JavaScript-коду. Наша задача - создать игровое поле и определить логику игры.

// Создаем игровое поле
var board = document.getElementById("board");
var cells = [];
var currentPlayer = "X";
var gameFinished = false;

function createBoard() {
    for (var i = 0; i < 3; i++) {
        for (var j = 0; j < 3; j++) {
            var cell = document.createElement("div");
            cell.className = "cell";
            cell.dataset.row = i;
            cell.dataset.col = j;
            cell.addEventListener("click", cellClickHandler);
            board.appendChild(cell);
            cells.push(cell);
        }
        board.appendChild(document.createElement("br"));
    }
}

// Обработчик клика по ячейке
function cellClickHandler() {
    if (gameFinished) return;
    if (this.textContent !== "") return;

    this.textContent = currentPlayer;
    checkWin();
    currentPlayer = currentPlayer === "X" ? "O" : "X";
}

// Проверка на победу
function checkWin() {
    var winningCombinations = [
        [0, 1, 2], [3, 4, 5], [6, 7, 8], // горизонтальные
        [0, 3, 6], [1, 4, 7], [2, 5, 8], // вертикальные
        [0, 4, 8], [2, 4, 6] // диагонали
    ];

    for (var i = 0; i < winningCombinations.length; i++) {
        var combination = winningCombinations[i];
        var a = combination[0];
        var b = combination[1];
        var c = combination[2];

        if (
            cells[a].textContent !== "" &&
            cells[a].textContent === cells[b].textContent &&
            cells[a].textContent === cells[c].textContent
        ) {
            gameFinished = true;
            cells[a].style.backgroundColor = "#0f0";
            cells[b].style.backgroundColor = "#0f0";
            cells[c].style.backgroundColor = "#0f0";
            setTimeout(function () {
                alert("Игра окончена. Победил игрок " + currentPlayer);
            }, 100);
            return;
        }
    }

    var isDraw = true;
    for (var i = 0; i < cells.length; i++) {
        if (cells[i].textContent === "") {
            isDraw = false;
            break;
        }
    }

    if (isDraw) {
        gameFinished = true;
        setTimeout(function () {
            alert("Игра окончена. Ничья!");
        }, 100);
    }
}

// Запуск игры
createBoard();

В этом коде мы добавили обработчик события для клика по ячейке cellClickHandler. Внутри этой функции мы проверяем, завершена ли игра или ячейка уже заполнена. Если условия выполняются, мы помещаем символ текущего игрока в ячейку, вызываем функцию checkWin() для проверки на победу и переключаем текущего игрока на следующего.

В функции checkWin() мы проверяем все возможные выигрышные комбинации. Если одна из комбинаций совпадает (три одинаковых символа подряд), игра считается завершенной. Ячейкам, образующим выигрышную комбинацию, добавляется зеленый фон. Затем выводится сообщение с информацией о победителе.

Если все ячейки заполнены и нет выигрышной комбинации, игра заканчивается ничьей.

Наконец, мы вызываем функцию createBoard() для создания игрового поля при загрузке страницы.

Вот и вся статья о создании игры "Крестики-нолики" на JavaScript. Надеюсь, она была полезной! Вы можете использовать этот код как отправную точку и дополнить его или настроить под свои потребности. Удачи в создании вашей игры "Крестики-нолики"!

Коментарии

Коментарии отсутствуют, будьте первым(ой) кто напишет под этим постом!

Написать коментарий