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