tento blogísek je úplně na changu

Ročníkový projekt

9. června 2009 v 2:51 | Timy |  ze života
Ve škole jsme měli za rok naprogramovat vcelku jednoduchou deskovou hru. A zde je výsledek.

U mě na webu si můžete stáhnout spustitelný exe soubor. Instalace není nutná (z tohoto exáče dokonce nemožná). Ke spuštění potřebujete .NET 3.5, jestli je třeba verze SP ani nevím. Pravidla jsou vysvětlena přímo ve hře v sekci nápověda. Když tak jen stručně:

Na začátku si vyberete zda chcete hrát za útočníka nebo za obránce. Obránce brání svou pevnost a útočník se ji snaží obsadit. Obsazení se provede ve chvíli, kdy útočník umístí devět svých kamenů do pevnosti. Útočník se pohybuje pouze vpřed a do boku, obránce všemi směry. K tomu může obránce skákat útočníkovy kameny podobně jako v dámě. Obránce vyhrává, když má útočník méně než devět kamenů. Obránce může přeskočit více kamenů současně, ale dělá se to trochu krkolomně -- levým tlačítkem myši vyberete obránce, pravým naklikáte cestu, kudy má skákat a levým tlačítkem potvrdíte skok (kliknout můžete kdekoliv).

Hru můžete ukládat, načítat ze souboru, přehrávat, listovat v historii, vybírat různé úrovně obtížnosti…

Z implementačního hlediska byl asi nejzajímavější Minimax -- vygenerování všech možných stavů hry, které mohou za určitý počet kol nastat. Ve výchozím nastavení to na těžké obtížnosti počítá čtyři tahy dopředu. Na mém dvoujádru to fičí v pohodě, ale na notebooku už při těžké obtížnosti je vidět znatelné zpomalení.

Pak už asi nic extra zajímavého. Ukládá se to do čitelného XML, takže ho můžete hezky editovat a pohrát si s tím. Doufám, že se vám nepovede změnit vstupní soubor tak, aby ta hra pak spadla, snad tam provádím dost kontrol :-). Hra je ve více vláken; jedno vlákno se stará o GUI a jedno o výpočty, když nějaké jsou. Takže hra se nezasekne, když zrovna počítač počítá tahy, celá hra je nadále normálně ovladatelná.

Samotná inteligence počítače není zrovna nejlepší, je to jen pár pravidel a občas ten počítač hraje dost na chuja. Ale celkově vzato nehraje zase tak špatně, ačkoliv ho nejspíš po pochopení pravidel porazíte na první pokus :-).

Obhajoba probíhala celkem v pohodě, pár minut jsem svou hru předváděl, ale oponenti už si ji stejně proklikali den předem, takže na obhajobě už si to člověk vlastně jen mohl pokazit, když mu to třeba nějak spadlo, což se naštěstí nikomu nestalo. Po krátké prezentaci následovala diskuse, což znamenalo vyslechnout si výtky od oponentů. Řekli mi v zásadě dvě výtky: (1) debilně vyřešené skákání více kamenů; (2) limit tahů -- ten nebyl v zadání a přidal jsem ho tam proto, abych zamezil opakovaným tahům počítače. Měl jsem vymyslet inteligentnější způsob, než suchý limit tahů. Jinak to bylo v pohodě.

Celkově nás bylo na termínu 11, z čehož 7 lidí projekt obhájilo. Zajímavé přitom bylo, že z druháku (je to předmět pro druháky) jsme tam byli jen tři, a to ještě aplikovaní informatici (máme ještě teoretické informatiky, kterých je víc než nás, aplikáčů). Zbytek byli buď nějací učitelé (ani jeden to neudělal) nebo třeťáci, kteří to opakovali. Od nás to dali dva ze tří.

Nakonec to ani nebylo tak těžké, jak se zdálo. Celkově jsem napsal zhruba 4000 řádků zdrojového kódu, což je asi docela hodně -- koukal jsem se jen tak letmo na některé ostatní zdrojáky a většina asi měla méně řádků. Ale těžko hodnotit, já měl u každé metody, třídy a typu napsanou dokumentaci a hodně věcí jsem měl roztahaných do mnoha metod (což je správně). Byli lidé, kteří měli celá pravidla nacpaná do jedné funkce, prostě hromada ifů na šest obrazovek na šířku. To se mi moc nelíbilo.

Dost velká otrava byla taky s dokumentací. Museli jsme mít dokumentaci v PDF včetně zdrojových souborů, což zlehka implikuje použití TeXu. Takže ze zdrojových souborů jsem nakonec musel vygenerovat XML soubor s popisem všech metod, pak jsem pomocí XSL transformace z toho vygeneroval TeXový soubor, který jsem následně zkompiloval do PDF. No hrozný proces to byl. K tomu ještě dopsat popisy algoritmů...

Ještě jsem vlastně nezmínil, že hra je naprogramována v C#, můj oblíbený programovací jazyk, jak jistě všichni víte. C# je boží, všechen ten LINQ, extension methods, a lambda výrazy... Ale to je jiná story.

Takže ročníkový projekt za mnou, geometrie (ne, žádné rýsování trojúhelníčků, ale hromada počítání s vektorovými prostory) a paralelní a logické programování přede mnou.
 

4 lidé ohodnotili tento článek.

Komentáře

1 GaGaGiRl* GaGaGiRl* | E-mail | Web | 2. října 2010 v 17:38 | Reagovat

Zaujímavé :**

2 cheap jordans cheap jordans | E-mail | Web | 24. prosince 2010 v 8:55 | Reagovat

*People are always telling you what to do, but what's right for them may not be right for you.

Nový komentář

Přihlásit se
  Ještě nemáte vlastní web? Můžete si jej zdarma založit na Blog.cz.
 

Aktuální články

Reklama