Камень-ножницы-бумага #
О проекте #
Настало время оцифровать еще одну игру. В этом проекте ты познакомишься с React — библиотекой, на которой пишут современные веб-приложения такие как: запрещенные в РФ Facebook и Instagram, Airbnb, Netflix и даже Telegram. Разберёшься, как хранить данные, управлять состоянием и стилизовать интерфейс без CSS.
После этого урока ты не просто создашь игру, но и поймешь, как работают современные инструменты разработки. Это первый шаг к созданию реальных веб-приложений, за которые платят деньги.
Правила. Ну так, на всякий случай.
Чему научишься #
- Освоишь основы React. React — это библиотека для создания современных веб-приложений. Она помогает разрабатывать интерфейсы, которые быстро обновляются, без необходимости перерисовывать всю страницу.
- Настроишь локальный сервер для разработки. Когда ты пишешь код, тебе нужно где-то его запускать и тестировать. В HTML/CSS можно просто открыть файл в браузере, но с React так не получится. Здесь нужен локальный сервер — среда, где приложение будет работать прямо на твоем компьютере, пока ты его разрабатываешь.
- Настроишь сборщик приложений. Vite — современный инструмент, который быстро создает и запускает React-проекты. Он позволяет вносить изменения в код и сразу видеть их в браузере без перезагрузки страницы.
- Узнаешь про менеджеры пакетов. Когда программисты создают проекты, они редко пишут весь код с нуля. Вместо этого они используют готовые библиотеки (например, React, tailwind), которые уже кто-то написал. Но как быстро скачивать и обновлять эти библиотеки? Для этого и существуют менеджеры пакетов.
- Познакомишься с менеджером состояний. Это инструмент для управления состоянием в сложных приложениях. Если в игре «Камень-ножницы-бумага» нужно просто хранить выбор игрока и бота, то в более сложных проектах может понадобиться хранить много данных сразу (например, список игроков, статистику, историю игр).
- Узнаешь про CSS фреймворки. Tailwind — это набор утилитарных классов, которые помогают стилизовать страницу без CSS.
- Настроишь статический анализатор кода. Когда код большой, его становится трудно читать и поддерживать. ESLint и Prettier помогают автоматически находить ошибки и форматировать код, чтобы он выглядел красиво и одинаково у всех разработчиков.
Материалы для подготовки #
Самостоятельный поиск других источников приветствуется
- Официальный сайт Node.JS
- Полный гайд по NPM для новичков
- Vite - Современный и простой сборщик приложений. В этом проекте он уже настроен для работы. Материалы для углубленного изучения:
- React:
- React JS c Нуля – Курс для начинающих
- Legacy-документация — объяснено простым языком.
- Новая документация — больше глубоких концепций, пригодится в будущем.
- Redux
- Redux за 100 Секунд
- Redux и React. Все о Redux
- Основная документация redux. В этом проекте нас интересует подоход из параграфа Legacy Example, не toolkit. Здесь стоит объяснить мотивацию: классический redux все еще использует ооочень большое количество приложений + его синтаксис и концепции проще в понимании, чем toolkit.
- React Redux документация [ENG] | [RU].
- Tailwind - это утилитарный CSS-фреймворк, где стили задаются через готовые классы прямо в HTML. Вместо написания кастомного CSS, разработчики используют классы, такие как bg-blue-500 или p-4, для быстрой и гибкой стилизации.
- Как установить Tailwind CSS в проекте с Vite
- Основные концепции. Тот редкий случай, когда официальная документация написана простым языком.
- Когда дойдете до практики, то рекомендую пользоваться английской документацией, т.к. большинство tailwind классов названы идентично CSS свойствам, а в русской версии их зачем-то перевели. Отсюда может возникнуть путаница и недопонимание в будущем, т.к. русскоговорящие разработчики используют оригинальные названия CSS свойств, а не переведенные.
- Распространенные принципы разработки. В командной разработке без них никуда. С опытом ценность каждого паттерна станет понятнее. Для этого проекта будет хорошо разобраться в первых трех и попытаться их применить.
- Пример структуры приложения
- Как настроить ESLint и Prettier в React приложении. После настройки линтеров включить в настройках редактора кода функцию “Форматировать при сохранении”. Так будет проще поддерживать код в чистоте.
Техническое задание #
- Сделай форк репозитория https://github.com/Ospens/rock-paper-scissors-template. В нем уже есть все нужные настойки, можно сразу писать приложение.
- Перейди по ссылке на репозиторий
- В правом верхнем углу нажми кнопку Fork. GitHub создаст копию этого репозитория в твоём аккаунте
- Перейди в свой аккаунт на GitHub и открой форкнутый репозиторий
- Нажми кнопку Code (зелёная) → выбери HTTPS и скопируй ссылку
- Открой терминал (или командную строку) на компьютере и введи команду:
git clone https://github.com/ТВОЙ_АККАУНТ/rock-paper-scissors-template.git
- Для стилизации должен быть использован фреймворк tailwind
- Сайт должен быть адаптивным
- При открытии страницы появляется кнопка Play и названием игры. При нажатии на кнопку игрок попадает на страницу с игрой.
- Сайт должен иметь светлую и темную темы. Переключение происходит в правом верхнем углу на соответсвующую иконку. Выбранная тема должна сохранятся при переходе между экранами
- Для хранения состояния (данных) должен быть использован обычный redux (не toolkit)
- Чтобы выбрать жест игрок должен нажать на одну из кнопок внизу. Соответствующий жест должен появиться слева от текста VS
- Выбор жеста ботом должен быть абсолютно случайным. После того как игрок сделал выбор жест бота появляется справа от текста VS
- По результатам раунда счетчик побед игрока или компьютера должен увеличиваться на 1 в соответствии с правилами игры
- Кнопка “RESET THE SCORE” должна сбрасывать счет обоих игроков до 0.
Заметки #
- Пару слов о пример структуры из материалов. Такая организация папок была популярна раньше, и все еще встречается на проектах. Она называется folder-by-type, т.е. код группирован по техническим критериям, а не по бизнес требованиям. Из-за этого с ней есть проблемы, даже на проектах средних размеров. Но я рекомендую ее по следующим причинам:
- Она проще в понимании и в маленьких проектах с ней нет проблем
- Если на рабочем проекте попадется такая структура - буде проще в ней ориентироваться
- В следующих уроках мы изучим современные подходы к проектированию.
Обратная связь и контакты #
По любым вопросам пиши мне, @i_urKing, и подписывайся на канал @js_is_easy