====== 2048: Úloha 3 - Jeden krok hry ======
[[2014_15:2048:2-funkce-pro-sesypani|< Předchozí krok]] | [[2014_15:2048:start|Hlavní stránka]] | Další krok >
===== Cíl =====
V [[2014_15:2048:2-funkce-pro-sesypani|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 ''[[2014_15:2048:2-funkce-pro-sesypani|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 [[http://openbookproject.net/thinkcs/python/english3e/lists.html#nested-lists|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í =====
- V modulu ''simulator.py'' doplňte funkci ''move_tiles'' podle níže uvedených specifikací.
- Spustíte-li modul ''tests_step.py'', bude postupně vaši funkci testovat na několika předdefinovaných konfiguracích hrací plochy.
- Soubor ''simulator.py'' s vámi doplněným tělem funkce odešlete do [[https://hapky.fel.cvut.cz/sou/assignments.php|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 [[pure-functions|č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''.