ROB BOWDEN: Ahoj. Som Rob, a dúfam, že vaša hra pre hru 15. Teraz, tam sú štyri funkcie, ktoré potrebujete, k realizácii tohto programu - init, kreslenie, pohyb, a vyhral. Takže, poďme sa pozrieť na init. Tu vidíme, že prvá vec, my sme robiť, je deklarovať premennú volal pult. To bude inicializovaný na d krát d mínus 1. Nezabudnite, že d je dimenzia z našej rady. Ako init bude fungovať je, že to bude iterovat nad celým fórom a ideme na začiatok v ľavom hornom rohu. A povedzme, že sme majú 4 od 4 dosky. Takže vľavo hore sme chcel povedať, je 15. A potom sme len tak počítať pomocou dosiek, riekol: 15, 14, 13, 12., 11, 10, 9, 8, 7, 6, 5, 4, a tak ďalej. Takže vľavo hore, očakávame, že bude d krát d mínus 1, ktoré sa v 4 o 4 Prípad bude 16 mínus 1, ktorý je správne 15. A teraz tu je miesto, kde budeme iterovat nad celým fórom. A budeme nastaviť každú pozíciu doska k aktuálnej hodnote náš pult, a potom počítadlo sa deje dekrementovat, takže ďalší pozície sa dostaneme bude mať Čítač je o jednu menej ako predchádzajúce pozície. Takže sme spočiatku mali 15 a decrement počítadlá. Takže budeme priradiť 14 až Ďalšie pozície, úbytok pult, a budeme priradená 13, a tak ďalej. A konečne, musíme zvládnuť, že roh prípad, kedy v prípade, že doska má ešte dimenzie, potom len to, 15, 14, 13, 12, celú cestu až na 3, 2, 1, je chystá opustiť nás s neriešiteľný doska. A musíme vymeniť 1 a 2. Takže, ak d mod 2 sa rovná 0, to je ako budeme kontrolovať aby zistil, či je to ešte. Je-li d mod 2 sa rovná 0, potom v riadku d mínus 1, čo je spodný riadok, a poloha d mínus 2, alebo stĺpec d mínus 2, budeme nastaviť, aby sa na 2, a stĺpec d mínus 3 sme bude nastavená na 1. Tak to je len obrátenie, kde 1 a 2 v súčasnej dobe sú. Nakoniec, budeme nastaviť veľmi vpravo dole rovná prázdne, kde blank bol hash definované v hornej časti, ako 0. Takže to nebolo nevyhnutne potrebné, pretože to pre sláčiky bude mať nastavenie vpravo dole na 0, pretože Počítadlo bude prirodzene dosiahne 0.. Ale to sa spolieha na nás s vedomím, že prázdne bola zatriedená nájsť 0.. Ak som sa ísť do tohto programu a neskôr Zmena prázdne v hornej časti 100, je by mala aj naďalej fungovať. Takže je to len uistiť, že vpravo dole je vlastne rovná našej prázdna hodnota. Nakoniec, máme dve globálne premenné, tak prázdne i a j prázdne, a vidíme, tie, vyhlásil na vrchole. A budeme používať tie dva globálne premenné sledovať pozície prázdna, takže nemáme je potrebné sa pozrieť cez celé Doska nájsť prázdne každý čas sa snažíme ťah. Takže poloha blanku je vždy začnú v pravom dolnom rohu. Takže je vpravo dole daná Indexy d mínus 1, d mínus 1. Tak, to je init. Teraz prejdeme k tomu. Takže remíza bude podobné kde budeme iterovat nad celým fórom. A my len chcete vytlačiť hodnotu to je v každej polohe dosky. Tak tu sme tlačíte hodnotu, ktorá je v každej polohe dosky. A všimnite si, že robíme -. A to je len hovorím, že printf bez ohľadu na to, či je to jedna číslica alebo dve číslice číslo, napriek tomu chceme, aby trvať až dva stĺpce v tlači von, tak, že ak budeme mať dve číslice a jedno číslice čísla v rovnakom rady, naša Doska bude stále vyzerať pekne a námestí. Takže chceme urobiť, že pre každú hodnotu na doske, s výnimkou na slepý pokus. Takže, ak sa miesto v rade sa rovná prázdny, potom sa špecificky chcete vytlačiť iba podčiarkovník reprezentovať prázdne miesto bez ohľadu na hodnotu prázdny v skutočnosti je. A konečne, chceme tlačiť von na nový riadok. Všimnite si, že toto je stále vo vnútri Vonkajší cyklus for, ale mimo vnútorné slučky for. Vzhľadom k tomu, vonkajšej slučky for je iterácie cez všetky riadky, a tak to je printf bude len vytlačiť nový riadok, tak sme prejsť na vytlačenie na ďalší riadok. A to je pre remízu. Tak, teraz poďme ďalej pohybovať. Teraz sme sa prejsť krok, na dlaždicu, ktorá užívateľ je zadaný v hre - sú zadajte dlaždice, ktoré chcete presunúť - a máš vrátiť bool, takže buď true alebo false v závislosti na či je tento krok bol vlastne platí - či už dlaždice môžu byť presťahoval sa do prázdneho priestoru. Tak tu sme deklarovať lokálne premenné, tile_1 a tile_j, ktoré budú podobná blank_i a blank_j, okrem toho, že to bude sledovať pozície dlaždice. A teraz, budeme používať blank_i a blank_j a hovoriť v poriadku, tak tu je prázdne na palube. Teraz je dlaždice nad prázdne? Je dlaždice na ľavej strane polotovaru? Je dlaždice na pravej strane prázdne? Je dlaždice pod prázdna? Takže, ak je dlaždice v niektorej z tých, pozície, potom vieme, že dlaždice môže byť presunutá do prázdnej miesto a prázdne možno presunúť na miesto, kde Doska je v súčasnej dobe. Tak tu hovoríme, či doska na pozíciu blank_i mínus 1 blank_j. Tak to hovorí, je dlaždice nad súčasnou prázdne? A ak áno, budeme mať na pamäti, že je pozícia dlaždice. Doska je v polohe blank_i mínus 1 a blank_j. Teraz po prvýkrát, máme tiež túto kontrolu tu, tak blank_i je väčšie ako 0. Prečo chceme robiť, že? Tak, ak je prázdne, je v hornom rade predstavenstva, potom nechceme, aby pozrite sa vyššie prázdne dlaždice od je nad hornou nič rad predstavenstva. To je, ako by ste mohli skončiť dostať niečo ako poruchy segmentácia alebo Váš program by mohlo fungovať nečakanými spôsobmi. Tak, to je uistiť sa, že nie pozrite sa na miestach, ktoré nie sú platné. Teraz budeme robiť to isté pre všetky ďalšie možné kombinácie. Tak tu, hľadáme nižšie prázdny aby zistil, či je to dlaždice. A tiež musíme sa uistiť, že sme nie na spodnom riadku, inak by sme nemali pozerať na dlaždice. Tu sa budeme pozerať na ľavej strane prázdne, či je to dlaždice. A mali by sme sa pozerať na ľavej strane keď sme sa v ľavom stĺpci. A tu sa budeme pozerať na Právo prázdne, a nemali by sme pozrite sa na pravej strane, ak budeme v pravom stĺpci. Takže, ak žiadna z týchto vecí bola pravda, to znamená, že sa dlaždice nesusedia na prázdne a môžeme sa vrátiť false. Tento krok nebol platný. Ale, ak jeden z nich bola pravda, potom na tento bod, vieme, že tile_i a tile_j sa rovnajú pozície dlaždice. A tak môžeme aktualizovať dosku na pozície tile_i a tile_j. Vieme, že nová hodnota bude prázdna a že pozícia blank_i blank_j, čo bol pôvodný prázdny - vieme, že dlaždice sa chystá presunúť tam. Všimnite si, nemáme vlastne musíte urobiť, skutočný odkladacia tu, pretože vieme, hodnoty, ktoré musia byť vložené do týchto polôh. Nepotrebujeme dočasné variabilný okolo. Konečne, musíme mať na pamäti, že sme majú naše globálne premenné, ktoré sú sledovanie polohy z prázdnej. Takže chceme aktualizovať pozície prázdne, aby tam, kde dlaždice pôvodne bol. Nakoniec, vráťte sa pravda, pretože krok bol úspešný. Úspešne sme vymeniť prázdny s dlaždicou. Dobre, tak sme konečne je potrebné skontrolovať výhry. Takže, vyhral rovnako vracia bool, kde pravda, bude znamenať, že užívateľ vyhral hru. A false naznačuje, že Hra sa stále deje. Užívateľ nevyhral. Takže, to bude celkom veľa opak init, kde init, pamätajte, že sme sa inicializovať dosku na 15, 14, 13, 12, atď. Vzhľadom k tomu, vyhral, ​​ak chceme skontrolovať, či doska je 1, 2, 3, 4, 5, a tak ďalej. Takže, budeme inicializovať naše čeliť na 1, pretože to je to, čo top vľavo na doske by mal byť. A potom ideme na slučke nad celým fórom. Poďme ignorovať túto podmienku za sekundu. A tento stav sa len tak Kontrola je rada v tejto polohe rovná aktuálnej počíta? Ak tomu tak je, zvýšiť počet tak, aby sa Ďalšie pozície sa pozrieme na jeden vyššia polohe než sme sa práve teraz. Tak to je, ako sa dostať vľavo hore by mala byť 1. Zvýšiť počet na 2. Pozrite sa na ďalšiu pozíciu. Je to 2? Ak tomu tak je, zvýšiť počet na 3. Ďalšie pozície, je to 3? Ak tomu tak je, zvýšiť počet až 4, a tak ďalej. Takže ak existuje nejaká pozície na doska, ktorá sa nerovná náš počet, potom sa chceme vrátiť false, pretože to znamená, že tam je nejaký dlaždice, ktoré je nie je v správnej polohe. Tak tu, čo sa táto podmienka robí? No, pamätajte, že je prázdna má ísť na pravom dolnom rohu. A hodnoty slepého pokusu je nemusí nutne rovnať hodnote namietajú, že sa dosiahne v pravom dolnom rohu. Tak sme sa konkrétne chcete skontrolovať, či aj rovná sa rovná d mínus 1 a j rovná sa rovná d mínus 1 -, ktorý hovorí, či sa sú pri pohľade na v pravom dolnom rohu doska - potom sme len Chcete pokračovať. Chceme, aby tento krok preskočiť, najmä iterácie pre sláčiky. A tak, ak sa nám podarí dostať sa cez to vnorené slučky, to znamená, že nebolo dlaždice, ktorá bola v roku Nesprávna poloha. A my vymaniť sa z slučky a prísť tu, kde sa môžeme vrátiť true. Všetky dlaždice sú v správnych pozíciách a to znamená, že užívateľ má vyhral hru. A to je všetko. Volám sa Rob Bowden, a to 15.