Полноценная онлайн игра CodeNames на React с реал-тайм мультиплеером через Firebase.
ВАЖНО: Прежде чем запустить, прочитайте START_HERE.md для миграции на мультиплеер!
# 1. Установите зависимости
npm install
# 2. Замените старые файлы (см. START_HERE.md)
# 3. Запустите
npm start- 2 команды: Красная и Синяя
- В каждой команде: 1 капитан и игроки
- Игровое поле: 28 случайных слов
- 9 слов Красной команды
- 9 слов Синей команды
- 1 слово-мина (бомба)
- 9 нейтральных слов
- Лобби: Игроки входят, вводят имя и выбирают команду
- В каждой команде выбирается капитан (нажав кнопку "Стать капитаном")
- После начала игры капитан видит какие слова принадлежат его команде
- Капитан дает одно слово-подсказку и количество слов, связанных с подсказкой
- Подсказки выводятся в столбике справа для всех игроков
- Игроки команды открывают карточки, пытаясь угадать свои слова
- Если угадали свое слово - можно продолжать
- Если угадали чужое или нейтральное - ход переходит к другой команде
- Если попали на мину - команда проигрывает!
- Побеждает команда, которая первой откроет все свои 9 слов
# Установите зависимости
npm install
# Запустите проект
npm startПриложение откроется по адресу http://localhost:3000
- ✅ Лобби с выбором команды
- ✅ 🌐 Онлайн мультиплеер через Firebase Realtime Database
- ✅ 🏠 Система комнат с уникальными ID и ссылками для приглашений
- ✅ 📋 Копирование ссылки для приглашения друзей
- ✅ Реал-тайм синхронизация всех действий между игроками
- ✅ Назначение капитанов в командах
- ✅ Полная игровая логика
- ✅ 28 карточек с случайными словами
- ✅ Режим капитана (видны цвета карт)
- ✅ Режим игрока (цвета скрыты)
- ✅ Система подсказок в столбике
- ✅ История всех подсказок
- ✅ Счётчик оставшихся слов
- ✅ Окончание хода команды
- ✅ Определение победителя
- ✅ Адаптивный дизайн
- ✅ Возврат в лобби после игры
- ✅ 8 различных тем (Классика, Аниме, Бренды, Футболисты, Кино, История, Наука, Животные)
- ✅ Таймер 60 секунд на отгадывание после подсказки
- ✅ Анимация поворота при открытии карточек
- ✅ Firebase подготовка для мультиплеера
- Завершить онлайн мультиплеер (WebSocket / Firebase)
- Приватные комнаты для игр
- Чат для команд
- Больше слов в словаре
- История игр
- Статистика побед
- Рейтинг игроков
- Звуковые эффекты
- Темы оформления (тёмная/светлая)
- React 18 - UI библиотека
- Context API - управление состоянием
- Firebase - реал-тайм база данных и синхронизация
- CSS3 - стилизация с анимациями
- React Scripts - сборка проекта
codenames/
├── public/
│ └── index.html
├── src/
│ ├── components/
│ │ ├── Lobby.jsx # Лобби с выбором команд
│ │ ├── Game.jsx # Основной игровой компонент
│ │ ├── Card.jsx # Карточка со словом
│ │ └── HintsList.jsx # Столбик с подсказками
│ ├── context/
│ │ └── GameContext.js # Глобальное состояние игры
│ ├── utils/
│ │ └── gameLogic.js # Игровая логика
│ ├── styles/
│ │ └── App.css # Все стили
│ ├── App.js # Главный компонент
│ └── index.js # Точка входа
├── package.json
└── README.md
- Мультиплеер-готовность: Firebase готов к использованию для синхронизации между игроками
- Разделение ролей: Капитаны и игроки имеют разные возможности
- История подсказок: Все подсказки сохраняются и отображаются в отдельной панели
- Адаптивность: Работает на десктопах и мобильных устройствах
- Темы слов: 8 различных тем с разной сложностью
- Таймер: 60 секунд на открытие карточек после подсказки
- Анимации: Плавные переходы и анимации открытия карт
- Перейдите на Firebase Console
- Войдите с Google аккаунтом
- Нажмите "Add project" (Добавить проект)
- Введите название проекта, например:
codenames-game - Отключите Google Analytics (не обязательно для этого проекта)
- Нажмите "Create project"
- В левом меню выберите "Build" → "Realtime Database"
- Нажмите "Create Database"
- Выберите регион (например, "United States" или "Europe")
- Выберите режим безопасности:
- "Start in test mode" - для разработки (публичный доступ на 30 дней)
- Или настройте правила позже
- Нажмите "Enable"
- В левом меню нажмите на значок ⚙️ Settings → "Project settings"
- Прокрутите вниз до раздела "Your apps"
- Нажмите на значок веб-приложения </> ("Add app")
- Введите название приложения:
CodeNames Web - НЕ включайте Firebase Hosting (снимите галочку)
- Нажмите "Register app"
- Скопируйте весь объект
firebaseConfigкоторый появится
Вы увидите что-то вроде:
const firebaseConfig = {
apiKey: "AIzaSyC1234567890abcdefghijklmnopqrstuvwx",
authDomain: "codenames-game.firebaseapp.com",
projectId: "codenames-game",
storageBucket: "codenames-game.appspot.com",
messagingSenderId: "123456789012",
appId: "1:123456789012:web:abcdef1234567890abcdef",
databaseURL: "https://codenames-game-default-rtdb.firebaseio.com"
};Если в конфигурации нет databaseURL:
- Вернитесь в "Realtime Database" в меню слева
- В верхней части страницы скопируйте URL вида:
https://ваш-проект-default-rtdb.firebaseio.com - Добавьте это в конфигурацию как
databaseURL
Откройте файл src/utils/firebase.js и замените:
const firebaseConfig = {
apiKey: "AIzaSyDemoKey123456789", // ← Замените на ваш
authDomain: "codenames-demo.firebaseapp.com", // ← Замените на ваш
projectId: "codenames-demo", // ← Замените на ваш
storageBucket: "codenames-demo.appspot.com", // ← Замените на ваш
messagingSenderId: "123456789", // ← Замените на ваш
databaseURL: "https://codenames-demo-default-rtdb.firebaseio.com", // ← Замените на ваш
appId: "1:123456789:web:abc123def456" // ← Замените на ваш
};Для production режима настройте правила в Realtime Database → Rules:
{
"rules": {
"rooms": {
"$roomId": {
".read": true,
".write": true
}
}
}
}Теперь запустите приложение:
npm install
npm start| Параметр | Где найти |
|---|---|
| apiKey, authDomain, projectId, appId | Settings ⚙️ → Project settings → Your apps (внизу страницы) |
| databaseURL | Realtime Database → вверху страницы, URL базы данных |
| storageBucket | Settings ⚙️ → Project settings → Your apps |
| messagingSenderId | Settings ⚙️ → Project settings → Cloud Messaging |
- apiKey можно публиковать - он не секретный для Firebase
- Безопасность обеспечивается правилами Firebase Security Rules
- В test mode база доступна всем 30 дней, потом нужно настроить правила
- Для production всегда настраивайте правила безопасности!
Версия: 3.0 (React с темами, таймером и анимациями) Статус: Готов к локальному тестированию и расширению мультиплеера