====== 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''.