Zde bude krátký zápis práce, kterou jsme udělali na Conway's Game of Life.
Co nás (velice přibližně) čeká:
- [OK] Zprovoznit základní GoL
- [OK] Přidat ke GoL nějaké barvy, podle stáří nebo podle historie
- Analyzovat efektivitu jednotlivých částí a zrychlit celou simulaci
- Přidat možnost měnit pravidla z tradičních GoL na nějaká jiná
- Přidat jednoduché UI
- Přidat možnost vytvářet nové buňky kliknutím myši
- Udělat nějaký samostatný projekt založený na celulárních automatech
První úroveň (začátek)
Finální kód: dostupný na tomto odkazu
Co jsme udělali
- Vytvořili jsme vlastní datový typ
Cell
, kterým jsme modelovali jednu buňku se stavyalive
adead
- Vytvořili jsme typ
Grid<T>
, který obsahoval celý stav naší hry (tj. polohy všech buněk a jejich stavy) - Pomocí reaktoru jsme rozdělili naši hru do třech částí
- generování prvního gridu
- funkce
step :: (Grid -> Grid)
, která umí dělat jeden krok podle zadaných pravidel - vykreslování současného stavu
Reaktor má vnitřní hodiny, podle kterých pravidelně volá naši funkci step
a vykresluje její výsledek.
Druhá úroveň (barvy)
Finální kód dostupný na tomto odkazu
Co jsme udělali
- Pozměnili jsme typ
Cell
tak, aby každá živá buňka věděla, kdy se narodila - Vytvořili jsme nový typ
State
, který kromě samotné mřížky s buňkami obsahuje také informaci o tom, kolik tiků uběhlo od začátku simulace - V rámci
step
jsme pak novým buňkám připsali, kdy se narodily, a každý krok jsme zvětšili počet ubehnuvších tiků - Podle stáří buňky (resp. podle toho, v kolikátém tiku se narodila) jsme jí v
draw-cell
přiřadili barvu. K tomu jsme využili vytváření barev pomocí specifikace čísly v systémuhsv