2048: Úloha 3 - Jeden krok hry

Cíl

V předchozí úloze jste vytvořili funkci, která umí sesypat jeden řádek hracího pole k levému okraji. Cílem této úlohy je vytvořit funkci, která sesype celé hrací pole (tj. všechny 4 řádky nebo sloupce) k určenému okraji (levému, pravému, hornímu, nebo dolnímu).

Prerekvizity Funkce numbers_to_left() pro sesypání řádku k levému okraji.
Náročnost přemýšlení Nízká
Náročnost programování Střední (2D pole, for-cykly, podmínky)

Příprava

Udělejte si záložní kopii vašeho modulu simulator.py!

  • Seznamte se s vnořenými seznamy, které pro nás budou představovat hrací desku (dvoudimenzionální pole).
  • Stáhněte si archiv s podklady pro tuto úlohu. K archivu máte přístup, pokud jste úspěšně vyřešili první část úlohy. Ve výstupu automatického hodnocení byste měli mít odkaz na zmíněný archiv.
  • Archiv obsahuje prázdnou kostru modulu simulator.py. POZOR, ať si jím nepřemažete vlastní řešení předchozích kroků, které už máte v simulator.py, pokud jste si ještě nevytvořili záložní kopii!
  • Archiv rozbalte do pracovního adresáře. Ze záložní kopie simulator.py zkopírujte do kostry modulu simulator.py řešení předchozích kroků.

Zadání

  1. V modulu simulator.py doplňte funkci move_tiles podle níže uvedených specifikací.
  2. Spustíte-li modul tests_step.py, bude postupně vaši funkci testovat na několika předdefinovaných konfiguracích hrací plochy.
  3. Soubor simulator.py s vámi doplněným tělem funkce odešlete do odevzdávacího systému.

Specifikace

Funkce move_tiles() musí splňovat následující kontrakt:

Vstupy in_board Seznam 4 seznamů 4 číslic reprezentující výchozí konfiguraci hrací plochy.
direction Směr, kam se mají dlaždice sesypat. Jeden z řetězců left, right, up, down.
Výstupy out_board Seznam 4 seznamů 4 čísel reprezentující výslednou konfiguraci hrací plochy po sesypání v daném směru
score Číslo reprezentující přírustek skóre za tento tah, tj. celkové skóre za sesypání 4 řádků, nebo 4 sloupců.

Důležité: move_tiles() implementujte jako čistou funkci!

Doporučení

  • Při řešení této podúlohy zcela jistě využijete funkci numbers_to_left() z minulé podúlohy.
  • Nejspíš se vám bude hodit funkce reversed():
    >>> a = [1,2,3]
    >>> b = list(reversed(a))
    >>> b
    [3, 2, 1]

    nebo metoda seznamu reverse():

    >>> a = [1,2,3]
    >>> a.reverse()
    >>> a
    [3, 2, 1]

  • Přístup k řádkům hrací plochy je jednoduchý. Se sloupci je to už těžší. Zvažte, zda nevytvořit pomocné funkce pojmenované např. get_column(board, i) a set_column(board, i, column), které vám umožní extrahovat i. sloupec hrací plochy ve formě seznamu, resp. nastavit hodnoty i. sloupce hrací plochy na hodnoty předané v seznamu column.

 
2016_2017/2048/3-jeden-krok-hry.txt · Last modified: 2017/08/15 11:01 (external edit)