Построение игры в крестики-нолики с использованием React

Добро пожаловать в мою версию классической Крестики-нолики! Я создал игру Крестики-нолики с использованием React и SCSS, завершив её за примерно 6 часов. Игра предлагает режим одиночной игры против компьютера, всплывающее окно с объявлением победителя и счетчики выигрышей для обоих игроков. Хотя сетка настраиваемая до n x n, текущая логика выигрыша поддерживает только 3 x 3. Будущие улучшения включают более умные ходы компьютера и функциональность многопользовательской игры в реальном времени.

Обзор

  • Общее время разработки: ~6 часов
  • Используемые технологии: JavaScript (React) + SCSS

Правила игры

1. Цель

Цель игры — выстроить три своих символа (X или O) в горизонтальный, вертикальный или диагональный ряд на сетке 3 x 3.

2. Порядок ходов

  • Игрок А всегда начинает и играет за X.
  • Компьютерный противник играет за O и делает свой ход сразу после Игрока А.

3. Игровой процесс

  • Игроки по очереди ставят свои символы в пустые клетки на сетке.
  • Первый игрок, который выстроит три символа, выигрывает игру.

4. Условия выигрыша

Игрок выигрывает, если он достигнет:

  • Три символа в горизонтальном ряду
  • Три символа в вертикальном столбце, или
  • Три символа в диагональной линии

5. Рисование

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

6. Учет очков

Счетчики побед отслеживают общее количество побед как Игрока A, так и компьютера.

Реализованные функции (MVP)

Вот что включено в эту версию игры:

  1. Играйте против компьютера: Увлекательный одиночный режим, в котором вы сражаетесь с компьютером
  2. Всплывающее окно объявления победителя: В конце каждой игры всплывающее окно показывает победителя.
  3. Счетчики побед: Отслеживайте общее количество побед как игрока, так и компьютера.
  4. Настраиваемая сетка: Создайте сетку n x n (хотя логика победы в настоящее время поддерживает только 3 x 3).

Возможные улучшения

Смотря в будущее, вот несколько областей для улучшения:

  1. [UX] Локальное хранилище для очков: Сохраняйте очки игры локально, чтобы они сохранялись после обновления браузера.
  2. [UX/Tech] Более умные ходы компьютера: Замените случайные ходы алгоритмом для более конкурентной игры.
  3. [UX] Многопользовательская игра в реальном времени: Включите возможность соревноваться двум игрокам в реальном времени с использованием технологий типа Socket.io.
  4. [Технология] Продвинутая организация SCSS: Переработайте SCSS с использованием миксинов, переменных и более эффективных техник структурирования.
  5. [UX/Технология] Грациозное ухудшение: Обеспечьте совместимость с немодернизированными браузерами для более широкой поддержки.

Установка и разработка

Необходимые условия

Прежде чем приступить, убедитесь, что у вас установлен Node.js (рекомендуемая версия: 6.4.1).

Начало работы

  1. Клонируйте репозиторий с GitHub.

2. Установите зависимости:

npm install

3. Запустите сервер разработки:

npm start

  • Откройте http://localhost:3000 в браузере, чтобы просмотреть приложение.

4. (По желанию) Соберите проект для продакшена:

npm run build

Это создаст оптимизированную папку build, готовую для развертывания.

Тестирование

Запустите тесты в интерактивном режиме отслеживания с:

npm test

Технические детали

Структура файлов

Проект следует стандартной структуре Create React App с модульным компонентным подходом.

 

src
├── index.js
├── App.css
├── App.js
├── Components
│   └── Board
│       ├── Board.scss
│       ├── Cross.jsx
│       ├── ScoreBoard.jsx
│       ├── index.jsx
│       ├── Round.jsx
│   └── Footer
│       ├── Footer.scss
│       ├── index.jsx
│   └── Header
│       ├── Header.scss
│       ├── index.jsx
├── utils
│   └── lib.js
public
├── index.html

Описание и подход

  • Приложение было создано с помощью Create React App для быстрой настройки MVP.
  • Игра инициализирует сетку n x n для игрового процесса.
  • Каждая ячейка имеет слушатель событий клика, позволяя Игроку A (X) сделать первый ход.
  • Ход компьютера симулируется с помощью логики случайного выбора ячейки, которая потребует доработки для пользовательских размеров сетки.
  • Использован SCSS для стилизации с акцентом на скорость, а не на сложность во время разработки.

Подход к тестированию

Ручные тесты

  • Убедитесь, что компьютер делает ход после завершения Игрока A.
  • Проверьте, заканчивается ли игра с объявлением победителя.
  • Тестируйте автоматические ходы компьютера.

Потенциальные модульные тесты

  • Проверьте, делает ли компьютер ход после Игрока A.
  • Проверьте, отображает ли игра правильного победителя.
  • Тестируйте крайние случаи для инициализации сетки и взаимодействий с пользователем.

Заключение

Спасибо за изучение моего проекта!

Вы можете найти полный исходный код и внести свой вклад в этот проект на GitHub. Давайте создадим классные вещи вместе!

Source:
https://dzone.com/articles/building-a-tic-tac-toe-game-using-react