1 00:00:00,000 --> 00:00:09,386 2 00:00:09,386 --> 00:00:11,332 >> ZAMYLA CHAN: Lad os få sjov med Femten. 3 00:00:11,332 --> 00:00:15,680 Femten er det første spil, at du får at gennemføre, og det er interaktivt. 4 00:00:15,680 --> 00:00:16,410 Nu, ikke at bekymre sig. 5 00:00:16,410 --> 00:00:18,830 Du behøver ikke at skrive hele selv. 6 00:00:18,830 --> 00:00:22,320 Kig på fordelingen kode, fordi en masse af spillet struktur er allerede 7 00:00:22,320 --> 00:00:23,880 sat op for dig. 8 00:00:23,880 --> 00:00:28,160 Det accepterer og analyserer en kommandolinje argument fra brugeren og skaber en 9 00:00:28,160 --> 00:00:31,230 board baseret på denne indgang. 10 00:00:31,230 --> 00:00:35,570 Det tjekker, om spillet er vundet og udgange når brugerens vandt spillet. 11 00:00:35,570 --> 00:00:38,340 Og for at vinde spillet, får det input fra brugeren og 12 00:00:38,340 --> 00:00:40,610 kalder Flyt funktionen. 13 00:00:40,610 --> 00:00:44,600 >> Så vi kommer til at gennemføre fire funktioner til spillet af Fifteen, 14 00:00:44,600 --> 00:00:48,110 init, tegne, flytte og vandt. 15 00:00:48,110 --> 00:00:50,340 Først, lad os tackle init. 16 00:00:50,340 --> 00:00:55,150 I init for Initialiser, repræsenterer vi bestyrelsen i en 2D-heltal array. 17 00:00:55,150 --> 00:01:01,070 Og dette er en global variabel kaldet bord med dimensioner MAX og MAX 18 00:01:01,070 --> 00:01:03,880 de maksimale dimensioner af bestyrelsen. 19 00:01:03,880 --> 00:01:07,310 Nu er den faktiske dimension af bestyrelsen er givet af brugeren, er repræsenteret i 20 00:01:07,310 --> 00:01:10,620 heltal d, som kunne være mindre end MAX. 21 00:01:10,620 --> 00:01:14,660 Men i C, kan du ikke ændre størrelsen på arrays, så du sidder fast med 22 00:01:14,660 --> 00:01:16,730 den maksimale dimension. 23 00:01:16,730 --> 00:01:19,870 >> Dit job i init er at befolke værdierne af bestyrelsen 24 00:01:19,870 --> 00:01:21,860 med den korrekte værdi. 25 00:01:21,860 --> 00:01:26,910 Nu har vi set 1D arrays, men hvordan 2D arrays virker? 26 00:01:26,910 --> 00:01:30,985 Der er et indeks af rækken, nul indekseret som altid, og derefter også af 27 00:01:30,985 --> 00:01:32,100 kolonnen. 28 00:01:32,100 --> 00:01:36,120 Og du vil fylde din nettet i i faldende værdier, ligesom dette. 29 00:01:36,120 --> 00:01:43,260 Grid, 0, 0, række 0, kolonne 0, er 8, grid 0, 1 er 7. 30 00:01:43,260 --> 00:01:48,500 Dette er et eksempel, hvor d, lille d, er 3.. 31 00:01:48,500 --> 00:01:52,690 >> Nu er bestyrelsen i Femten skal også indeholde en tom flise, hvis du nogensinde har 32 00:01:52,690 --> 00:01:54,280 spilles med fysisk spil. 33 00:01:54,280 --> 00:01:59,210 Men bord er et heltal array, så alle værdier at være hele tal. 34 00:01:59,210 --> 00:02:06,950 Så det er op til dig at bestemme et heltal værdi til at repræsentere en tom flise. 35 00:02:06,950 --> 00:02:10,460 Sådan initialiserer dit bord, kan du bruge løkke-strukturer på at inddæmme 36 00:02:10,460 --> 00:02:16,440 start tilstand af bestyrelsen, hvor bestyrelsen i j repræsenterer grundstof 37 00:02:16,440 --> 00:02:19,380 række i og søjle j. 38 00:02:19,380 --> 00:02:23,035 De starter i faldende rækkefølge, og Husk, at hvis antallet af fliser 39 00:02:23,035 --> 00:02:29,590 er ulige, så er du nødt til at bytte placeringen af ​​2. og 1.. 40 00:02:29,590 --> 00:02:33,790 Så der har vi vores initialiseret bord. 41 00:02:33,790 --> 00:02:37,440 >> Nu, at vi har initialiseret vores bord, er det tid til at tegne den. 42 00:02:37,440 --> 00:02:41,260 Lodtrækningen udskrive det aktuelle tilstand bord, men du skal sørge for 43 00:02:41,260 --> 00:02:44,260 at udskrive fliser i samme rækkefølge at du har initialiseret dem. 44 00:02:44,260 --> 00:02:47,300 Og du også nødt til at formatere dine tal korrekt. 45 00:02:47,300 --> 00:02:51,700 Fordi vi kunne have encifret og dobbelte cifre, så du ønsker at 46 00:02:51,700 --> 00:02:54,540 udskrive en tom plads før enhver enkelt cifrede tal. 47 00:02:54,540 --> 00:03:00,150 Du bruger det ved at bruge pladsholderen -. 48 00:03:00,150 --> 00:03:02,550 >> Men husk vores tom plads. 49 00:03:02,550 --> 00:03:05,970 Vi ønsker ikke at udskrive det faktiske antal at vi har valgt til at repræsentere 50 00:03:05,970 --> 00:03:10,410 der tom plads i bestyrelsen, men vi har også ikke ønsker at udskrive noget overhovedet. 51 00:03:10,410 --> 00:03:15,310 Så hvad du kan gøre, er at definere en symbol eller tegn til at repræsentere 52 00:03:15,310 --> 00:03:17,050 blank flise. 53 00:03:17,050 --> 00:03:21,030 I tidligere eksempler har jeg valgt en underscore, og så skal du bare udskrive 54 00:03:21,030 --> 00:03:26,970 at når du når den tomme plads i dit draw funktion. 55 00:03:26,970 --> 00:03:29,850 >> Så tegner, vil have indlejret efter sløjfer. 56 00:03:29,850 --> 00:03:31,150 Noget som dette. 57 00:03:31,150 --> 00:03:35,660 For hver række, og derefter for hver værdi i rækken, er du nødt til at udskrive 58 00:03:35,660 --> 00:03:36,940 værdi i dette rum. 59 00:03:36,940 --> 00:03:39,470 Når du har udskrevet alle de værdier i rækken, så du 60 00:03:39,470 --> 00:03:41,180 kan udskrive en ny linje. 61 00:03:41,180 --> 00:03:47,730 Husk, at for at din draw skal funktionen echo eller spejle ordre 62 00:03:47,730 --> 00:03:48,980 i din initialiseret funktion. 63 00:03:48,980 --> 00:03:51,290 64 00:03:51,290 --> 00:03:55,160 >> Nu, at du initialiseret bestyrelsen og at du har tegnet det, er det tid til at lade 65 00:03:55,160 --> 00:03:58,500 brugeren redigere det og gøre deres bevægelser. 66 00:03:58,500 --> 00:04:03,840 Så i Fifteen.c funktion, program tager input fra brugeren og 67 00:04:03,840 --> 00:04:07,690 derefter kalder flytte funktionen, der passerer i antallet af flisen, at 68 00:04:07,690 --> 00:04:09,270 brugeren ønsker at flytte. 69 00:04:09,270 --> 00:04:10,380 Nu, vær forsigtig. 70 00:04:10,380 --> 00:04:14,200 Det er det faktiske antal af flisen og ikke dens faktiske position. 71 00:04:14,200 --> 00:04:19,010 Så vil du nødt til at søge efter flisens position til at vide, hvor det er. 72 00:04:19,010 --> 00:04:23,440 >> Nu skal du kun gøre det muligt for brugeren at foretage et træk, hvis det er lovligt. 73 00:04:23,440 --> 00:04:27,910 Et lovligt træk er enhver flise, der er der støder op til den tomme flise. 74 00:04:27,910 --> 00:04:32,020 Det betyder, over og under, til venstre og til højre. 75 00:04:32,020 --> 00:04:34,680 Så du bliver nødt til at vide, hvor den tomme fliser er så godt. 76 00:04:34,680 --> 00:04:39,720 Nu, for hvert skridt, du søger efter brugerne fliser, men det er nok 77 00:04:39,720 --> 00:04:43,030 ikke bedst at søge efter det tomme flise hver gang, fordi du gør det 78 00:04:43,030 --> 00:04:45,270 hver eneste gang brugeren ønsker at flytte. 79 00:04:45,270 --> 00:04:50,300 Så i stedet, er det bedst at huske, hvor råemnet flise ved hjælp af nogle 80 00:04:50,300 --> 00:04:52,650 godt navngivne variabler. 81 00:04:52,650 --> 00:04:55,970 Så når du giver brugeren mulighed for at gøre deres bevæger sig, er de godt på 82 00:04:55,970 --> 00:04:59,700 vej til at vinde spillet af Femten. 83 00:04:59,700 --> 00:05:03,940 >> For at vinde spillet Femten, fliserne nødt til at være i en bestemt rækkefølge, og 84 00:05:03,940 --> 00:05:06,970 den vandt funktion kontrollerer, om spillet er vundet. 85 00:05:06,970 --> 00:05:10,290 Det giver True hvis spillet er vundet, og fliserne er i den rigtige rækkefølge, 86 00:05:10,290 --> 00:05:12,210 og False andet. 87 00:05:12,210 --> 00:05:15,830 Så for at vinde spillet af femten, fliser nødt til at være stigende rækkefølge med den 88 00:05:15,830 --> 00:05:19,230 blank flise i nederste højre hjørne. 89 00:05:19,230 --> 00:05:23,630 Så hvordan kan du kontrollere, om brugeren har bevæget bestyrelsen i den rigtige 90 00:05:23,630 --> 00:05:25,010 orientering? 91 00:05:25,010 --> 00:05:29,200 >> Nå, vil du gentage over for bestyrelsen og kontrollere de værdier, at sikre, at 92 00:05:29,200 --> 00:05:30,550 de er i det rigtige sted. 93 00:05:30,550 --> 00:05:33,910 For at gøre dette, kan du bruge indlejrede efter sløjfer ligesom du gjorde 94 00:05:33,910 --> 00:05:36,520 i lodtrækningen og init. 95 00:05:36,520 --> 00:05:40,430 Der er et par måder at kontrollere og validere, om bestyrelsen er 96 00:05:40,430 --> 00:05:42,860 korrekt og et vindende dannelse, selv om. 97 00:05:42,860 --> 00:05:47,330 Hvis du går fra venstre mod højre, startende fra den øverste række nedad, derefter hver 98 00:05:47,330 --> 00:05:50,590 nummer skal være større end den foregående. 99 00:05:50,590 --> 00:05:54,530 Vær forsigtig med, hvad værdi du har valgt til din tomme flise selv. 100 00:05:54,530 --> 00:05:59,250 >> Eller du kan bruge en tæller variabel til sikre, at hver værdi er på plads, hvis 101 00:05:59,250 --> 00:06:03,660 du kommer op med en slags formel til at repræsentere dette. 102 00:06:03,660 --> 00:06:06,250 Så har det sjovt at eksperimentere med matematik. 103 00:06:06,250 --> 00:06:10,930 Når du er kommet op med en måde, afkast Sandt når brugeren har vundet spillet. 104 00:06:10,930 --> 00:06:15,950 Men hvis nogen værdi er forkert, afkast Falsk, brugeren har til at fortsætte med at flytte 105 00:06:15,950 --> 00:06:18,440 fordi de ikke har vundet spillet. 106 00:06:18,440 --> 00:06:23,030 Når du gennemfører denne kontrol, og sammen med Initialiser, tegne og flytte, 107 00:06:23,030 --> 00:06:25,110 du er færdig med spillet af Femten. 108 00:06:25,110 --> 00:06:27,620 Tillykke og have det sjovt at spille. 109 00:06:27,620 --> 00:06:30,600 Mit navn er Zamyla og dette er CS50. 110 00:06:30,600 --> 00:06:37,632