>> ROB BOWDEN: Hi.
Ik ben Rob, en ik hoop dat je spel voor spel van 15.
Nu zijn er vier functies die u nodig hebt te implementeren in dit programma - init,
tekenen, bewegen, en won.
Dus, laten we eens kijken naar init.
>> Hier zien we het eerste wat we gaan doen, is een variabele declareert
genaamd teller.
Het zal worden geïnitialiseerd aan d maal d minus 1.
Vergeet niet dat d de dimensie van ons bestuur.
Hoe init gaat werken is dat het gaat te itereren over het gehele bestuur
en we gaan beginnen in de linker bovenhoek.
>> En laten we gewoon zeggen dat we hebben een 4 bij 4 bord.
Dus de top vertrokken we ga zeggen is 15.
En dan zijn we gewoon gaan tellen door de raad, zeggende: 15, 14, 13,
12, 11, 10, 9, 8, 7, 6, 5, 4, enzovoort.
Dus linksboven, verwachten we in d keer d minus 1, die op de 4 bij 4
geval gaat 16 min zijn 1, die correct is 15.
>> En nu hier is waar we gaan itereren over het gehele forum.
En we gaan elke positie in te stellen het bestuur om de huidige waarde van
onze toonbank, en dan teller gaat stapsgewijs af, zodat de volgende
positie die we bereiken zal hebben teller niemand minder dan
de vorige positie.
We aanvankelijk 15 en verlagen teller.
Dus dan gaan we toekennen 14 tot de volgende positie, decrement teller,
en we gaan toegewezen 13, enzovoort.
>> Tot slot moeten we naar die hoek te behandelen geval, indien de raad van bestuur heeft een nog
dimensie, dan gewoon doen 15, 14, 13, 12, helemaal naar beneden tot en met 3, 2, 1, is
gaat ons verlaten met een onoplosbaar boord.
En we moeten wisselen van de 1 en de 2.
Dus, als d mod 2 gelijk is aan 0, dat is hoe we gaan controleren
om te zien of het wel.
Als d mod 2 gelijk is aan 0, dan in rij d minus 1, de onderste rij, en
positie d min 2, of kolom d minus 2, gaan we stellen dat op 2, en
kolom d min 3 zijn we naar 1 te zetten.
Dus dat is gewoon omkeren waar de 1 en 2 op dit moment zijn.
>> Tot slot gaan we de zeer stellen rechtsonder gelijk aan leeg, waar
leeg is hash gedefinieerd aan de top als 0.
Zo, dat was niet strikt noodzakelijk, aangezien deze lus zal hebben
ingesteld rechtsonder op 0, omdat teller zal uiteraard bereiken 0.
Maar dat is gebaseerd op ons wetende dat blanco werd gehashte het vinden van een 0.
Als ik in dit programma en later blanco boven veranderen 100, met
moet nog steeds werken.
>> Dus dit is gewoon om ervoor te zorgen dat de Rechtsonder is eigenlijk gelijk aan onze
lege waarde.
Tot slot hebben we twee globale variabelen, zo leeg i en j leeg, en we zien
die verklaarde aan de top.
En we gaan die twee wereldwijde gebruiken variabelen voor het bijhouden van de te houden
positie van de blanco, zodat we niet moeten kijken door de hele
boord om de lege elke vinden keer dat we proberen om een ​​beweging te maken.
Zodat de positie van de blanco altijd is gaat om te beginnen aan de onderkant rechts.
Dus rechts onderaan wordt gegeven door indices d minus 1, d minus 1.
Dus, dat is init.
>> Nu gaan we naar tekenen.
Dus, is loting zou lijken op zijn waar we gaan herhalen
over het gehele forum.
En we willen gewoon de waarde af te drukken dat is in elke stand van het bord.
Dus hier zijn we de waarde die het afdrukken in elke stand van het bord.
En merk op dat we het doen -.
En dat is gewoon te vertellen dat printf ongeacht of het een een cijfer of
tweecijferig nummer, we willen het nog steeds nemen twee kolommen van de afdruk,
dus dat als we twee cijfers en een cijferige nummers in hetzelfde bord, onze
bestuur zal zien er nog mooi en plein.
>> Dus we willen dat doen voor elke waarde in de raad, met uitzondering van de blanco.
Dus, als de positie in het bestuur is gelijk aan de blanco, dan specifiek wij
wilt afdrukken gewoon een underscore de lege vertegenwoordigen, in plaats van
ongeacht de waarde van de blank eigenlijk is.
>> Tot slot willen we afdrukken een nieuwe lijn.
Merk op dat deze nog binnen de buitenste lus, maar buiten
de binnenste lus.
Aangezien dit buitenste lus wordt itereren over alle rijen, en dus is deze printf is
zomaar af te drukken een nieuwe lijn, dus we overgaan tot printen van de volgende rij.
En dat is het voor gelijkspel.
>> Dus, laten we nu verder gaan om te bewegen.
Nu passeren we verhuizen, de tegel die de gebruiker in het spel is ingevoerd - ze
voer de tegel ze willen bewegen - en jij moet een bool terug, dus
waar of onwaar, afhankelijk van of die verhuizing was eigenlijk
geldig - of die tegel kan zijn verplaatst naar de lege ruimte.
>> Dus hier, verklaren wij een lokale variabele, tile_1 en tile_j, die zullen
zijn vergelijkbaar met blank_i en blank_j, tenzij het gaat om het bijhouden van de te houden
positie van de tegel.
Nu hier, we gaan blank_i gebruiken en blank_j en zeggen: oke, dus
hier is het leeg op het bord.
>> Nu, is de tegel boven de lege?
Is de tegel links van de plano?
Is de tegel aan de rechterkant van de blanco?
Is de tegel onder de blanco?
Dus, als de tegel in iedere posities, dan weten we dat de tegel
kan worden verplaatst naar de lege plek en de lege kan worden verplaatst waar de
tegel op dit moment is.
>> Dus hier, zeggen we als raad op positie blank_i minus 1 blank_j.
Dus dit zegt, is de tegel boven de huidige leeg?
En zo ja, we gaan om te onthouden dat is de positie van de tegel.
De tegel is in positie blank_i minus 1 en blank_j.
nu eerste, hebben we ook deze controle hier, dus blank_i is
groter dan 0.
>> Waarom willen we dat doen?
Nou, als het leeg is in de bovenste rij van de raad, dan hebben we niet willen
kijk boven de spatie voor de tegel sinds er is niets boven de top
rij van het bord.
Dit is hoe je zou kunnen eindigen krijgen iets als een segmentatie fout of
je programma kan gewoon werken op onverwachte manieren.
Dus, dit is ervoor te zorgen dat we niet kijk op plaatsen die niet geldig zijn.
>> Nu gaan we hetzelfde doen voor alle andere mogelijke combinaties.
Dus hier zijn we op zoek onder de blanco om te zien of dat de tegel.
En we moeten ook zorgen dat we niet op de onderste rij, of we
moet niet kijken naar de tegel.
Hier gaan we naar links kijken van het leeg om te zien of het de tegel.
En we moeten niet kijken naar links als we in de linkerkolom.
En hier zijn we gaan kijken naar de recht van de blanco, en we moeten niet
kijk naar rechts als we in de meest rechtse kolom.
>> Dus, als geen van die dingen waar waren, dat betekent dat de tegel was niet naast
naar het lege en kunnen we valse terugkeren.
De verhuizing was niet geldig.
Maar als een van die waar zou zijn, dan bij dit punt, we weten dat tile_i en
tile_j gelijk aan de positie van de tegel.
En zo kunnen we de raad updaten posities tile_i en tile_j.
We kennen de nieuwe waarde zal het leeg zijn en dat de positie blank_i
blank_j, die het origineel was leeg - we weten dat de tegel gaat
bewegen daar.
>> Merken we eigenlijk niet hoeft te doen een echte swap hier, omdat we weten het
waarden die moeten worden ingebracht in die posities.
We hebben geen een tijdelijke behoefte variabele rond.
>> Tot slot moeten we niet vergeten dat we hebben onze globale variabelen die
het bijhouden van de positie van de blanco.
Dus willen we de positie van de te actualiseren de lege plaats waar de tegel zijn
oorspronkelijk was.
Tot slot, we return true sinds de verhuizing was succesvol.
Wij hebben met succes swap de leeg met de tegel.
>> Oke, dus we eindelijk moeten won controleren.
Dus, won op dezelfde wijze retourneert een bool waar trouw zal geven dat de
gebruiker het spel heeft gewonnen.
En valse geeft aan dat het spel is nog steeds gaande.
De gebruiker heeft niet gewonnen.
Dus, dit gaat vrij veel te zijn het tegenovergestelde van init, waar init,
vergeet niet dat we initialiseren de raad 15, 14, 13, 12, enzovoort.
Overwegende won, willen we controleren of de bord is 1, 2, 3, 4, 5, enzovoort.
>> Dus, we gaan initialiseren onze tegen te gaan 1 want dat is wat de top
Links van de raad van bestuur zijn.
En dan gaan we lus over het gehele forum.
Laten we negeren deze aandoening voor een tweede.
En deze voorwaarde is slechts gaat check is het bestuur op deze positie
gelijk aan de huidige tellingen?
Als dat zo is, verhoog de telling zodat de volgende positie we kijken naar een hoger
dan de positie die we zijn op dit moment.
>> Dus dat is hoe we de linksboven moet 1.
Verhoog de telling naar 2.
Kijk naar de volgende positie.
Is deze 2?
Als dat zo is, verhogen de telling op 3.
Volgende positie, is dit 3?
Als dat zo is, verhoog de telling 4, enzovoort.
Dus, als er een positie op de bord dat niet overeenkomt met onze telling,
dan willen we valse sinds die terugkeren betekent dat er een aantal tegels die
niet in de juiste positie.
>> Dus hier, wat is deze aandoening aan het doen?
Nou, bedenk dan dat de blanco is hoort te gaan aan de onderkant rechts.
En de waarde van de blanco's misschien niet gelijk te zijn aan de waarde van de
tegen te gaan dat zal worden bereikt rechts onderaan.
Dus we specifiek willen controleren of ik gelijk gelijk d minus 1 en j gelijken
is gelijk aan d minus 1 - die zegt als we zijn op zoek naar de rechterbenedenhoek van
het bestuur - dan gewoon we willen blijven.
We willen deze bijzondere overslaan iteratie van de lus.
>> En dus, als we erin slagen dit afhandelen geneste lus, dat betekent dat
er was geen tegel die was in de verkeerde positie.
En breken we uit de lus en komen hier, waar we echt kunnen terugkeren.
De tegels werden in de juiste positie en dat betekent dat de gebruiker
won de wedstrijd.
En dat is het.
Mijn naam is Rob Bowden, en dit was 15.