| backend | ||
| database | ||
| public | ||
| .env.example | ||
| .gitignore | ||
| .htaccess | ||
| composer.json | ||
| readme.md | ||
Texas Hold'em Poker
PHP alapú többjátékos Texas Hold'em póker játék.
Technológiák
- PHP 8.1+
- MySQL / MariaDB
- Apache (.htaccess mod_rewrite)
Beállítás
1. Adatbázis
Hozz létre egy poker nevű adatbázist, majd importáld a sémát:
mysql -u root -p poker < database/schema.sql
2. Környezeti változók
Másold le a .env.example fájlt .env névre, és töltsd ki:
DB_HOST=localhost
DB_NAME=poker
DB_USER=root
DB_PASS=jelszo
3. Webszerver
Az .htaccess fájlok Apache-ot feltételeznek, mod_rewrite engedélyezve.
A projekt gyökerét a public/ mappára mutató virtual host helyett a repo gyökerére állítsd.
API referencia
Minden végpont JSON-t ad vissza. Hiba esetén {"error": "..."}, sikernél {"success": true} vagy az adatot.
Az akciót a ?action= query paraméterrel kell megadni.
POST adatokat application/x-www-form-urlencoded formátumban kell küldeni.
Autentikáció — /api/auth
A bejelentkezés PHP session-t használ. A session cookie-t a böngésző automatikusan kezeli.
POST /api/auth?action=register
Regisztráció.
| Mező | Típus | Leírás |
|---|---|---|
username |
string | Felhasználónév |
password |
string | Jelszó |
Válasz:
{ "success": true }
POST /api/auth?action=login
Bejelentkezés.
| Mező | Típus | Leírás |
|---|---|---|
username |
string | Felhasználónév |
password |
string | Jelszó |
Válasz:
{ "success": true, "user_id": 1 }
POST /api/auth?action=logout
Kijelentkezés, session törlése.
Válasz:
{ "success": true }
GET /api/auth?action=me
Bejelentkezett felhasználó adatai.
Válasz:
{ "id": 1, "username": "jani", "chips": 1000 }
Szobák — /api/room
Minden szoba-végpont bejelentkezést igényel.
GET /api/room?action=list
Csatlakozható (várakozó) szobák listája.
Válasz:
[
{
"id": 1,
"name": "Jani szobája",
"max_players": 6,
"min_bet": 10,
"status": "waiting",
"player_count": 2
}
]
POST /api/room?action=create
Új szoba létrehozása. A létrehozó automatikusan csatlakozik (0-s szék).
| Mező | Típus | Alapértelmezett | Leírás |
|---|---|---|---|
name |
string | "Szoba" |
Szoba neve |
max_players |
int | 6 |
Max játékosok (2–9) |
min_bet |
int | 10 |
Minimális tét |
Válasz:
{ "success": true, "room_id": 1 }
POST /api/room?action=join
Csatlakozás egy várakozó szobához.
| Mező | Típus | Leírás |
|---|---|---|
room_id |
int | Szoba azonosítója |
Válasz:
{ "success": true }
POST /api/room?action=start
Játék indítása. Csak a szoba létrehozója indíthatja el, legalább 2 játékos szükséges.
| Mező | Típus | Leírás |
|---|---|---|
room_id |
int | Szoba azonosítója |
Válasz:
{ "game_id": 3 }
Játék — /api/game
Minden játék-végpont bejelentkezést igényel. A
game_id-t minden kéréshez meg kell adni.
GET /api/game?action=state&game_id=3
Az aktuális játékállapot lekérése. A frontend ezt pollingolja (~2 másodpercenként).
Más játékos lapjai null-ként jelennek meg, kivéve showdownnál.
Válasz:
{
"game_id": 3,
"stage": "flop",
"pot": 40,
"community_cards": ["Ah", "7d", "2c"],
"current_player_id": 2,
"max_bet": 20,
"players": [
{
"user_id": 1,
"seat": 0,
"username": "jani",
"chips_in_game": 980,
"current_bet": 20,
"total_bet": 20,
"is_active": true,
"has_acted": true,
"cards": ["Kh", "Ks"]
},
{
"user_id": 2,
"seat": 1,
"username": "peti",
"chips_in_game": 990,
"current_bet": 10,
"total_bet": 10,
"is_active": true,
"has_acted": false,
"cards": null
}
]
}
A stage lehetséges értékei: preflop → flop → turn → river → showdown
POST /api/game?action=fold&game_id=3
Fold — kiszállás a körből.
Válasz: frissített state objektum (lásd fent)
POST /api/game?action=check&game_id=3
Check — passzolás (csak ha nincs nyitott tét).
Válasz: frissített state objektum
POST /api/game?action=call&game_id=3
Call — az aktuális maximális tét kifizetése.
Válasz: frissített state objektum
POST /api/game?action=raise&game_id=3
Raise — tét emelése.
| Mező | Típus | Leírás |
|---|---|---|
amount |
int | Az új teljes tét összege (nem a különbség!) |
Például ha a jelenlegi max_bet = 20 és 50-re emelsz, amount=50.
Válasz: frissített state objektum
Játék menete
register / login
↓
room create → room join (többen)
↓
room start → game_id
↓
game state (polling) ←──────────────┐
↓ │
current_player_id == saját user_id? │
↓ igen │
fold / check / call / raise ─────────┘
↓
stage == "showdown" → játék vége, chips_in_game frissül
Kártyajelölések
| Jel | Jelentés |
|---|---|
A, K, Q, J, T |
Ász, Király, Dáma, Bubi, Tízes |
2–9 |
Számkártyák |
h, d, c, s |
Kőr (hearts), Káró (diamonds), Treff (clubs), Pikk (spades) |
Példa: Ah = Ász-kőr, Td = Tízes-káró
Kézrangsor
| Rang | Név |
|---|---|
| 10 | Royal Flush |
| 9 | Straight Flush |
| 8 | Four of a Kind |
| 7 | Full House |
| 6 | Flush |
| 5 | Straight |
| 4 | Three of a Kind |
| 3 | Two Pair |
| 2 | One Pair |
| 1 | High Card |