1 00:00:00,000 --> 00:00:09,386 2 00:00:09,386 --> 00:00:11,332 >> ZAMYLA CHAN: Låt oss ha kul med femton. 3 00:00:11,332 --> 00:00:15,680 Femton är det första spelet som du får att genomföra och det är interaktivt. 4 00:00:15,680 --> 00:00:16,410 Nu, inte oroa dig. 5 00:00:16,410 --> 00:00:18,830 Du behöver inte skriva det hela saken själv. 6 00:00:18,830 --> 00:00:22,320 Titta på distributions kod eftersom en mycket av spelstrukturen är redan 7 00:00:22,320 --> 00:00:23,880 ställa upp för dig. 8 00:00:23,880 --> 00:00:28,160 Det accepterar och tolkar en kommandorad argument från användaren och skapar en 9 00:00:28,160 --> 00:00:31,230 styrelsen baserat på den ingången. 10 00:00:31,230 --> 00:00:35,570 Den kontrollerar om spelet vinns och utgångar gång användarens vunnit spelet. 11 00:00:35,570 --> 00:00:38,340 Och för att vinna spelet, blir det inmatning från användaren och 12 00:00:38,340 --> 00:00:40,610 anropar Move-funktionen. 13 00:00:40,610 --> 00:00:44,600 >> Så vi kommer att genomföra fyra funktioner för spelet i femton, 14 00:00:44,600 --> 00:00:48,110 init, rita, flytta och vann. 15 00:00:48,110 --> 00:00:50,340 Först, låt oss ta itu init. 16 00:00:50,340 --> 00:00:55,150 I init, för initialize, vi representerar styrelsen i ett 2D heltal array. 17 00:00:55,150 --> 00:01:01,070 Och det här är en global variabel som heter styrelse med måtten MAX och MAX, 18 00:01:01,070 --> 00:01:03,880 de maximala dimensioner i styrelsen. 19 00:01:03,880 --> 00:01:07,310 Nu, den verkliga dimensionen av kortet ges av användaren, som representeras i 20 00:01:07,310 --> 00:01:10,620 heltalet d, vilket kunde vara mindre än max. 21 00:01:10,620 --> 00:01:14,660 Men, i C, du kan inte ändra storlek på matriser, så du har fastnat med 22 00:01:14,660 --> 00:01:16,730 att maximal dimension. 23 00:01:16,730 --> 00:01:19,870 >> Ditt jobb i init är att fylla värdena av brädan 24 00:01:19,870 --> 00:01:21,860 med rätt värde. 25 00:01:21,860 --> 00:01:26,910 Nu har vi sett 1D arrayer, men hur gör 2D-arrayer fungerar? 26 00:01:26,910 --> 00:01:30,985 Det är ett index på den raden, noll indexeras som alltid, och då även för 27 00:01:30,985 --> 00:01:32,100 kolonnen. 28 00:01:32,100 --> 00:01:36,120 Och du kommer att fylla din rutnät på i fallande värden, precis som denna. 29 00:01:36,120 --> 00:01:43,260 Grid, 0, 0, rad 0, kolumn 0, är ​​8, galler 0, 1 är 7. 30 00:01:43,260 --> 00:01:48,500 Detta är för ett exempel där d, litet d, är 3. 31 00:01:48,500 --> 00:01:52,690 >> Nu, styrelsen i femton måste också innehålla en tom sida vid sida, om du har någonsin 32 00:01:52,690 --> 00:01:54,280 lekte med det fysiska spelet. 33 00:01:54,280 --> 00:01:59,210 Men är ombord ett heltal array, så alla värden måste vara heltal. 34 00:01:59,210 --> 00:02:06,950 Så det är upp till dig att bestämma ett heltal värde för att representera en tom bricka. 35 00:02:06,950 --> 00:02:10,460 För att initiera din bräda, kan du använda slingstrukturer som innehåller 36 00:02:10,460 --> 00:02:16,440 starttillstånd i styrelsen, där styrelsen i j representerar elementet vid 37 00:02:16,440 --> 00:02:19,380 rad i och kolumn j. 38 00:02:19,380 --> 00:02:23,035 De börjar i fallande ordning och, kom ihåg, att om antalet plattor 39 00:02:23,035 --> 00:02:29,590 är märkligt, då du kommer att behöva byta plats för 2 och 1. 40 00:02:29,590 --> 00:02:33,790 Så där har vi vår initierad styrelse. 41 00:02:33,790 --> 00:02:37,440 >> Nu, när vi har initierats vår styrelse, är det dags att dra den. 42 00:02:37,440 --> 00:02:41,260 Rita kommer att skriva ut den aktuella tillstånd ombord, men du måste se 43 00:02:41,260 --> 00:02:44,260 för att skriva ut brickor i samma ordning att du har initierats dem. 44 00:02:44,260 --> 00:02:47,300 Och du måste också formatera dina siffror korrekt. 45 00:02:47,300 --> 00:02:51,700 Eftersom vi kan ha enstaka siffror och tvåsiffriga tal, då du vill 46 00:02:51,700 --> 00:02:54,540 skriva ut ett tomt utrymme före alla ensiffriga tal. 47 00:02:54,540 --> 00:03:00,150 Du använder det genom att använda platshållaren -. 48 00:03:00,150 --> 00:03:02,550 >> Men kom ihåg vår tomt utrymme. 49 00:03:02,550 --> 00:03:05,970 Vi vill inte skriva ut det verkliga antalet att vi har valt att representera 50 00:03:05,970 --> 00:03:10,410 det tomma utrymmet i styrelsen, men vi också vill inte skriva ut någonting alls. 51 00:03:10,410 --> 00:03:15,310 Så vad du kan göra är att definiera en symbol eller tecken för att representera 52 00:03:15,310 --> 00:03:17,050 blank kakel. 53 00:03:17,050 --> 00:03:21,030 I tidigare exempel har jag valt en streck, och då du bara skriva ut 54 00:03:21,030 --> 00:03:26,970 att när du når den tomma utrymme i dragfunktion. 55 00:03:26,970 --> 00:03:29,850 >> Så dra kommer att ha nästlade loopar. 56 00:03:29,850 --> 00:03:31,150 Ungefär så här. 57 00:03:31,150 --> 00:03:35,660 För varje rad, och sedan för varje värde i raden, du kommer att skriva ut 58 00:03:35,660 --> 00:03:36,940 värde i detta utrymme. 59 00:03:36,940 --> 00:03:39,470 När du har skrivit ut alla värden i rad, då du 60 00:03:39,470 --> 00:03:41,180 kan skriva ut en ny linje. 61 00:03:41,180 --> 00:03:47,730 Kom ihåg att för att din oavgjort Funktionen ska eka eller spegla ordning 62 00:03:47,730 --> 00:03:48,980 i din initierad funktion. 63 00:03:48,980 --> 00:03:51,290 64 00:03:51,290 --> 00:03:55,160 >> Nu när du initierade styrelsen och att du har ritat det, är det dags att låta 65 00:03:55,160 --> 00:03:58,500 användaren redigera den och göra sina drag. 66 00:03:58,500 --> 00:04:03,840 Så i Fifteen.c funktion, Programmet tar indata från användaren och 67 00:04:03,840 --> 00:04:07,690 anropar sedan flytten funktionen, passerar i numret för den bricka som det 68 00:04:07,690 --> 00:04:09,270 användaren vill flytta. 69 00:04:09,270 --> 00:04:10,380 Nu, var försiktig. 70 00:04:10,380 --> 00:04:14,200 Detta är det verkliga antalet av plattan och inte dess faktiska läge. 71 00:04:14,200 --> 00:04:19,010 Så, måste du söka efter kakel s position för att veta var den är. 72 00:04:19,010 --> 00:04:23,440 >> Nu ska du bara låta användaren att göra ett drag om det är lagligt. 73 00:04:23,440 --> 00:04:27,910 En regelrätt drag är någon bricka som är intill den tomma brickan. 74 00:04:27,910 --> 00:04:32,020 Det betyder att, ovan och nedan, för att vänster och till höger. 75 00:04:32,020 --> 00:04:34,680 Så du måste veta var den tomma brickan är också. 76 00:04:34,680 --> 00:04:39,720 Nu, för varje steg du söker efter den användare kakel, men det är nog 77 00:04:39,720 --> 00:04:43,030 inte bäst att söka efter den tomma brickan varje gång eftersom du gör det 78 00:04:43,030 --> 00:04:45,270 varje gång den användaren vill flytta. 79 00:04:45,270 --> 00:04:50,300 Så istället, är det bäst att komma ihåg var den tomma brickan är att använda några 80 00:04:50,300 --> 00:04:52,650 väl namngivna variabler. 81 00:04:52,650 --> 00:04:55,970 Så när du tillåter användaren att göra sina drag, de är på god 82 00:04:55,970 --> 00:04:59,700 sätt att vinna spelet i femton. 83 00:04:59,700 --> 00:05:03,940 >> För att vinna spelet av femton, brickor måste vara i en speciell ordning, och 84 00:05:03,940 --> 00:05:06,970 det vunnit funktionen kontrollerar om spelet är vunnet. 85 00:05:06,970 --> 00:05:10,290 Den returnerar True om matchen är vunnen och plattorna är i rätt ordning, 86 00:05:10,290 --> 00:05:12,210 och False annars. 87 00:05:12,210 --> 00:05:15,830 Så för att vinna spelet av Femton, kakel måste vara ökande ordning, med 88 00:05:15,830 --> 00:05:19,230 tom bricka i det nedre högra hörnet. 89 00:05:19,230 --> 00:05:23,630 Så hur kan du kontrollera om användaren har flyttat till styrelsen i rätt 90 00:05:23,630 --> 00:05:25,010 läggning? 91 00:05:25,010 --> 00:05:29,200 >> Tja, du iterera över styrelsen och kontrollera värdena för att säkerställa att 92 00:05:29,200 --> 00:05:30,550 de är på rätt plats. 93 00:05:30,550 --> 00:05:33,910 För att göra detta kan du använda nästlade för loopar precis som du gjorde 94 00:05:33,910 --> 00:05:36,520 i lottningen och i init. 95 00:05:36,520 --> 00:05:40,430 Det finns ett par sätt att kontrollera och validera om styrelsen är 96 00:05:40,430 --> 00:05:42,860 korrekt och en vinnande formation, dock. 97 00:05:42,860 --> 00:05:47,330 Om du går från vänster till höger, med början från den översta raden ner, sedan varje 98 00:05:47,330 --> 00:05:50,590 Antalet måste vara större än den föregående. 99 00:05:50,590 --> 00:05:54,530 Var försiktig med vad värderar du har valt för tom kakel ändå. 100 00:05:54,530 --> 00:05:59,250 >> Eller så kan du använda en räknare variabel till säkerställa att varje värde är på plats, om så 101 00:05:59,250 --> 00:06:03,660 du komma med någon form av formel för att representera denna. 102 00:06:03,660 --> 00:06:06,250 Ha så kul att experimentera med matten. 103 00:06:06,250 --> 00:06:10,930 När du har kommit på ett sätt, retur Sant när användaren har vunnit spelet. 104 00:06:10,930 --> 00:06:15,950 Men om något värde är felaktigt, retur Falskt, har användaren att fortsätta gå 105 00:06:15,950 --> 00:06:18,440 eftersom de inte har vunnit spelet. 106 00:06:18,440 --> 00:06:23,030 När du genomför denna kontroll och, tillsammans med initialize, rita, och flytta, 107 00:06:23,030 --> 00:06:25,110 du är klar spelet i femton. 108 00:06:25,110 --> 00:06:27,620 Grattis och ha roligt att spela. 109 00:06:27,620 --> 00:06:30,600 Mitt namn är Zamyla och detta är CS50. 110 00:06:30,600 --> 00:06:37,632