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