Conway's Game of Life

Odpřednášena v úterý 24. 11.

Byl zde zadán #U9, #U10

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

  1. Vytvořili jsme vlastní datový typ Cell, kterým jsme modelovali jednu buňku se stavy alive a dead
  2. Vytvořili jsme typ Grid<T>, který obsahoval celý stav naší hry (tj. polohy všech buněk a jejich stavy)
  3. 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

  1. Pozměnili jsme typ Cell tak, aby každá živá buňka věděla, kdy se narodila
  2. 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
  3. 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ů
  4. 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ému hsv