Net Board/Jak napsat novou hru?
Z JKwiki
Obsah |
Jak herní modul vypadá?
Herní modul komunikuje pouze s hrací deskou (jádrem toho všeho) prostřednictvím standardního vstupu a výstupu. Modul je obyčejný spustitelný program jako každý jiný a pokud jej spustíte samostatně, uvidíte něco takovéhoto:
( "Bst" "Piškvorky" ) ( "Br" ) ( "Bil" "boards/piskvorky.png" 0 ) ( "Boa" 0 0 0 0 -1 -1 ) ( "Bu" ) ( "Bil" "cursors/piskvorky-highlight.png" 3 ) ( "Bil" "pieces/piskvorky-circle.png" 1 ) ( "Bil" "pieces/piskvorky-cross.png" 2 ) ( "Boa" 1 3 168 168 -1 -1 ) ( "Sgr" "X: křížek" "O: kolečko" ) ( "Sgl" )
Toto vypíšou piškvorky po svém spuštění. Vlastní komunikace probíhá prostřednictvím jednoduchých zpráv, které jsou uzavřeny v závorkách a mají podobu prostého seznamu hodnot. V některých případech je těch seznamů více, v takovém případě jsou odděleny svislítkem, ale o tom později.
Průběh hry
Ihned po spuštění modul zinicializuje sám sebe a poté odešle zprávu ("Sgl"), čímž řekne zbytku světa, že je připraven. V průběhu inicializace by měl odeslat také seznam možných rolí (stran) ve hře pomocí zprávy ("Sgr").
Po inicializaci herní modul jen čeká a čeká. Před zahájením hry je nutné ověřit, zda si hráči rozebrali své role správně. Na toto se zeptá jádro zprávou ("Gc"). Herní modul si vyžádá seznam hráčů zprávou ("Pl") a zkontroluje jej. Poté odpoví ("Sga"), pokud hra může začít, nebo ("Sgd") v opačném případě. Toto ověřování může proběhnout i vícekrát.
Jakmile je zahájení hry povoleno, jádro počká na ostatní hráče -- zahájení hry musí být povoleno všemi herními moduly ve hře a tedy všemi účastníky. Jakmile je toto potvrzení přijato od všech, obdrží herní modul zprávu ("Gs"). Od té chvíle je hra zahájena, seznam hráčů je nadále neměnný a herní modul musí korektně reagovat na tahy ostatních hráčů i na akce místního uživatele.
Nikde není zaručeno, že ostatní hráči budou posílat správné tahy, nebo že příchozí tahy nebudou dokonce od někoho úplně jiného. Proto herní modul musí ověřit korektnost každého tahu. V případné nesmysly musí herní modul ustát a nejlépe je ignorovat.
Odesílání a příjmání tahu vypadá tak, že akce lokálního uživatele na herní desce je zpracována do tahu a ten je odeslán ostatním. Takto odeslaný tah se vrátí, čímž je potvrzeno jeho doručení ostatním a herní modul jej znovu zpracuje a aktualizuje herní stav. Podobnost s obvyklými chaty zde není vůbec náhodná.
Pokud je ze hry nějaký hráč vyřazen, musí herní modul pokračovat ve své činnosti a starat se o zobrazování průběhu zbývající hry.
Jakmile hra skončí, herní modul odešle zprávu ("Sgo") a ukončí se. Mezitím by měl ještě poskytnout nějaké informace o výsledku hry. Vhodnou cestou je chat a sloupec score v seznamu hráčů. Pokud by se herní modul ukončil dříve než odešle ("Sgo"), bylo by to interpretováno jako jeho spadnutí.
Vykreslování herní desky
Před zahájením hry oznámí herní modul, jaké obrázky bude potřebovat pomocí zpráv ("Bil"). Takto načtené obrázky pak bude herní modul umisťovat na herní desku pomocí zpráv ("Boa"). Po každé změně na herní desce je nutno vyžádat její aktualizaci zprávou ("Bu"). Není zaručeno, že herní deska nebud překreslena dříve, ale je zaručeno, že se nezmění stav umístěných obrázků. Tedy zprávy ("Boa") se projeví až po aktualizaci, ale ("Bil") se mohou projevit i dříve.
Zvláštností je objekt s id 0, který je použit jako podklad herní desky. Podle jeho velikosti je určena i velikost herní desky a ostatní objekty jsou umisťovány na něj. Pokud tento objekt neexistuje, je hrení deska skryta a nevykresluje se nic.
Události od uživatele
Herní deska generuje několik zpráv jako reakci na akce uživatele. Zejména jde o zprávy ("Bbp"), ("Bbr"), ("Bkp") a ("Bkr").
V čem a jak herní modul napsat?
Herní modul je obyčejný program, který nevyužívá ničeho jiného než standardního vstupu a výstupu. Nepotřebuje tedy žádné zvláštní knihovny ani nic dalšího. Co se ale bude hodit, je knihovna na parsování a generování zpráv. Ta ještě není hotova, ale snad brzy bude.
Psát je možné v čemkoliv. První testy jsem psal v bashi, něco je v perlu, ale jinak hry samotné jsou v C. Bylo by celkem vhodné, aby hry byly psány s ohledem na přenositelnost na jiné systémy. Netboard jako takový funguje (by měl fungovat) všude, kde funguje Gtk+.
A jen tak pro úplnost. Netboard není omezen na tahové hry. Nikde není žádná kontrola, kdo je kdy na tahu. Hry mohou být i realtimové a vlastně to ani nemusí být hry. Rovněž nikde není dáno, že herní plocha je čtvercová. Obrázky na ní mohou být naskládány libovolně.
