*************************************
Zapoctovy program - Exploding Atoms
*************************************

Pavel Sasek
sasek.pavel@tiscali.cz
letni semestr 2002/2003


I. Uzivatelska cast
-------------------

Hraci plocha se sklada z 64 policek (atomu), ktere jsou na zacatku prazdne. Hraci se stridaji v tazich a davaji do svych nebo jeste neobsazenych atomu elektrony. Pokud je v atomu nadkriticky pocet elektronu (tj. 4 elektrony pro stredove atomy, 3 elektrony pro krajni atomy a 2 elektrony pro rohove atomy - tedy podle poctu sousedu), tento atom exploduje - jeho elektrony se rozleti k sousedum a pripadne i oni exploduji... Zaroven tyto sousedni atomy pripadnou hraci, ktery explozi vyvolal. Exploze je jediny zpusob, jak ziskat atomy obsazene protihracem.
Ukolem hry je ziskat vsechny protihracovy atomy, tj. ten, kdo nema v libovolnem okamziku hry (krome prvniho tahu) zadny svuj atom, prohral.
Hra se ovlada pomoci tlacitek (=atomy), jejichz stisk znamena vlozeni elektronu do tohoto atomu.
Posledni tah Pocitace je zvyraznen tucne.


II. Programatorska cast
-----------------------

Kazdy atom je samostatne tlacitko, jehoz Caption oznacuje pocet elektronu. Stav hry je uchovan ve dvou polich - Elektrony (pocty elektronu) a Majitel (atom je Hrace, Pocitace nebo jeste neobsazen).
Stisk tlacitka (tj. pridani elektronu do atomu) zpracuje procedura Click.

- procedura FormCreate: Inicializace poli a promennych.

- procedura Vypis: Podle poli Elektrony a Majitel aktualizuje hraci plochu, pocita a vypisuje skore.

- procedura Exploduj: Pokud ma atom nadkriticke mnozstvi elektronu, spusti explozi a rekurentne kontroluje i sousedy explodovaneho atomu; kontroluje se hloubka rekurze kvuli zacykleni.

- funkce TahPocitace: Navrhne "nejlepsi" tah Pocitace. Prvnich pet tahu je nahodnych, dale se zkoumaji vsechny moznosti a vybere se ta s nejvyssim ohodnocenim. Vyuziva funkci Prohledej, ktera zkouma strom hry - je-li na tahu Pocitac, vybira maximalni ohodnoceni ze svych potomku (Pocitac maximalizuje svuj zisk); u Hrace naopak minimum (Hrac minimalizuje zisk Pocitace, hraje co nejlepe) (minimax). V listech se ohodnoceni pocita podle poctu atomu Pocitace a Hrace, vsima si take poctu elektronu a to tak, ze je-li na tahu Pocitac, jejich pocet se pricita, jinak odecita. Druhotne ohodnocení2 pak "upresnuje" puvodni ohodnoceni - preferuje krajni atomy, vyssi pocet explozi po prvnim tahu a jiz zaplnene atomy. Neperspektivni pozice jsou orezany - pamatuji si dosud nejlepsi max.(min.) tah a pokud je pri hledani minima (maxima) nejaky mensi (vetsi), tato vetev nebude vybrana a nema cenu ji zkoumat dale.

- procedura HrajePocitac: Provede tah Pocitace, ktery navrhla procedura TahPocitace (tj. zvysi pocet elektronu, zavola procedury Exploduj a Vypis).

- procedura Click: Provede tah Hrace a pokud Pocitac muze jeste hrat, tj. dosud neprohral, zavola proceduru HrajePocitac. Kontroluje se zde, jestli uz neni konec; pokud ano, zavola proceduru FormCreate.