# 🎭 Lokalny Impostor

Wieloosobowa gra społecznościowa inspirowana grą **Among Us** — rozgrywana w przeglądarce w czasie rzeczywistym przez Socket.IO.

![Among Us Style](https://img.shields.io/badge/style-Among%20Us-red?style=for-the-badge)
![React](https://img.shields.io/badge/React-19-61DAFB?style=for-the-badge&logo=react)
![Socket.IO](https://img.shields.io/badge/Socket.IO-4-010101?style=for-the-badge&logo=socket.io)
![Node.js](https://img.shields.io/badge/Node.js-Express-339933?style=for-the-badge&logo=node.js)

## 🎮 Jak działa gra?

1. **Host tworzy pokój** — generuje się kod pokoju i QR kod do udostępnienia
2. **Gracze dołączają** — wpisują nick i kod pokoju (min. 3 graczy)
3. **Odkrycie roli** — każdy gracz dowiaduje się czy jest **Crewmate** (zna hasło) czy **Oszustem** (nie zna hasła)
4. **Faza mówienia** — gracze po kolei opisują hasło jednym słowem (oszust musi blefować!)
5. **Głosowanie** — gracze głosują kto jest oszustem
6. **Wynik** — jeśli oszust zostanie złapany → gracze wygrywają, jeśli nie → kolejna runda

## 🚀 Uruchomienie

### Wymagania
- Node.js 18+
- npm

### Instalacja

```bash
# Klonowanie repo
git clone https://github.com/TWOJ_USERNAME/Lokalny-Impostor.git
cd Lokalny-Impostor

# Backend
cd backend
npm install
cp .env.example .env

# Frontend
cd ../frontend
npm install
```

### Uruchomienie (dev)

```bash
# Terminal 1 — Backend
cd backend
npm run dev

# Terminal 2 — Frontend
cd frontend
npm run dev
```

Otwórz **http://localhost:5173** w przeglądarce.

## 📁 Struktura projektu

```
├── backend/
│   ├── server.js          # Express + Socket.IO server
│   ├── game.js            # Logika gry (tury, głosowanie, win conditions)
│   ├── .env.example       # Przykładowe zmienne środowiskowe
│   └── package.json
├── frontend/
│   ├── src/
│   │   ├── App.jsx        # State machine (lobby → roleReveal → playing → ended)
│   │   ├── index.css      # Among Us themed CSS design system
│   │   ├── main.jsx       # Entry point
│   │   └── components/
│   │       ├── Lobby.jsx      # Menu + poczekalnia
│   │       ├── RoleReveal.jsx # Animacja odkrycia roli
│   │       ├── Game.jsx       # Faza mówienia + głosowanie
│   │       ├── GameEnded.jsx  # Ekran końca gry
│   │       └── Icons.jsx      # Biblioteka ikon SVG
│   ├── index.html
│   └── package.json
├── .gitignore
└── README.md
```

## ✨ Funkcje

- 🔴 **Role** — losowy przydział: Crewmate (zna hasło) vs Oszust (nie zna)
- 🎤 **Tury** — gracze po kolei opisują hasło, oszust blefuje
- 🗳️ **Głosowanie** — głosowanie na podejrzanego lub skip
- 📱 **QR Code** — łatwe dołączanie przez QR lub kod pokoju
- 🎨 **Styl Among Us** — kosmiczne tło, postacie CSS, animacje
- 🔄 **Host migration** — jeśli host wyjdzie, nowy host jest wybierany automatycznie
- 🛡️ **Bezpieczeństwo** — personalizowany stan gry per gracz (oszust nie widzi hasła)
- 📱 **Responsywność** — działa na telefonach i komputerach

## 🛠️ Technologie

| Warstwa | Technologia |
|---------|-------------|
| Frontend | React 19 + Vite |
| Styling | Vanilla CSS (Among Us theme) |
| Backend | Node.js + Express |
| Realtime | Socket.IO |
| QR Code | react-qr-code |
| Fonts | Russo One + Inter (Google Fonts) |

## 📝 Licencja

MIT
