ROB Bowden: Bok. Ja sam Rob, a nadam se vaš igra za igru ​​od 15 godina. Sada, postoje četiri funkcije koje trebate provesti u ovom programu - init, crtanje, premjestiti, i pobijedio. Pa, pogledajmo init. Ovdje vidimo prva stvar da smo ću učiniti je proglasiti varijablu zove brojač. To se događa da se ponište na d puta d minus 1. Ne zaboravite da je d dimenzija našeg odbora. Kako init ide na posao je da će to ponoviti nad cijelim forumom i mi idemo za početak u gornjem lijevom kutu. I neka je samo reći da smo imaju 4 strane 4 ploču. Dakle, gore lijevo smo htio reći je 15. I onda mi samo idemo brojati kroz zajednice, rekavši 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, i tako dalje. Dakle, gore lijevo, možemo očekivati ​​da će biti d puta d minus 1, koji se u 4 po 4 Slučaj će biti 16 minus 1, što je točno 15. A sada ovdje gdje ćemo ponoviti nad cijelim forumom. I mi ćemo se postaviti svaku poziciju u odbora na trenutnu vrijednost naš brojač, a zatim brojač ide opadanje se, tako da se sljedeći Položaj stignemo će imati Brojač biti jedan manje od prethodni položaj. Tako smo u početku imali 15 i opadanje brojač. Pa onda ćemo dodijeliti 14 do Sljedeći položaj, opadanje brojač, i idemo dodjeljuje 13, i tako dalje. Na kraju, moramo se nositi taj kutak slučaj u kojem, ako odbor ima još dimenzija, onda samo radi 15, 14, 13, 12, pa sve do 3, 2, 1, je Hoće li nas ostaviti s nerješiv odbora. I moramo zamijeniti jedan i dva. Dakle, ako je d mod 2 = 0, to je kako ćemo provjeriti da vidi da li je to uopće. Ako d mod 2 jednaka 0, tada je u redu d minusu 1, što je donji red, a Položaj d minus 2, ili stupac d minus 2, idemo postaviti da do 2, a stupac d minus 3 smo će postaviti na 1. Dakle, to je samo unazad gdje 1 i 2 su trenutno. Konačno, mi ćemo postaviti vrlo dolje desno jednak prazno, gdje prazan je hash definirana na vrhu kao 0. Dakle, to nije bilo nužno potrebno, jer je to za petlje će imati postaviti donju pravo na 0, budući Brojač će, naravno, doći do 0. No, to ovisi o nama, znajući da prazan je raspršen pronaći 0. Ako odem u ovaj program, a kasnije promijeniti prazno na vrhu do 100, što treba dalje raditi. Dakle, ovo je samo da osiguraju da dolje desno je zapravo jednaka našim prazna vrijednost. Konačno, imamo dvije globalne varijable, tako prazan sam i prazan j, i vidimo one proglasio na vrhu. I mi ćemo koristiti ta dva globalna varijable za praćenje Položaj prazan, tako da mi ne morati tražiti kroz cijeli odbora pronaći prazan svaki Vrijeme je da pokušate napraviti potez. Tako da položaj prazno uvijek će početi u donjem desnom kutu. Dakle, dolje desno je dao indeksi d minus 1, d minus 1. Dakle, to je init. Sada smo prešli na crtanje. Dakle, ždrijeb će biti slična gdje ćemo ponoviti nad cijelim forumom. A mi samo želimo ispisati vrijednost to je u svakom položaju ploče. Pa evo, mi smo tiskanje vrijednost koja je u svakom položaju ploče. I primjetite da radimo -. I to samo govori da je printf bez obzira na to je li to jedna znamenka ili dvoznamenkastog broja, i dalje ćemo ga žele zauzimaju dva stupca u ispisati, tako da, ako imamo dvije znamenke i jedan znamenke brojeve u istom brodu, naš Odbor će i dalje izgledaju lijepo i trg. Dakle, želimo učiniti da za svaku vrijednost u brodu, osim za slijepu probu. Dakle, ako je položaj u odboru jednaka prazno, onda smo posebno želite ispisati samo donjom za zastupanje prazno, umjesto da bez obzira na vrijednost prazan zapravo jest. Na kraju, želimo ispisati iz nove linije. Uočite da je ovo još uvijek unutar vanjski za petlje, ali izvan unutarnje for petlje. Budući da je ova vanjska for petlja se iterating nad svim redovima, pa je stoga ovaj printf je ide to samo ispisati novu liniju, pa smo prijeći na ispis sljedećeg retka. I da je za izvlačenje. Dakle, sada idemo dalje kretati. Sada, prolazimo potez, crijep koji Korisnik je ušao u igru ​​- oni unesite pločica žele preseliti - i ti si trebao vratiti bool, pa bilo istinito ili lažno, ovisno o je li taj potez bio je zapravo vrijedi - da li to može biti crijep preselio se u prazan prostor. Pa evo, izjavljujemo lokalnu varijablu, tile_1 i tile_j, koji će biti sličan blank_i i blank_j, osim što će pratiti Položaj pločica. Sada ovdje, idemo koristiti blank_i i blank_j i reći sve u redu, pa evo prazno na ploči. Sada je pločica iznad prazno? Je pločica s lijeve prazno? Je pločica s desne prazno? Je pločica ispod prazno? Dakle, ako je pločica u tim pozicijama, onda znamo da je pločica može biti premještena u prazno mjesto i prazan može biti premještena na mjesto gdje Pločica je trenutno. Pa evo, recimo, ako odbor na poziciji blank_i minus 1 blank_j. Dakle, ovo govori je crijep iznad trenutne prazan? I ako je tako, idemo se sjetiti da je položaj pločica. Pločica je u položaju blank_i minus 1 i blank_j. Sada prvi put, imamo i tu provjeru upravo ovdje, tako da je blank_i veći od 0. Zašto želimo to učiniti? Pa, ako je prazan je u gornjem redu Uprave, onda mi ne želimo izgleda gore prazan pločice od ne postoji ništa iznad vrha red na brodu. To je, kako se moglo završiti dobivanje nešto poput segmentacije krivnjom ili Vaš program može raditi samo na neočekivane načine. Dakle, to je pazeći da mi ne gledati u mjestima koja nisu valjana. Sada ćemo napraviti istu stvar za sve ostale moguće kombinacije. Pa evo, mi smo u potrazi nastavku prazna da vidi da li je to pločica. A imamo i kako bi bili sigurni da smo Ne u donjem redu, inače smo Ne treba tražiti pločice. Ovdje ćemo pogledati na lijevoj prazno da vidi da li je to pločica. I ne bismo trebali gledati na lijevoj ako smo u lijevom stupcu. I ovdje ćemo gledati Pravo na prazno, a mi ne bi trebali pogled na desno, ako smo u krajnjem desnom stupcu. Dakle, ako se nitko od tih stvari su istinite, to znači da pločica nije bio u susjedstvu na prazan i možemo se vratiti false. Taj potez nije bio valjan. No, ako je jedan od onih koji su istina, onda na ova točka, mi znamo da tile_i i tile_j jednake Položaj pločica. I tako, možemo ažurirati odbora na pozicije tile_i i tile_j. Znamo nova vrijednost će biti prazan i da je položaj blank_i blank_j, koji je bio izvorni prazno - mi znamo pločica će premjestiti tamo. Obavijest mi zapravo ne morate učiniti stvarna zamjena ovdje, jer mi znamo Vrijednosti koje treba umetnuti u tim položajima. Ne trebamo privremena varijabla oko. Na kraju, moramo se sjetiti da smo imamo globalnih varijabli koje su praćenje položaja u prazno. Na taj način želimo ažurirati položaj prazne biti tamo gdje pločica izvorno bio. Na kraju, možemo se vratiti točno jer potez bio uspješan. Mi smo uspješno zamijeniti prazan s pločica. U redu, tako da smo prošli potrebno provjeriti wona. Dakle, osvojio sličan vraća bool gdje Istina će se upućuju na to da Korisnik je pobijedio u igri. I netočno je ukazuje na to da igra još uvijek traje. Korisnik nije osvojio. Dakle, to će biti prilično suprotno od init, gdje init, zapamtite, možemo započeti ploču 15, 14, 13, 12, pa dalje. Dok je osvojio, želimo provjeriti je li Ploča je 1, 2, 3, 4, 5, i tako dalje. Dakle, mi ćemo započeti naš brojač na 1 jer to je ono što je vrh lijevi dio se mora biti. A onda idemo na petlji nad cijelim forumom. Idemo ignorirati ovaj uvjet na sekundu. I to stanje samo ide na Provjera je odbor u ovom položaju jednaka aktualnim točkama? Ako je tako, povećajte broj, tako da Sljedeći položaj gledamo je jedan viši od položaja smo upravo sada. Dakle to je kako smo dobili gore lijevo bi trebao biti 1. Povećajte brojati do dva. Pogledajte sljedeće mjesto. Je li to 2? Ako je tako, povećajte brojati do tri. Sljedeća položaj, je li to 3? Ako je tako, povećajte broj do 4, i tako dalje. Dakle, ako ima bilo koji položaj na ploči koja nije jednaka našu računati, onda želimo vratiti false budući da znači postoji neki crijep koji je nije u ispravnom položaju. Pa evo, što se ovo stanje radi? Pa, ne zaboravite da je prazna trebala ići u donjem desnom kutu. I Prazno je vrijednost ne bi mogli mora biti jednaka vrijednosti counter da će biti postignut u donjem desnom kutu. Stoga smo posebno provjeriti da li sam jednaka jednaka d minus 1 i J dosegne jednaka d minus jedan - što govori da smo potrazi u donjem desnom kutu ploča - onda mi samo želite nastaviti. Želimo da preskočite ovaj iteracija za petlju. I tako, ako uspijemo dobiti kroz ovaj ugniježđeni for petlje, to znači da nema pločica koja je u netočni položaj. I lomimo iz petlje i dolaze Ovdje, gdje se možemo vratiti istinito. Sve pločice su u ispravnom položaju a to znači da korisnik ima pobijedio. I to je to. Moje ime je Rob Bowden, a to je 15.