>> ZAMYLA CHAN: Laten we plezier met Vijftien.
Vijftien is de eerste game die je krijgt uit te voeren en het is interactief.
Nu, geen zorgen te maken.
Je hoeft niet te schrijven de hele ding zelf.
Kijk naar de verdeelsleutel omdat een veel van het spel structuur is reeds
voor u ingesteld.
Het accepteert en ontleedt een command line argument van de gebruiker en zorgt voor een
raad op basis van die input.
Het controleert of het spel wordt gewonnen en uitgangen zodra de gebruiker het spel gewonnen.
En om het spel te winnen, het wordt input van de gebruiker en
noemt de functie Verplaatsen.
>> Dus we gaan implementeren vier functies voor het spel van Fifteen,
init, tekenen, verplaatsen, en won.
Laten we eerst eens aan te pakken init.
In init, voor initialiseren, wij vertegenwoordigen de raad in een 2D integer array.
En dit is een globale variabele genaamd bord met afmetingen MAX en MAX,
de maximale afmetingen van het bord.
Nu, de werkelijke dimensie van het bestuur wordt gegeven door de gebruiker, weergegeven in
het gehele getal d, waardoor minder dan MAX.
Maar, in C, kun je niet arrays resize, dus zit je vast aan
die maximale afmeting.
>> Jouw taak in init is te bevolken de waarden van de raad van bestuur
met de juiste waarde.
Nu, we hebben 1D arrays gezien, maar hoe 2D arrays werken?
Er is een index van de rij, nul geïndexeerd zoals altijd, en dan ook nog van
de kolom.
En u zult uw rooster invullen in aflopend waarden, net als dit.
Grid, 0, 0, rij 0, kolom 0, is 8, grid 0, 1 op 7.
Dit is een voorbeeld waarbij d, kleine d, is 3.
>> Nu moet ook de raad van bestuur in Vijftien bevatten een lege tegel, als je ooit hebt
gespeeld met het fysieke spel.
Maar, board is een integer array, dus alle waarden moeten integers.
Dus het is aan jou om een ​​geheel getal te beslissen waarde aan een blanco tegel vertegenwoordigen.
Om je board te initialiseren, kunt u gebruik maken van lusstructuren bevatten de
beginsituatie van het bestuur, waar raad i j vertegenwoordigt het element
rij i en kolom j.
Ze beginnen in aflopende volgorde en, herinneren, dat indien het aantal tegels
oneven is, dan zul je moeten swap de locatie van 2 en 1.
Dus daar hebben we onze geïnitialiseerd boord.
>> Nu, dat hebben we geïnitialiseerd onze raad, is het tijd om het te tekenen.
Loting zal de huidige stand van de af te drukken boord, maar je moet ervoor zorgen
tegels drukken in dezelfde volgorde dat je ze hebt geïnitialiseerd.
En je moet ook formatteren uw getallen correct.
Omdat we enkele cijfers zou kunnen hebben en dubbele cijfers, dan wilt u
drukt u een spatie vóór elke enkelvoudige cijfers.
U die met placeholder -.
>> Maar vergeet niet onze lege ruimte.
We willen niet het werkelijke aantal afdrukken die we hebben gekozen om te vertegenwoordigen
die lege ruimte in de raad, maar wij ook niet willen er niets afgedrukt.
Dus wat je kunt doen is om een ​​symbool te definiëren of karakter te vertegenwoordigen de
blanco tegel.
In eerdere voorbeelden die ik heb gekozen voor een onderstrepen, en dan moet je gewoon uitprinten
dat wanneer je de lege bereiken ruimte in je draw functie.
>> Dus trek zal hebben genesteld voor loops.
Zoiets als dit.
Voor elke rij, en dan voor elke waarde in de rij, je gaat afdrukken de
waarde in deze ruimte.
Zodra u alle waarden hebt gedrukt in de rij, dan moet je
kan een nieuwe regel worden afgedrukt.
Vergeet niet dat de order voor je draw functie moet echo of spiegel van de orde
in uw geïnitialiseerd functie.
>> Nu dat je het bord geïnitialiseerd en dat je het hebt getekend, het is tijd om te laten
de gebruiker bewerken en hun bewegingen.
Dus in de Fifteen.c functie, de programma neemt de input van de gebruiker en
roept vervolgens de verhuizing functie, passeren het aantal van de tegel die de
gebruiker wil verhuizen.
Nu, wees voorzichtig.
Dit is het werkelijke aantal van de tegel en niet de werkelijke positie.
Dus, moet u zoeken naar de tegel positie om te weten waar het is.
>> Nu moet u alleen de gebruiker toestaan om een ​​beweging te maken als het legaal is.
Een legale zet is elke tegel die is naast de blanco tegel.
Dat betekent, boven en onder, naar links en naar rechts.
Dus je zult moeten weten waar de blanco tegel is ook.
Nu, voor elke beweging die je zoekt de gebruikers tegel, maar het is waarschijnlijk
niet het beste om te zoeken naar de blanco tegel elke keer omdat je het doet
elke keer de gebruiker wil verhuizen.
Dus, in plaats daarvan, is het best om te onthouden waar de blanco tegel wordt met behulp van enkele
goed bekend variabelen.
Dus als je eenmaal de gebruiker toestaan ​​om hun beweegt, ze zijn goed op
manier om te winnen van het spel van de Vijftien.
>> Om het spel van Fifteen, de tegels te winnen moeten in een bepaalde volgorde, en
het won functie controleert of het spel wordt gewonnen.
Het geeft Waar als het spel wordt gewonnen en de tegels in de juiste volgorde,
en anders false.
Dus om het spel van Fifteen, tegels winnen moeten worden stijgende orde, met de
blanco tegel in de rechter benedenhoek.
Dus hoe kan je controleren of de gebruiker Het bestuur heeft verplaatst naar de juiste
oriëntatie?
>> Nou, zult u itereren over het bestuur en Controleer de waarden ervoor zorgen dat
ze op de juiste plaats.
Om dit te doen, kunt u geneste gebruiken lussen net zoals je hebt
in te trekken en in init.
Er zijn een paar manieren om te controleren en valideren of het hout
correct en een winnende vorming, dat wel.
Als je van links naar rechts, te beginnen uit de bovenste rij naar beneden, vervolgens elke
getal moet groter zijn dan de vorige.
Wees voorzichtig met wat je waarde hebt gekozen voor uw lege tegel wel.
>> Of je kan een teller variabele gebruiken om ervoor te zorgen dat elke waarde is op zijn plaats, indien
je komt met een soort van formule deze vertegenwoordigen.
Dus veel plezier experimenteren met de wiskunde.
Als je eenmaal hebt bedacht een manier, rendement True zodra de gebruiker het spel heeft gewonnen.
Maar als enige waarde onjuist is, terugkeer Vals, de gebruiker heeft om verder te gaan
omdat ze niet het spel gewonnen.
Zodra u deze controle uit te voeren en samen met initialiseren, tekenen, bewegen
u het spel van Vijftien klaar bent.
Gefeliciteerd en veel plezier spelen.
Mijn naam is Zamyla en dit is CS50.