>> ROB BOWDEN: Hi.
Sunt Rob, și sper că dumneavoastră joc de joc de 15.
Acum, există patru funcții de care aveți nevoie să pună în aplicare în acest program - de inițializare,
desena, muta, și a câștigat.
Deci, să ne uităm la inițializare.
>> Aici, vom vedea primul lucru pe care suntem de gând să faceți este să declare o variabilă
numit contra.
O să fi inițializat la d ori d minus 1.
Amintiți-vă că d este dimensiunea de bord noastre.
Cum de inițializare este de gând să lucreze este ca va pentru a itera peste întregii bord
și vom începe în partea stângă sus.
>> Și să spunem că ne-am au un 4 cu 4 bord.
Deci, din partea stanga sus suntem O să spun este 15.
Și apoi vom doar de gând să conta prin placi, spunând 15, 14, 13,
12, 11, 10, 9, 8, 7, 6, 5, 4, și așa mai departe.
Astfel încât partea din stânga sus, ne așteptăm să fie ori d d minus 1, care în 4 de 4
caz va fi 16 minus 1, care este corect 15.
>> Și acum, aici e unde vom repeta asupra întregului forum.
Și vom stabili fiecare poziție în placa de la valoarea actuală a
contra noastră, iar apoi contra se întâmplă la decrementeze, astfel încât următoarea
poziție ajungem va avea Contor fi una mai mică de
poziția anterioară.
Așa că am avut inițial 15 și decrement contra.
Deci vom aloca 14 la poziție următor, contra decrement,
și vom alocat 13, și așa mai departe.
>> În cele din urmă, trebuie să se ocupe de acel colț caz în care, în cazul în care consiliul are o chiar
dimensiune, apoi face doar 15, 14, 13, 12, tot drumul până la 3, 2, 1, este
O să ne lase cu un consiliu de nerezolvat.
Și ne-am pentru a schimba 1 și 2.
Deci, în cazul în care d mod 2 este egal cu 0, care este cum vom verifica
pentru a vedea dacă e chiar.
În cazul în care d mod 2 este egal cu 0, apoi în rândul d minus 1, care este rândul de jos, și
Poziția d minus 2, sau coloana d minus 2, vom stabili că la 2, și
coloana d minus 3 suntem va seta la 1.
Astfel că e doar de mers înapoi în cazul în care 1 și 2 sunt în prezent.
>> În cele din urmă, vom stabili foarte dreapta jos egal la gol, în cazul în care
gol a fost definit hash în partea de sus ca 0.
Astfel, că nu era strict necesar, deoarece acest lucru pentru bucla va avea
stabilit dreptul de jos la 0, deoarece contor va ajunge in mod natural 0.
Dar care se bazează pe noi, știind că gol a fost trunchiată pentru a găsi un 0.
Dacă aș intra în acest program și mai târziu schimba gol la începutul până la 100, aceasta
ar trebui să funcționeze în continuare.
>> Deci, aceasta este doar asigurându-vă că dreapta jos este de fapt egal cu nostru
valoare necompletată.
În cele din urmă, avem două variabile globale, astfel gol i și j gol, și vom vedea
cele declarate în partea de sus.
Și am de gând să utilizeze cele două global variabile pentru a urmări
poziția de martor, astfel încât să nu trebuie să se uite prin întregul
bord pentru a găsi martor fiecare timp vom încerca să facă o mișcare.
Deci poziția a semifabricatului este întotdeauna de gând să înceapă de la dreapta jos.
Astfel încât partea din dreapta jos este dat de Indicii d minus 1, minus d 1.
Deci, asta e de inițializare.
>> Acum ne-am muta pe pentru a trage.
Deci, remiză va fi similară unde vom repeta
asupra întregului forum.
Și vrem doar pentru a imprima valoarea care este în fiecare poziție a consiliului.
Deci, aici, suntem de imprimare valoarea care este în fiecare poziție a consiliului.
Și observați că facem -.
Si acesta este doar spune printf care indiferent dacă este o cifră unul sau
număr din două cifre, tot vreau să dura până două coloane, în afară de imprimare,
astfel încât, dacă avem două cifre și o numere de cifre, în același bord, nostru
bord va arata in continuare frumos și gradină.
>> Așa că vrem să facem asta pentru fiecare valoare la bord, cu excepția pentru proba-martor.
Deci, în cazul în care poziția în consiliul egal gol, atunci noi în mod special
doriți să imprimați doar o subliniere să reprezinte blanc, în loc de
, indiferent de valoarea gol este de fapt.
>> În cele din urmă, ne-o dorim pentru a imprima o noua linie.
Observați că acest lucru este încă în interiorul exterior de bucla, dar în afara
interior pentru buclă.
Deoarece acest exterior pentru buclă este iterarea peste toate rândurile, și deci aceasta este printf
merge pentru a imprima doar o nouă linie, așa că muta pe pentru a imprima rândul următor.
Și asta este pentru egalitate.
>> Deci, acum să trecem la a muta.
Acum, vom trece mișcare, tigla pe care utilizator a fost introdus în joc - în care
intra tigla care doresc să se mute - și tu ar trebui să se întoarcă un bool, așa
fie adevărat sau fals, în funcție de dacă aceasta mutare a fost de fapt
valabil - fie că țiglă poate fi sa mutat în spațiul gol.
>> Deci, aici, declarăm o variabilă locală, tile_1 și tile_j, care sunt de gând să
fi similar cu blank_i și blank_j, cu excepția faptului că se va ține evidența
Poziția a plăcii.
Acum, aici, vom folosi blank_i și blank_j și spune bine, așa
aici e martor de pe bord.
>> Acum, este dala deasupra semifabricatului?
Este țiglă din partea stângă a semifabricatului?
Este de tigla la dreapta de martor?
Este tigla de mai jos martor?
Deci, dacă tigla este, în oricare dintre aceste poziții, atunci știm că tigla
poate fi mutat în fața locului gol și semifabricatul poate fi mutat în cazul în care
țiglă în prezent este.
>> Deci, aici, ne spune dacă bord la poziția blank_i minus 1 blank_j.
Deci, acest lucru este de a spune este țiglă deasupra martor curent?
Și dacă da, vom aminti care este poziția de tigla.
Tigla este în poziția blank_i minus 1 și blank_j.
acum în primul rând, avem, de asemenea, această verificare chiar aici, deci este blank_i
mai mare de 0.
>> De ce vrem să facem asta?
Ei bine, în cazul în care este martor în rândul de sus de bord, atunci nu vrem să
vezi mai sus martor pentru tigla din nu există nimic deasupra primei
rând de bord.
Acesta este modul în care s-ar putea sfârși prin a obține ceva ca o eroare de segmentare sau
programul ar putea să funcționeze doar în moduri neașteptate.
Deci, acest lucru este de a face sigur că noi nu facem uite în locuri care nu sunt valide.
>> Acum, vom face același lucru pentru toate celelalte combinații posibile.
Deci, aici, suntem în căutarea de mai jos martor pentru a vedea dacă e tigla.
Și avem, de asemenea, să ne asigurăm că suntem nu pe rândul de jos, altfel ne
nu ar trebui să arate pentru țiglă.
Aici, ne vom uita la stânga blanc pentru a vedea dacă e tigla.
Și nu ar trebui să te uiți la stînga dacă suntem în coloana din stânga.
Și aici ne vom uita la dreptul de martor, și nu ar trebui
uita-te la dreapta dacă suntem în coloana din dreapta.
>> Deci, în cazul în care nici unul din aceste lucruri erau adevărate, ceea ce înseamnă că placa nu a fost adiacente
la martor și ne putem întoarce false.
Mutarea nu a fost valid.
Dar, în cazul în care unul dintre acestea au fost adevărate, apoi la acest moment, știm că tile_i și
tile_j sunt egale cu Poziția a plăcii.
Și astfel, putem actualiza placa la poziții tile_i și tile_j.
Știm că noua valoare va fi martor și că blank_i poziție
blank_j, care a fost originalul blank - știm că tigla este de gând să
muta acolo.
>> Observați că nu avem de fapt de a face o reală de swap aici, din moment ce știm
valorile care trebuie să fie introduse în aceste poziții.
Nu avem nevoie de o temporar variabilă în jurul.
>> În cele din urmă, trebuie să ne amintim că noi au variabilele globale, care sunt
urmărirea poziției a semifabricatului.
Așa că vrem să actualizeze poziția de blanc pentru a fi în cazul în care țiglă
inițial a fost.
În cele din urmă, ne-am întoarce adevărat, deoarece mutarea a fost de succes.
Am schimba cu succes gol cu ​​tigla.
>> În regulă, așa că am trecut nevoie pentru a verifica castigat.
Deci, a castigat întoarce în mod similar un bool unde adevărată va indica faptul
utilizator a câștigat jocul.
Și fals se indică faptul că jocul este încă în desfășurare.
Utilizatorul nu a castigat.
Deci, acest lucru va fi destul de mult opusul de inițializare, în cazul în care init,
amintiți-vă, am inițializa placa la 15, 14, 13, 12, etc.
În timp ce a castigat, vrem pentru a verifica dacă bord este 1, 2, 3, 4, 5, și așa mai departe.
>> Deci, vom inițializa nostru contracara la 1, deoarece asta e ceea ce partea de sus
stâng al consiliului ar trebui să fie.
Și apoi vom buclă asupra întregului forum.
Să ignore această condiție pentru o secundă.
Și această condiție este doar de gând să verificare este placa de la această poziție
egal cu numărul actual?
Dacă este așa, incrementa numărătoare, astfel încât poziția următoare ne uităm la unul mai mare
decât poziția suntem la chiar acum.
>> Deci, asta e cum ajungem stânga sus ar trebui să fie 1.
Incrementa numărul 2.
Uită-te la poziția următoare.
Este acest 2?
Dacă este așa, incrementa numărul 3.
Poziția următoare, este aceasta 3?
Dacă este așa, incrementa numărul de la 4, și așa mai departe.
Deci, dacă nu există nici o poziție privind bord care nu are egal cu numărul nostru,
apoi ne-am dori să se întoarcă false de la care înseamnă că există unele țiglă, care este
nu în poziția corectă.
>> Deci, aici, ceea ce face această condiție?
Ei bine, amintiți-vă că este martor ar trebui să meargă pe partea din dreapta jos.
Și valoarea martor nu s-ar putea egală neapărat valoarea a
contracara, care urmează să fie atins la dreapta jos.
Așa că ne-am dori în mod special pentru a verifica dacă i egal este egal cu d minus 1 și j este egal
d este egal cu minus 1 - care spune dacă ne-am se uita la partea din dreapta jos a
bord -, atunci ne-am doresc să continue.
Vrem să săriți peste acest special repetare a buclei pentru.
>> Și astfel, dacă reușim să trecem prin asta imbricate pentru buclă, ceea ce înseamnă că
nu a existat nici o țiglă care a fost în poziția incorectă.
Și ne-am iesi din bucla și vin aici, unde ne putem întoarce adevărat.
Toate piesele au fost în pozițiile corecte și asta înseamnă că utilizatorul are
a castigat jocul.
Și asta e tot.
Numele meu este Rob Bowden, iar acest lucru a fost de 15.