Egy interaktív QR kód alapú kincskereső játék Halloween témában, Django backend-del és React frontend-del.
- Rugalmas csapat beállítás: 1-2 csapat választható
- Konfigurálható játékosok: 1-8 játékos (admin által beállítható)
- Játék módok:
- 1 csapat: Egyedül vagy együttműködés
- 2 csapat: Verseny mód (külön fázis → közös fázis)
- QR kódok: Minden állomáson QR kód beolvasás szükséges
- Segítség rendszer: 1 segítség állomásonként
- Mentés rendszer: 1 mentés külön fázisban, 1 mentés közös fázisban
- Session kezelés: Játékosok kiléphetnek és visszatérhetnek
- Valós idejű progress: Mindkét csapat haladásának megjelenítése
- Teljes játékkezelés: Játék létrehozás, szerkesztés, törlés
- Rugalmas játék konfiguráció: Csapatok és játékosok számának beállítása
- Játékos kezelés: Hozzáadás, eltávolítás, áthelyezés
- Valós idejű monitoring: Csapatok haladásának követése
- Játék állapot kezelés: Indítás, leállítás, visszaállítás
- Modern admin felület: React alapú, felhasználóbarát
- Session token rendszer: Biztonságos játékos azonosítás
- Token lejárat: Automatikus session kezelés
- Kilépés opciók: Szüneteltetés vagy végleges kijelentkezés
- Adatbázis optimalizálás: Indexek és prefetch optimalizálás
- Python 3.8+
- Node.js 16+
- npm vagy yarn
# Virtuális környezet létrehozása
python -m venv myvenv
# Aktiválás (Windows)
myvenv\Scripts\activate
# Aktiválás (Linux/Mac)
source myvenv/bin/activate
# Függőségek telepítése
cd backend
pip install -r requirements.txt
# Adatbázis migrálása
python manage.py migrate
# Admin felhasználó létrehozása
python manage.py createsuperuser
# Teszt adatok betöltése (opcionális)
python manage.py setup_test_data
# Szerver indítása
python manage.py runservercd frontend
# Függőségek telepítése
npm install
# Fejlesztői szerver indítása
npm run dev
# Vagy production build
npm run build-
Játékos csatlakozás:
- Nyisd meg a frontend alkalmazást:
http://localhost:8000(Django szerver) - Add meg a játék kódját
- Add meg a játékosneved és válassz csapatot
- Nyisd meg a frontend alkalmazást:
-
Játék menete:
- QR kód beolvasás: Minden állomáson be kell olvasni a QR kódot
- Segítség kérése: Ha elakadsz, kérhetsz segítséget (1x állomásonként)
- Mentés használata: 1x külön fázisban, 1x közös fázisban
- Progress követés: Láthatod mindkét csapat haladását
-
Kilépés opciók:
- Szüneteltetés: Később folytathatod ugyanitt (session token megmarad)
- Kijelentkezés: Végleges kilépés (nem térhetsz vissza)
-
Admin felület elérése:
- URL:
http://localhost:8000/admin - Bejelentkezés a létrehozott admin fiókkal
- URL:
-
Játék létrehozása:
- Új játék létrehozása
- Csapatok és játékosok számának beállítása (1-2 csapat, 1-8 játékos)
- Csapatok automatikus létrehozása
- Játékosok hozzáadása
-
Játék kezelése:
- Játék indítása/leállítása
- Játékosok kezelése (hozzáadás, eltávolítás, áthelyezés)
- Valós idejű progress monitoring
- Játék visszaállítása
backend/
├── treasurehunt/
│ ├── api/
│ │ ├── game_views.py # Játék kezelési API
│ │ ├── player_views.py # Játékos kezelési API
│ │ ├── challenge_views.py # Feladat kezelési API
│ │ └── admin_views.py # Admin API
│ ├── models.py # Adatbázis modellek
│ ├── services.py # Üzleti logika
│ ├── game_state_manager.py # Játék állapot kezelés
│ └── session_token_services.py # Session kezelés
frontend/src/
├── components/
│ ├── admin/ # Admin komponensek
│ ├── ProgressDisplay.jsx # Haladás megjelenítés
│ ├── ChallengePanel.jsx # Feladat panel
│ ├── GameExitDialog.jsx # Kilépés dialógus
│ └── Toast.jsx # Értesítések
├── services/
│ └── api.js # API kommunikáció
└── utils/
└── gameUtils.js # Segédfunkciók
- Játékosok: 1-8 játékos
- Csapatok: 1 csapat (🎮 Főcsapat)
- Játékmenet: Egyedül vagy együttműködés
- Fázisok: Csak közös fázis (5-6. állomás)
- Játékosok: 2, 4, 6, vagy 8 játékos
- Csapatok: 2 csapat (🎃 Tök Csapat és 👻 Szellem Csapat)
- Játékmenet: Verseny → Együttműködés
- Fázisok: Külön fázis (1-4. állomás) → Közös fázis (5-6. állomás)
- 1 csapat: Minden játékos ugyanabban a csapatban
- 2 csapat: Játékosok egyenlően elosztva (pl. 4 játékos = 2-2 fő/csapat)
Minden állomást külön be kell állítani:
| Állomás | Név | Ikon | Fázis |
|---|---|---|---|
| 1 | Kezdő állomás | 🎃 | Külön Fázis |
| 2 | Kísértetek kastélya | 👻 | Külön Fázis |
| 3 | Pókok barlangja | 🕷️ | Külön Fázis |
| 4 | Denevérek tornya | 🦇 | Külön Fázis |
| 5 | Találkozási pont | 💀 | Közös Fázis |
| 6 | Boszorkány ház | 🧙♀️ | Közös Fázis |
Minden állomáshoz feladatokat kell létrehozni:
- Csapat típus: Tök Csapat vagy Szellem Csapat
- Cím: Feladat címe
- Leírás: Részletes feladat leírás
- QR kód: Egyedi azonosító (pl.
station1_pumpkin) - Segítség: Segítség szöveg
- Csapat típus: (üres - közös feladat)
- Cím: Feladat címe
- Leírás: Részletes feladat leírás
- QR kód: Egyedi azonosító (pl.
station5_together) - Segítség: Segítség szöveg
# Halloween témájú teszt adatok
python manage.py setup_halloween_game
# Vagy általános teszt adatok
python manage.py setup_test_data- Admin létrehozza a játékot és beállítja a csapatok/játékosok számát
- Csapatok automatikusan létrejönnek a beállítások alapján
- Játékosok csatlakoznak a frontend-en keresztül
- A játék automatikusan elindul, amikor elegendő játékos csatlakozott
- A csapatok versenyeznek egymással
- Minden csapat a saját feladatait oldja meg
- A cél: minél gyorsabban elérni a 4. állomást
- 1 mentés használható
- 2 csapatos játék: A csapatok együttműködnek
- 1 csapatos játék: A játékos(ok) együtt dolgoznak
- Közös feladatok megoldása
- A végső cél: a 6. állomás elérése
- 1 mentés használható
A QR kódokat bármilyen QR kód generátorral létrehozhatod:
Fontos: A QR kódoknak pontosan egyezniük kell az admin felületen beállított értékekkel!
GET /api/game/find/- Aktív játék kereséseGET /api/game/code/<code>/- Játék keresése kód alapjánPOST /api/game/create/- Új játék létrehozásaPOST /api/game/<id>/start/- Játék indításaDELETE /api/game/<id>/reset/- Játék visszaállításaPOST /api/game/<id>/stop/- Játék leállításaGET /api/game/<id>/status/- Játék állapot lekérdezése
POST /api/game/<id>/join/- Játékos csatlakozásGET /api/player/status/- Játékos állapot lekérdezésePOST /api/player/check-session/- Session ellenőrzésPOST /api/player/exit/- Játék szüneteltetésePOST /api/player/restore-session/- Session visszaállításaPOST /api/player/logout/- Végleges kijelentkezés
GET /api/game/<id>/team/<team>/challenge/- Aktuális feladatPOST /api/game/<id>/team/<team>/validate/- QR kód validálásPOST /api/game/<id>/team/<team>/help/- Segítség kérése
GET /api/admin/games/- Játékok listázásaPOST /api/game/<id>/player/add/- Játékos hozzáadásaDELETE /api/game/<id>/player/<player_id>/remove/- Játékos eltávolításaPOST /api/game/<id>/player/<player_id>/move/- Játékos áthelyezése
App.jsx- Fő alkalmazás komponensWelcome.jsx- KezdőoldalPlayerRegistration.jsx- Játékos regisztrációAdminPanel.jsx- Admin felület
ProgressDisplay.jsx- Haladás megjelenítés (minden csapat)ChallengePanel.jsx- Feladat panelGameResults.jsx- Eredmények megjelenítéseGameExitDialog.jsx- Kilépés dialógusToast.jsx- Értesítések
GameList.jsx- Játékok listájaGameManage.jsx- Játék kezelésGameCreate.jsx- Játék létrehozásPlayerAddModal.jsx- Játékos hozzáadás
-
"Hálózati hiba" üzenet
- Ellenőrizd, hogy a Django szerver fut-e (
python manage.py runserver) - A frontend
http://localhost:8000-re mutat
- Ellenőrizd, hogy a Django szerver fut-e (
-
QR kód nem működik
- Ellenőrizd, hogy a QR kód pontosan egyezik-e az admin felületen beállított értékkel
- A QR kód kis- és nagybetű érzékeny
-
Játék nem indul el
- Ellenőrizd, hogy elegendő játékos csatlakozott-e (a beállított számnak megfelelően)
- Az admin felületen ellenőrizd a játék állapotát és konfigurációját
-
Admin felület nem elérhető
- Ellenőrizd, hogy létrehoztad-e a superuser fiókot
- Próbáld meg újra:
python manage.py createsuperuser
-
Session token hibák
- Töröld a localStorage-t a böngészőben
- Próbáld meg újra bejelentkezni
-
Progress nem frissül
- Frissítsd az oldalt (F5)
- Ellenőrizd a böngésző konzolt hibákért
MIT License - szabadon használható és módosítható.
Ha szeretnél hozzájárulni a projekthez:
- Fork-old a repository-t
- Készíts egy új branch-et
- Commit-old a változtatásaidat
- Push-old a branch-et
- Nyiss egy Pull Request-et
Ha bármilyen kérdésed van, nyiss egy Issue-t a GitHub repository-ban.
Jó szórakozást a kincskereséshez! 🎃👻