ROB BOWDEN: Ahoj. Jsem Rob, a doufám, že vaše hra pro hru 15. Nyní, tam jsou čtyři funkce, které potřebujete, k realizaci tohoto programu - init, kreslení, pohyb, a vyhrál. Takže, pojďme se podívat na init. Zde vidíme, že první věc, my jsme dělat, je deklarovat proměnnou volal pult. To bude inicializován na d krát d minus 1. Nezapomeňte, že d je dimenze z naší rady. Jak init bude fungovat je, že to bude iterovat nad celým fórem a jdeme na začátek v levém horním rohu. A řekněme, že jsme mají 4 od 4 desky. Takže vlevo nahoře jsme chtěl říct, je 15. A pak jsme jen tak počítat pomocí desek, řka: 15, 14, 13, 12., 11, 10, 9, 8, 7, 6, 5, 4, a tak dále. Takže vlevo nahoře, očekáváme, že bude d krát d minus 1, které se v 4 o 4 Případ bude 16 mínus 1, který je správně 15. A teď tady je místo, kde budeme iterovat nad celým fórem. A budeme nastavit každou pozici deska k aktuální hodnotě náš pult, a pak počítadlo se děje dekrementovat, takže další pozice se dostaneme bude mít Čítač je o jednu menší než předchozí pozice. Takže jsme zpočátku měli 15 a decrement čítače. Takže budeme přiřadit 14 až Další pozice, úbytek pult, a budeme přiřazena 13, a tak dále. A konečně, musíme zvládnout, že roh případ, kdy v případě, že deska má ještě dimenze, pak jen to, 15, 14, 13, 12, celou cestu až na 3, 2, 1, je chystá opustit nás s neřešitelný deska. A musíme vyměnit 1 a 2. Takže, pokud d mod 2 se rovná 0, to je jak budeme kontrolovat aby zjistil, jestli je to ještě. Je-li d mod 2 se rovná 0, pak v řádku d minus 1, což je spodní řádek, a poloha d minus 2, nebo sloupec d minus 2, budeme nastavit, aby se na 2, a sloupec d minus 3 jsme bude nastavena na 1. Tak to je jen obrácení, kde 1 a 2 v současné době jsou. Nakonec, budeme nastavit velmi vpravo dole rovná prázdné, kde blank byl hash definováno v horní části, jako 0. Takže to nebylo nezbytně nutné, protože to pro smyčce bude mít nastavení vpravo dole na 0, protože Počítadlo bude přirozeně dosáhne 0.. Ale to se spoléhá na nás s vědomím, že prázdné byla zatříděna najít 0.. Pokud jsem se jít do tohoto programu a později Změna prázdné v horní části 100, je by měla i nadále fungovat. Takže je to jen ujistit, že vpravo dole je vlastně rovná naší prázdná hodnota. Nakonec, máme dvě globální proměnné, tak prázdné i a j prázdné, a vidíme, ty, prohlásil na vrcholu. A budeme používat ty dva globální proměnné sledovat pozice prázdná, takže nemáme je třeba se podívat přes celé Deska najít prázdné každý čas se snažíme tah. Takže poloha blanku je vždy začnou v pravém dolním rohu. Takže je vpravo dole dána Indexy d minus 1, d minus 1. Tak, to je init. Nyní přejdeme k tomu. Takže remíza bude podobné kde budeme iterovat nad celým fórem. A my jen chcete vytisknout hodnotu to je v každé poloze desky. Tak tady jsme tisknete hodnotu, která je v každé poloze desky. A všimněte si, že děláme -. A to je jen říkám, že printf bez ohledu na to, jestli je to jedna číslice nebo dvě číslice číslo, přesto chceme, aby trvat až dva sloupce v tisku ven, tak, že pokud budeme mít dvě číslice a jedno číslice čísla ve stejném rady, naše Deska bude stále vypadat hezky a náměstí. Takže chceme udělat, že pro každou hodnotu na desce, s výjimkou na slepý pokus. Takže, pokud se místo v radě se rovná prázdný, pak se specificky chcete vytisknout pouze podtržítko reprezentovat prázdné místo bez ohledu na hodnotu prázdný ve skutečnosti je. A konečně, chceme tisknout ven na nový řádek. Všimněte si, že toto je stále uvnitř Vnější cyklus for, ale mimo vnitřní smyčky for. Vzhledem k tomu, vnější smyčky for je iterace přes všechny řádky, a tak to je printf bude jen vytisknout nový řádek, tak jsme přejít na vytištění na další řádek. A to je pro remízu. Tak, teď pojďme dál pohybovat. Teď jsme se projít krok, na dlaždici, která uživatel je zadán ve hře - jsou zadejte dlaždice, které chcete přesunout - a máš vrátit bool, takže buď true nebo false v závislosti na zda je tento krok byl vlastně platí - ať už dlaždice mohou být přestěhoval se do prázdného prostoru. Tak tady jsme deklarovat lokální proměnné, tile_1 a tile_j, které budou podobná blank_i a blank_j, kromě toho, že to bude sledovat pozice dlaždice. A teď, budeme používat blank_i a blank_j a říkat v pořádku, tak tady je prázdné na palubě. Nyní je dlaždice nad prázdné? Je dlaždice na levé straně polotovaru? Je dlaždice na pravé straně prázdné? Je dlaždice pod prázdná? Takže, je-li dlaždice v některé z těch, pozice, pak víme, že dlaždice může být přesunuta do prázdné místo a prázdné lze přesunout na místo, kde Deska je v současné době. Tak tady říkáme, jestli deska na pozici blank_i minus 1 blank_j. Tak to říká, je dlaždice nad současnou prázdné? A pokud ano, budeme mít na paměti, že je pozice dlaždice. Deska je v poloze blank_i minus 1 a blank_j. Nyní poprvé, máme také tuto kontrolu tady, tak blank_i je větší než 0. Proč chceme dělat, že? Tak, je-li prázdné, je v horní řadě představenstva, pak nechceme, aby podívejte se výše prázdné dlaždice od je nad horní nic řada představenstva. To je, jak byste mohli skončit dostat něco jako poruchy segmentace nebo Váš program by mohlo fungovat nečekanými způsoby. Tak, to je ujistit se, že ne podívejte se na místech, které nejsou platné. Teď budeme dělat totéž pro všechny další možné kombinace. Tak tady, hledáme níže prázdný aby zjistil, jestli je to dlaždice. A také musíme se ujistit, že jsme ne na spodním řádku, jinak bychom neměli dívat na dlaždice. Zde se budeme dívat na levé straně prázdné, zda je to dlaždice. A měli bychom se dívat na levé straně když jsme se v levém sloupci. A tady se budeme dívat na Právo prázdné, a neměli bychom podívejte se na pravé straně, pokud budeme v pravém sloupci. Takže, pokud žádná z těchto věcí byla pravda, to znamená, že se dlaždice nesousedí na prázdné a můžeme se vrátit false. Tento krok nebyl platný. Ale, jestliže jeden z nich byla pravda, pak na tento bod, víme, že tile_i a tile_j se rovnají pozice dlaždice. A tak můžeme aktualizovat desku na pozice tile_i a tile_j. Víme, že nová hodnota bude prázdná a že pozice blank_i blank_j, což byl původní prázdný - víme, že dlaždice se chystá přesunout tam. Všimněte si, nemáme vlastně musíte udělat, skutečný odkládací tady, protože víme, hodnoty, které musí být vloženy do těchto poloh. Nepotřebujeme dočasné variabilní kolem. Konečně, musíme mít na paměti, že jsme mají naše globální proměnné, které jsou sledování polohy z prázdné. Takže chceme aktualizovat pozice prázdné, aby tam, kde dlaždice původně byl. Nakonec, vraťte se pravda, protože krok byl úspěšný. Úspěšně jsme vyměnit prázdný s dlaždicí. Dobře, tak jsme konečně je třeba zkontrolovat výhry. Takže, vyhrál stejně vrací bool, kde pravda, bude znamenat, že uživatel vyhrál hru. A false naznačuje, že Hra se stále děje. Uživatel nevyhrál. Takže, to bude docela hodně opak init, kde init, pamatujte, že jsme se inicializovat desku na 15, 14, 13, 12, atd.. Vzhledem k tomu, vyhrál, chceme-li zkontrolovat, zda deska je 1, 2, 3, 4, 5, a tak dále. Takže, budeme inicializovat naše čelit na 1, protože to je to, co top vlevo na desce by měl být. A pak jdeme na smyčce nad celým fórem. Pojďme ignorovat tuto podmínku za vteřinu. A tento stav se jen tak Kontrola je rada v této poloze rovna aktuální počítá? Pokud tomu tak je, zvýšit počet tak, aby se Další pozice se podíváme na jeden vyšší poloze než jsme se právě teď. Tak to je, jak se dostat vlevo nahoře by měla být 1. Zvýšit počet na 2. Podívejte se na další pozici. Je to 2? Pokud tomu tak je, zvýšit počet na 3. Další pozice, je to 3? Pokud tomu tak je, zvýšit počet až 4, a tak dále. Takže pokud existuje nějaká pozice na deska, která se nerovná náš počet, pak se chceme vrátit false, protože to znamená, že tam je nějaký dlaždice, které je není ve správné poloze. Tak tady, co se tato podmínka dělá? No, pamatujte, že je prázdná má jít na pravém dolním rohu. A hodnota slepého vzorku je nemusí nutně rovnat hodnotě namítají, že bude dosaženo v pravém dolním rohu. Tak jsme se konkrétně chcete zkontrolovat, zda i rovná se rovná d minus 1 a j rovná se rovná d minus 1 -, který říká, zda se jsou při pohledu na v pravém dolním rohu deska - pak jsme jen Chcete pokračovat. Chceme, aby tento krok přeskočit, zejména iterace pro smyčce. A tak, pokud se nám podaří dostat se přes to vnořené smyčky, to znamená, že nebylo dlaždice, která byla v roce Nesprávná poloha. A my vymanit se z smyčky a přijít tady, kde se můžeme vrátit true. Všechny dlaždice jsou ve správných pozicích a to znamená, že uživatel má vyhrál hru. A to je vše. Jmenuji se Rob Bowden, a to 15.