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.