====== Šachy ====== V jazyce Java s využitím grafického uživatelského rozhraní (GUI) napište program pro hru šachů pro dva hráče. ===== Základní funkcionalita ===== * hra dvou hráčů * člověk vs. člověk * příprava pro hru člověk vs. počítač (hru počítače lze demonstrovat např. náhodným generátorem platných tahů) * kompletní kontrola pravidel hry (střídání hráčů, tahy jednotlivých figur, rošáda, braní mimochodem - en passant, atd.) * možnost uložení a načtení rozehrané partie * možnost manuálního umístění figur před zahájením hry * šachové hodiny (využití vláken - bez použití Timeru nebo obdobné třídy s implementovaným časovačem). Správnou synchronizaci času si každý student musí naprogramovat pomocí vláken sám s vědomím toho, že "sleep(1000)" neznamená, že program púoběží opravdu za jednu sekundu! * Každý musí implementovat minimálně jednu z následujících vlastností/úkolů: * síťová hra * načítání, ukládání a prohlížení partií ve standardním PGN formátu [[http://www.saremba.de/chessgml/standards/pgn/pgn-complete.htm]] ====== Požadavky na práci ve dvojici ====== Při práci ve skupině se k základní funkcionalitě připojují následující požadavky: * Implementace šachového serveru, který je schopen hostit více paralelních her, uživatelů. * Server udržuje uživatelské účty a statistiku jejich her. Umí zobrazit globálních TOP10 her, které na serveru proběhly včetně časů a jmen účastníků. * Komunikace se serverem probíhá pomocí vlastního TCP nebo UDP protokolu, který musí být konzultován na prvním konzultačním termínu. Komunikace prostřednictvím REST není preferována a musí ji předem schválit cvičíci po domluvě se studenty při zachování srovnatelné obtížnosti.