1 00:00:00,000 --> 00:00:09,386 2 00:00:09,386 --> 00:00:11,332 >> ZAMYLA CHAN: Laten we plezier met Vijftien. 3 00:00:11,332 --> 00:00:15,680 Vijftien is de eerste game die je krijgt uit te voeren en het is interactief. 4 00:00:15,680 --> 00:00:16,410 Nu, geen zorgen te maken. 5 00:00:16,410 --> 00:00:18,830 Je hoeft niet te schrijven de hele ding zelf. 6 00:00:18,830 --> 00:00:22,320 Kijk naar de verdeelsleutel omdat een veel van het spel structuur is reeds 7 00:00:22,320 --> 00:00:23,880 voor u ingesteld. 8 00:00:23,880 --> 00:00:28,160 Het accepteert en ontleedt een command line argument van de gebruiker en zorgt voor een 9 00:00:28,160 --> 00:00:31,230 raad op basis van die input. 10 00:00:31,230 --> 00:00:35,570 Het controleert of het spel wordt gewonnen en uitgangen zodra de gebruiker het spel gewonnen. 11 00:00:35,570 --> 00:00:38,340 En om het spel te winnen, het wordt input van de gebruiker en 12 00:00:38,340 --> 00:00:40,610 noemt de functie Verplaatsen. 13 00:00:40,610 --> 00:00:44,600 >> Dus we gaan implementeren vier functies voor het spel van Fifteen, 14 00:00:44,600 --> 00:00:48,110 init, tekenen, verplaatsen, en won. 15 00:00:48,110 --> 00:00:50,340 Laten we eerst eens aan te pakken init. 16 00:00:50,340 --> 00:00:55,150 In init, voor initialiseren, wij vertegenwoordigen de raad in een 2D integer array. 17 00:00:55,150 --> 00:01:01,070 En dit is een globale variabele genaamd bord met afmetingen MAX en MAX, 18 00:01:01,070 --> 00:01:03,880 de maximale afmetingen van het bord. 19 00:01:03,880 --> 00:01:07,310 Nu, de werkelijke dimensie van het bestuur wordt gegeven door de gebruiker, weergegeven in 20 00:01:07,310 --> 00:01:10,620 het gehele getal d, waardoor minder dan MAX. 21 00:01:10,620 --> 00:01:14,660 Maar, in C, kun je niet arrays resize, dus zit je vast aan 22 00:01:14,660 --> 00:01:16,730 die maximale afmeting. 23 00:01:16,730 --> 00:01:19,870 >> Jouw taak in init is te bevolken de waarden van de raad van bestuur 24 00:01:19,870 --> 00:01:21,860 met de juiste waarde. 25 00:01:21,860 --> 00:01:26,910 Nu, we hebben 1D arrays gezien, maar hoe 2D arrays werken? 26 00:01:26,910 --> 00:01:30,985 Er is een index van de rij, nul geïndexeerd zoals altijd, en dan ook nog van 27 00:01:30,985 --> 00:01:32,100 de kolom. 28 00:01:32,100 --> 00:01:36,120 En u zult uw rooster invullen in aflopend waarden, net als dit. 29 00:01:36,120 --> 00:01:43,260 Grid, 0, 0, rij 0, kolom 0, is 8, grid 0, 1 op 7. 30 00:01:43,260 --> 00:01:48,500 Dit is een voorbeeld waarbij d, kleine d, is 3. 31 00:01:48,500 --> 00:01:52,690 >> Nu moet ook de raad van bestuur in Vijftien bevatten een lege tegel, als je ooit hebt 32 00:01:52,690 --> 00:01:54,280 gespeeld met het fysieke spel. 33 00:01:54,280 --> 00:01:59,210 Maar, board is een integer array, dus alle waarden moeten integers. 34 00:01:59,210 --> 00:02:06,950 Dus het is aan jou om een ​​geheel getal te beslissen waarde aan een blanco tegel vertegenwoordigen. 35 00:02:06,950 --> 00:02:10,460 Om je board te initialiseren, kunt u gebruik maken van lusstructuren bevatten de 36 00:02:10,460 --> 00:02:16,440 beginsituatie van het bestuur, waar raad i j vertegenwoordigt het element 37 00:02:16,440 --> 00:02:19,380 rij i en kolom j. 38 00:02:19,380 --> 00:02:23,035 Ze beginnen in aflopende volgorde en, herinneren, dat indien het aantal tegels 39 00:02:23,035 --> 00:02:29,590 oneven is, dan zul je moeten swap de locatie van 2 en 1. 40 00:02:29,590 --> 00:02:33,790 Dus daar hebben we onze geïnitialiseerd boord. 41 00:02:33,790 --> 00:02:37,440 >> Nu, dat hebben we geïnitialiseerd onze raad, is het tijd om het te tekenen. 42 00:02:37,440 --> 00:02:41,260 Loting zal de huidige stand van de af te drukken boord, maar je moet ervoor zorgen 43 00:02:41,260 --> 00:02:44,260 tegels drukken in dezelfde volgorde dat je ze hebt geïnitialiseerd. 44 00:02:44,260 --> 00:02:47,300 En je moet ook formatteren uw getallen correct. 45 00:02:47,300 --> 00:02:51,700 Omdat we enkele cijfers zou kunnen hebben en dubbele cijfers, dan wilt u 46 00:02:51,700 --> 00:02:54,540 drukt u een spatie vóór elke enkelvoudige cijfers. 47 00:02:54,540 --> 00:03:00,150 U die met placeholder -. 48 00:03:00,150 --> 00:03:02,550 >> Maar vergeet niet onze lege ruimte. 49 00:03:02,550 --> 00:03:05,970 We willen niet het werkelijke aantal afdrukken die we hebben gekozen om te vertegenwoordigen 50 00:03:05,970 --> 00:03:10,410 die lege ruimte in de raad, maar wij ook niet willen er niets afgedrukt. 51 00:03:10,410 --> 00:03:15,310 Dus wat je kunt doen is om een ​​symbool te definiëren of karakter te vertegenwoordigen de 52 00:03:15,310 --> 00:03:17,050 blanco tegel. 53 00:03:17,050 --> 00:03:21,030 In eerdere voorbeelden die ik heb gekozen voor een onderstrepen, en dan moet je gewoon uitprinten 54 00:03:21,030 --> 00:03:26,970 dat wanneer je de lege bereiken ruimte in je draw functie. 55 00:03:26,970 --> 00:03:29,850 >> Dus trek zal hebben genesteld voor loops. 56 00:03:29,850 --> 00:03:31,150 Zoiets als dit. 57 00:03:31,150 --> 00:03:35,660 Voor elke rij, en dan voor elke waarde in de rij, je gaat afdrukken de 58 00:03:35,660 --> 00:03:36,940 waarde in deze ruimte. 59 00:03:36,940 --> 00:03:39,470 Zodra u alle waarden hebt gedrukt in de rij, dan moet je 60 00:03:39,470 --> 00:03:41,180 kan een nieuwe regel worden afgedrukt. 61 00:03:41,180 --> 00:03:47,730 Vergeet niet dat de order voor je draw functie moet echo of spiegel van de orde 62 00:03:47,730 --> 00:03:48,980 in uw geïnitialiseerd functie. 63 00:03:48,980 --> 00:03:51,290 64 00:03:51,290 --> 00:03:55,160 >> Nu dat je het bord geïnitialiseerd en dat je het hebt getekend, het is tijd om te laten 65 00:03:55,160 --> 00:03:58,500 de gebruiker bewerken en hun bewegingen. 66 00:03:58,500 --> 00:04:03,840 Dus in de Fifteen.c functie, de programma neemt de input van de gebruiker en 67 00:04:03,840 --> 00:04:07,690 roept vervolgens de verhuizing functie, passeren het aantal van de tegel die de 68 00:04:07,690 --> 00:04:09,270 gebruiker wil verhuizen. 69 00:04:09,270 --> 00:04:10,380 Nu, wees voorzichtig. 70 00:04:10,380 --> 00:04:14,200 Dit is het werkelijke aantal van de tegel en niet de werkelijke positie. 71 00:04:14,200 --> 00:04:19,010 Dus, moet u zoeken naar de tegel positie om te weten waar het is. 72 00:04:19,010 --> 00:04:23,440 >> Nu moet u alleen de gebruiker toestaan om een ​​beweging te maken als het legaal is. 73 00:04:23,440 --> 00:04:27,910 Een legale zet is elke tegel die is naast de blanco tegel. 74 00:04:27,910 --> 00:04:32,020 Dat betekent, boven en onder, naar links en naar rechts. 75 00:04:32,020 --> 00:04:34,680 Dus je zult moeten weten waar de blanco tegel is ook. 76 00:04:34,680 --> 00:04:39,720 Nu, voor elke beweging die je zoekt de gebruikers tegel, maar het is waarschijnlijk 77 00:04:39,720 --> 00:04:43,030 niet het beste om te zoeken naar de blanco tegel elke keer omdat je het doet 78 00:04:43,030 --> 00:04:45,270 elke keer de gebruiker wil verhuizen. 79 00:04:45,270 --> 00:04:50,300 Dus, in plaats daarvan, is het best om te onthouden waar de blanco tegel wordt met behulp van enkele 80 00:04:50,300 --> 00:04:52,650 goed bekend variabelen. 81 00:04:52,650 --> 00:04:55,970 Dus als je eenmaal de gebruiker toestaan ​​om hun beweegt, ze zijn goed op 82 00:04:55,970 --> 00:04:59,700 manier om te winnen van het spel van de Vijftien. 83 00:04:59,700 --> 00:05:03,940 >> Om het spel van Fifteen, de tegels te winnen moeten in een bepaalde volgorde, en 84 00:05:03,940 --> 00:05:06,970 het won functie controleert of het spel wordt gewonnen. 85 00:05:06,970 --> 00:05:10,290 Het geeft Waar als het spel wordt gewonnen en de tegels in de juiste volgorde, 86 00:05:10,290 --> 00:05:12,210 en anders false. 87 00:05:12,210 --> 00:05:15,830 Dus om het spel van Fifteen, tegels winnen moeten worden stijgende orde, met de 88 00:05:15,830 --> 00:05:19,230 blanco tegel in de rechter benedenhoek. 89 00:05:19,230 --> 00:05:23,630 Dus hoe kan je controleren of de gebruiker Het bestuur heeft verplaatst naar de juiste 90 00:05:23,630 --> 00:05:25,010 oriëntatie? 91 00:05:25,010 --> 00:05:29,200 >> Nou, zult u itereren over het bestuur en Controleer de waarden ervoor zorgen dat 92 00:05:29,200 --> 00:05:30,550 ze op de juiste plaats. 93 00:05:30,550 --> 00:05:33,910 Om dit te doen, kunt u geneste gebruiken lussen net zoals je hebt 94 00:05:33,910 --> 00:05:36,520 in te trekken en in init. 95 00:05:36,520 --> 00:05:40,430 Er zijn een paar manieren om te controleren en valideren of het hout 96 00:05:40,430 --> 00:05:42,860 correct en een winnende vorming, dat wel. 97 00:05:42,860 --> 00:05:47,330 Als je van links naar rechts, te beginnen uit de bovenste rij naar beneden, vervolgens elke 98 00:05:47,330 --> 00:05:50,590 getal moet groter zijn dan de vorige. 99 00:05:50,590 --> 00:05:54,530 Wees voorzichtig met wat je waarde hebt gekozen voor uw lege tegel wel. 100 00:05:54,530 --> 00:05:59,250 >> Of je kan een teller variabele gebruiken om ervoor te zorgen dat elke waarde is op zijn plaats, indien 101 00:05:59,250 --> 00:06:03,660 je komt met een soort van formule deze vertegenwoordigen. 102 00:06:03,660 --> 00:06:06,250 Dus veel plezier experimenteren met de wiskunde. 103 00:06:06,250 --> 00:06:10,930 Als je eenmaal hebt bedacht een manier, rendement True zodra de gebruiker het spel heeft gewonnen. 104 00:06:10,930 --> 00:06:15,950 Maar als enige waarde onjuist is, terugkeer Vals, de gebruiker heeft om verder te gaan 105 00:06:15,950 --> 00:06:18,440 omdat ze niet het spel gewonnen. 106 00:06:18,440 --> 00:06:23,030 Zodra u deze controle uit te voeren en samen met initialiseren, tekenen, bewegen 107 00:06:23,030 --> 00:06:25,110 u het spel van Vijftien klaar bent. 108 00:06:25,110 --> 00:06:27,620 Gefeliciteerd en veel plezier spelen. 109 00:06:27,620 --> 00:06:30,600 Mijn naam is Zamyla en dit is CS50. 110 00:06:30,600 --> 00:06:37,632