Warning
This page is located in archive. Go to the latest version of this course pages. Go the latest version of this page.

Reversi II

Program

  • Dotazy a odpovědi
  • Hádanka
  • Diskuze Reversi, cvičný upload korektně hrajícího hráče
  • Programovací úlohy

Diskuse řešení DÚ: region_size

  • Zvládli jste vyřešit DÚ?
  • Zvládli jste ho vyřešit bez několikanásobného opakování prakticky stejného kódu?
  • Jak řešení dekomponovat na jednotlivé směry?

Hádanka

Diskuse Reversi

  • Formulace a implementace funkce hodnotící proveditelnost tahu.
  • Jaké jsou základní strategie?
  • Jaká jsou důležitá pole?
  • Jaké vlastnosti by měla mít má strategie (krom toho, že každého vždy porazí)?

Programovací úlohy - Game of Life

V dnešním cvičení budete mít za úkol naimplementovat jednoduchou hru s názvem Game of Life (Hra života), viz wikipedia nebo dokument na YouTube. Jedná se o jednoduchý dvourozměrný celulární automat s těmito čtyřmi pravidly:

  1. každá živá buňka s méně než dvěma živými sousedy zemře,
  2. každá živá buňka se dvěma nebo třemi živými sousedy zůstává žít,
  3. každá živá buňka s více než třemi živými sousedy zemře,
  4. každá mrtvá buňka s právě třemi živými sousedy oživne.

Začněte stažením neúplného programu Game of Life. Nejdůležitějším atributem třídy GameOfLife je self.population která ukládá stav aktuální generace ve 2D seznamu. Živá buňka má hodnotu 1 a mrtvá buňka hodnotu 0. Doimplementujte následující dvě metody třídy GameOfLife:

  • num_life_around(self, r, c) - určí počet živých buňek v okolí buňky na pozici r-tého řádku a c-tého sloupce.
  • life(self) - vytvoří novou generaci pomocí výše uvedených čtyř pravidel a uloží ji do self.population. Všimněte si že je v této metodě dobré využít předem implementovanou metodu num_life_around.

Domácí úkol

Odevzdání

Nadcházející neděli do 23:59:59 je třeba odevzdat první verzi hráče Reversi s korektním pokládáním kamene. specifikace

Pokud vám něco není jasné, váš triviální hráč není schopen hrát, je nejvyšší čas to řešit.

Příprava na další cvičení

Přečtěte zbytek vašeho vybraného Python tutorialu. Nemusíte úplně rozumět všemu, ani si pamatovat vše zpaměti. Měli byste mít natrénován postup jak si dohledat potřebné informace, mít natrénovanu práci s např. Python 3 tutoriálem, nebo jiným podobným zdrojem veškeré moudrosti ;-)

  1. Práce s datovou strukturou dictionary (viz [Pilgrim2009], kapitola 2.7, nebo [Wentworth2012], kapitola 20)
    • Zopakovat: vytvoření prázdného slovníku, přidání páru klíč-hodnota, zjištění hodnoty pro klíč
    • Vyzkoušejte si procházení položek slovníku pomocí metody items():
      eng_to_cz = {'cat': 'kocka', 'dog': 'pes', 'house': 'dum' }
      for eng, cz in eng_to_cz.items():
          print(eng, ',', cz)
  2. Zopakujte si použití sekce
    if __name__ == "__main__":
    (viz [Pilgrim2009], kapitola 1.10).
  3. Práce se soubory (viz [Pilgrim2009], kapitola 11, nebo [Wentworth2012], kapitola 13 - Ale pozor! Zde autoři zapomínají specifikovat kódování souboru!)
    • Otevření a uzavření textového souboru
    • Použití příkazu with
    • Čtení ze souboru (po řádcích)
    • Načtení celého obsahu souboru do 1 řetězce
  4. Metoda split() řetězcových proměnných (viz dokumentace k str.split())
2018/07/17 13:25
courses/b4b33rph/cviceni/program_po_tydnech/tyden_06.txt · Last modified: 2022/10/26 10:39 by xposik