Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem Naprogramovani hry Kdo s kym pres internet

Dobrý den, chtěl bych naprogramovat hru "Kdo s kým" (pro dva hráče, ale když by to šlo nějak elegantně udělat, tak klidne i pro více hráčů), ale potřeboval bych nějak nakoupnout, či poradit, jak začít. Napadlo mne, že abysme to s přítelkyní mohli hrát i přes tablet vzdáleně, tak určitě bych to uděalal přes nějaký web na free doméně. Mám ideu, že bych to udělal přes PHP pomocí session, ale nejsem si úplně jistý, zda-li je to to nejvhodnější řešení, protože docela nevím, jak bych např. zjišťoval, že oba hráči vyplnili všechna pole... Možná bych to uďelal rovnou "privátně", že bychom měli dvě uživ. jména a hesla a jenom my dva bychom to po přihlášení mohli hrát. Budu rád za každou radu, za každý nápad! V programování nejsem úplný začátečník, ale ani žádný extra pokročilý.
Díky

Předmět Autor Datum
Klasické riešenie by bolo použiť databázu. Ja by som to robil asi takto: Každému pripojenému použív… poslední
moose 27.08.2017 22:06
moose

Klasické riešenie by bolo použiť databázu. Ja by som to robil asi takto:

Každému pripojenému používateľovi sa vygeneruje token, ktorý sa uloží do cookie a aj do databázy. Hráč si bude môcť nastaviť prezývku, bude môcť začať hru, zobraziť si hry čakajúce na spoluhráča, pripojiť sa do hry, odoslať hodnoty polí, vypýtať si hodnoty polí spoluhráča. Pri každej požiadavke na server sa aktualizuje čas posledného prihlásenia hráča, podľa čoho sa budú určovať aktívni hráči.

To znamená, že bude potrebné obsluhovať nasledovné metódy:

- /user (POST) - Nastavenie prezývky. Táto metóda uloží do databázy k danému hráčovi prezývku.
- /games/create (POST) - Vytvorenie novej hry. V databáze vytvorí nový riadok pre hru a nastaví jej, že bola vytvorená daným hráčom.
- /games (GET) - Vráti zoznam hier, kde nie je pripojený žiadny hráč. Vyberie z databázy riadky pre hry, kde nie je nastavený spoluhráč.
- /games/${idHry}/join (POST) - Pripojí sa k hre. Treba ošetriť stavy, keď hra už má nastaveného spoluhráča, alebo bola dohraná, alebo neexistuje.
- /games/${idHry} (POST) - Nastaví vyplnené polia v danej hre. Hra musí byť vytvorená daným hráčom alebo daný hráč musí byť nastavený ako spoluhráč. Ak sú vyplnené všetky polia (aj vlastníkom aj spoluhráčom), označí hru ako dokončenú.
- /games/${idHry} (GET) - Zobrazí polia spoluhráča.

Databáza by vyzerala nasledovne (pre n hráčov by som ešte oddelil vyplnené polia do samostatnej tabuľky, napr. gamestate):

user: id, nick, token, last_seen_on
game: id, created_by, joined_by, created_on, updated1_on, updated2_on, kdo1, skym1, ... kdo2, skym2, ...

To by bol taký jednoduchý základ. Ak by ste chceli niečo zložitejšie, tak by sa dalo vymýšľať, ako to spraviť cez web sockety, prípadne možno cez WebRTC. Ale začal by som týmto jednoduchším.

Použitie session na zdieľanie údajov by bol taký hack. Namiesto zdieľania dát by sa dala použiť zdieľaná pamäť, memcache alebo prinajhoršom súbor. Databáza z toho vychádza ale najlepšie.

Zpět do poradny Odpovědět na původní otázku Nahoru