..:: Ondra[sej] :: Projekty :: Piškvorky for Unix ::..
Ondra[sej] Home

[Tady bude nějaké moudro]

Piškvorkový server for Unix

Jednoduchý server pro hraní piškvorek na ploše 19x19 v prostředí TCP/IP sítí. Zpracováno jako zápočtový program k přednášce Unix na MFF UK.

Piškvorky :: Úvod

Důležitým krokem v životě každého matfyzáka je složení zkoušky a napsání zápočtového programu z předmětu Unix. Pro mě to byl poslední povinný předmět ležící mezi mnou a zcela nezřízeným neřízeným studiem.

Díky svému megalomansky-pasivnímu (rozumněj - vymyslim megalomanský zápočťák, na kterém pak do září nepracuju) přístupu jsem tento předmět absolvoval hned dvakrát.

Při druhém opakování už jsem ale nechtěl riskovat neúspěch, protože by měl na mé studium velmi nepříjemný restartovací efekt. Proto jsem byl trochu nervózní, když se přiblížila polovina září a zápočťák nejen že nefungoval, ale ani nebyl napsaný. Pokus o zlepšení make, který jsem zamýšlel ale nepokračoval dopředu tak rychle, jak bych si přál (a navíc se do toho přidalo nečekané dokončování pracovního projektu), proto bylo nutné provést radikální změnu. Rozšťourané zdrojáky xmake jsem zahodil a začal pěkně načisto (ale poučený) se serverem pro mojí v té době asi nejoblíbenější deskovou hru Go.

Technické detaily (jako je síťová komunikace) se podařilo úspěšně vyřešit, objevily se ale problémy s hratelností - jak realizovat přes síť jednoduchým způsobem dohadování o rozdělení území na konci hry bez toho, aby hráči museli tato území dohrávat až do úplného konce. Proto přišlo ještě jedno důležité zjednodušující řešení, totiž rychle předělat Go na jednoduché piškvorky. Podlé, ale funkční.

Piškvorky :: Řešení

Hra více hráčů

Protože hra neobsahuje počítačového oponenta, je hra více hráču nutností. Z praktických důvodů všechna komunikace probíhá přes TCP spojení v TCP/IP sítích, spojení vždy navazuje klient a pro jednoho připojeného klienta je otevřeno vždy jen jedno spojení.

Hráči se na server nemusí přilašovat, hraní na serveru není z hlediska přístupu žádným způsobem regulováno. Jediná identifikace hráčů probíhá tak, že si po přihlášení k serveru zvolí jméno, které musí být na serveru jednoznačné.

Kvůli splnění podmínek na zápočtový program jsem zvolil vícevláknovou implementaci a to naivním způsobem, kdy obsluha kažédho hráče běží v samostatném vlákně. Tím je na některých operačních systémech (zdravíme Linux) dáno omezení počtu hráčů omezeným počtem běžících vláken na uživatele.

Komunikační protokol

Pro jednoduchost zpracování a vyloučení možných problému při komunikaci mezi různými hardwarovými/softwarovými platformami jsem pro komunikaci zvolil velmi jednoduchý textový protokol.

Zprávy zasílané hráčem serveru mají vždy podobu příkazu s několika parametry, zprávy zasílané serverem hráči jsou ve tvaru informačních zpráv (reakce na příkaz zaslaný hráčem), nebo upozornění (informace o dění ve hrách kterých se uživatel účastní jako hráč nebo jako pozorovatel). Vždy platí, že zpráva je ukončena znakem konce řádku. Pokud je třeba zadat znak konec řádku do textu zprávy, stačí celou část obsahující znak konce řádku ohraničit uvozovkami.

Možnosti hráče

Protokolem a dostupnými příkazy jsou dány také možnosti hráče v systému. Hráč může jednak zakládat nové hry (hry jsou na serveru identifikovány svým jménem) a jednak vstupovat do her ostatních hráčů jako hráč (pokud je ve hře jen jeden hráč, nebo jako pozorovatel). Barvu kamenů vždy určuje hráč, který hru založil.

Hráč se může najednou účastnit neomezeného počtu her, zprávy o dění na serveru i příkazy týkající se her vždy obsahují identifikátor hry.

Herní klient

Pokud se ptáte jak vypadá klientská aplikace pro hraní na tomto serveru, musím vás zklamat. Jediná možnost jak hrát, jak byl systém laděn a také odevzdán je přes standardní nástroje, konkrétně telnet. Vzhledem k textové, řádkově orientované povaze komunikačního protokolu je takováto hra možná a není ani tak nepřehledná, jak by se na první pohled mohlo zdát.

Vzhledem k velmi naivní a účelové implementaci celého serveru nepředpokládám jeho další vývoj, proto ani neplánuju tvorbu klienta. V případě, že klienta komunikujícího s tímto serverem vytvoříte, budu vděčný za zaslání zdrojových kódů a rád je zveřejním zde vedle serveru.

Piškvorky :: Download

Zdrojové kódy serveru (tar.gz - na požádání zašlu)