1 00:00:00,000 --> 00:00:13,070 2 00:00:13,070 --> 00:00:13,715 >> ROB BOWDEN: Hi. 3 00:00:13,715 --> 00:00:17,800 Olen Rob ja ma loodan, et teie mäng mängu 15. 4 00:00:17,800 --> 00:00:22,040 Nüüd on neli funktsiooni, mida vajate rakendada selle programmi - init, 5 00:00:22,040 --> 00:00:24,650 joonistada, liikuda, ja võitis. 6 00:00:24,650 --> 00:00:27,230 Nii, vaatame init. 7 00:00:27,230 --> 00:00:32,930 >> Siin näeme, et esimene asi, me oleme teha, on kuulutada muutuja 8 00:00:32,930 --> 00:00:34,600 nimetatakse counter. 9 00:00:34,600 --> 00:00:37,620 See saab initsialiseerida d korda d miinus 1. 10 00:00:37,620 --> 00:00:40,200 Pea meeles, et d on mõõde meie pardal. 11 00:00:40,200 --> 00:00:43,840 Kuidas init läheb tööle on see läheb itereerima kogu pardal 12 00:00:43,840 --> 00:00:46,050 ja me ei kavatse hakata ülaosas vasakul. 13 00:00:46,050 --> 00:00:48,570 >> Ja ütleme, et me on 4 4 pardal. 14 00:00:48,570 --> 00:00:51,220 Nii top vasakule oleme kavatse öelda 15. 15 00:00:51,220 --> 00:00:53,960 Ja siis me lihtsalt loen läbi lauad, öeldes 15, 14, 13, 16 00:00:53,960 --> 00:00:58,510 12, 11, 10, 9, 8, 7, 6, 5, 4, ja nii edasi. 17 00:00:58,510 --> 00:01:03,780 Nii top vasakule, me eeldame, et d korda d miinus 1, mis 4 4 18 00:01:03,780 --> 00:01:08,290 juhul saab olema 16 miinus 1, mis on õigesti 15. 19 00:01:08,290 --> 00:01:10,885 >> Ja nüüd siin, kus me Käi kogu pardal. 20 00:01:10,885 --> 00:01:14,720 Ja me ei kavatse seada iga positsiooni Juhatuse praeguse väärtuse 21 00:01:14,720 --> 00:01:19,090 meie counter, ja siis counter läheb ainult kahandab, et järgmine 22 00:01:19,090 --> 00:01:22,300 positsioon jõuame läheb on counter üks alla 23 00:01:22,300 --> 00:01:23,690 varasemat seisukohta. 24 00:01:23,690 --> 00:01:26,970 Nii et meil oli algselt 15 ja aland counter. 25 00:01:26,970 --> 00:01:30,065 Nii siis me määrata 14 Järgmise seisukoha aland loendur 26 00:01:30,065 --> 00:01:33,710 ja me määratud 13, ja nii edasi. 27 00:01:33,710 --> 00:01:37,620 >> Lõpuks peame hakkama nurgas sellisel juhul, kui pardal on ka 28 00:01:37,620 --> 00:01:44,450 mõõde, siis lihtsalt teeme 15, 14, 13, 12, kõik viis kuni 3, 2, 1, on 29 00:01:44,450 --> 00:01:46,780 jäta meid lahendamatu pardal. 30 00:01:46,780 --> 00:01:49,390 Ja meil on vahetada 1 ja 2. 31 00:01:49,390 --> 00:01:52,930 Niisiis, kui d mod 2 võrdub 0, see on kuidas me ei kavatse vaadata 32 00:01:52,930 --> 00:01:54,410 et näha, kas see on isegi. 33 00:01:54,410 --> 00:01:59,810 Kui d mod 2 võrdub 0, siis rida d miinus 1, mis on alumises reas ning 34 00:01:59,810 --> 00:02:05,430 positsioon d miinus 2, või veerg d miinus 2, me seada, et 2 ja 35 00:02:05,430 --> 00:02:07,860 veerus d miinus 3 me läheb seatud 1. 36 00:02:07,860 --> 00:02:12,170 Nii et lihtsalt tagurdab kus 1 ja 2 on hetkel. 37 00:02:12,170 --> 00:02:16,270 >> Lõpuks me seada väga all paremal võrdne tühjaks, kus 38 00:02:16,270 --> 00:02:20,700 tühi on hash määratletud tipus kui 0. 39 00:02:20,700 --> 00:02:26,785 Nii, et ei ole tingimata vajalik, kuna see silmus läheb on 40 00:02:26,785 --> 00:02:30,610 seada alt paremale 0, sest counter loomulikult jõuda 0. 41 00:02:30,610 --> 00:02:34,610 Aga see sõltub meist, teades, et tühi oli räsitud leida 0. 42 00:02:34,610 --> 00:02:38,280 Kui ma lähen seda programmi ja hiljem muuta tühi ülaosas 100, see 43 00:02:38,280 --> 00:02:39,770 tuleb veel palju tööd. 44 00:02:39,770 --> 00:02:43,180 >> Nii et see on lihtsalt tagada, et all paremal on tegelikult võrdne meie 45 00:02:43,180 --> 00:02:44,870 tühi väärtus. 46 00:02:44,870 --> 00:02:50,270 Lõpuks on meil kaks globaalsed muutujad, nii tühi i ja tühi j ja näeme 47 00:02:50,270 --> 00:02:53,360 deklareeritud ülaosas. 48 00:02:53,360 --> 00:02:56,270 Ja me ei kavatse kasutada nende kahe globaalse muutujaid jälgida 49 00:02:56,270 --> 00:02:59,040 positsiooni tühjaks, nii et meil ei ole vaja vaadata läbi kogu 50 00:02:59,040 --> 00:03:03,890 pardal, et leida tühi iga aeg püüame liikuda. 51 00:03:03,890 --> 00:03:08,450 Nii positsiooni tühi alati on hakkan allosas paremal. 52 00:03:08,450 --> 00:03:13,270 Nii põhjas õigus on antud indeksid d miinus 1, d miinus 1. 53 00:03:13,270 --> 00:03:14,880 Nii, et init. 54 00:03:14,880 --> 00:03:17,040 >> Nüüd liigume edasi juhtida. 55 00:03:17,040 --> 00:03:19,370 Niisiis, draw saab olema sarnane kus me kinnitada, 56 00:03:19,370 --> 00:03:20,970 kogu pardal. 57 00:03:20,970 --> 00:03:25,400 Ja me lihtsalt tahame trükkida raha see on igas asendis pardal. 58 00:03:25,400 --> 00:03:29,580 Nii et siin me oleme trükkimise raha, mis on igas asendis pardal. 59 00:03:29,580 --> 00:03:32,280 Ja teate, mis me teeme -. 60 00:03:32,280 --> 00:03:37,410 Ja see on just öelnud printf et olenemata sellest, kas see on üks number või 61 00:03:37,410 --> 00:03:42,010 kahekohaline number, et me ikka tahame seda kuluda kaks veergu välja printida, 62 00:03:42,010 --> 00:03:46,290 nii et kui meil on kahekohaline ja üks numbrini sama lauaga, meie 63 00:03:46,290 --> 00:03:49,450 juhatuse ikkagi vaadata kena ja kandiline. 64 00:03:49,450 --> 00:03:54,190 >> Nii et me tahame seda teha, et iga väärtus juhatuses, välja arvatud tühi. 65 00:03:54,190 --> 00:03:58,260 Niisiis, kui positsioon pardal võrdub tühjaks, siis me konkreetselt 66 00:03:58,260 --> 00:04:01,730 soovite printida ainult alakriips esindada tühi asemel 67 00:04:01,730 --> 00:04:05,150 mis iganes väärtus tühi tegelikult on. 68 00:04:05,150 --> 00:04:08,500 >> Lõpuks me tahame prindi välja uus liin. 69 00:04:08,500 --> 00:04:11,970 Pange tähele, et see on ikka sees välimine silmus, kuid väljaspool 70 00:04:11,970 --> 00:04:13,200 sisemine silmus. 71 00:04:13,200 --> 00:04:17,930 Kuna see välimine kontuur iterating üle kõigi ridade, ja nii see printf on 72 00:04:17,930 --> 00:04:22,130 läheb lihtsalt printida uus liin, nii et me liikuda välja trükkida järgmisel real. 73 00:04:22,130 --> 00:04:23,910 Ja see on see viik. 74 00:04:23,910 --> 00:04:27,770 >> Nii, nüüd liigume edasi liikuda. 75 00:04:27,770 --> 00:04:32,590 Nüüd võtame liikuda, kivimaja, et kasutaja on kantud mäng - nad 76 00:04:32,590 --> 00:04:36,360 sisestage plaat nad tahavad liikuda - ja sa peaksid tagasi bool, nii 77 00:04:36,360 --> 00:04:39,300 kas on õige või vale, sõltuvalt kas see samm oli tegelikult 78 00:04:39,300 --> 00:04:43,360 Kehtiv - kas see plaat võib olla kolis tühja ruumi. 79 00:04:43,360 --> 00:04:48,340 >> Nii et siin me tunnistada kohaliku muutuja, tile_1 ja tile_j, mis hakkavad 80 00:04:48,340 --> 00:04:52,150 sarnaneks blank_i ja blank_j, välja arvatud, et see saab jälgida 81 00:04:52,150 --> 00:04:54,910 asend plaat. 82 00:04:54,910 --> 00:05:00,370 Nüüd me ei kavatse kasutada blank_i ja blank_j ja öelda, olgu, nii 83 00:05:00,370 --> 00:05:01,930 siin on tühi laual. 84 00:05:01,930 --> 00:05:04,420 >> Nüüd on plaat üle tühja? 85 00:05:04,420 --> 00:05:06,210 Kas plaat vasakul tühi? 86 00:05:06,210 --> 00:05:07,420 Kas plaat paremal tühi? 87 00:05:07,420 --> 00:05:08,970 Kas plaat alla tühi? 88 00:05:08,970 --> 00:05:13,330 Niisiis, kui plaat on kõik need positsioone, siis me teame, et plaat 89 00:05:13,330 --> 00:05:16,390 saab kolis tühi koht ja tühjaks saab liigutada, kui 90 00:05:16,390 --> 00:05:18,240 plaat praegu on. 91 00:05:18,240 --> 00:05:26,400 >> Nii et siin me ütleme, kui juhatus positsioonis blank_i miinus 1 blank_j. 92 00:05:26,400 --> 00:05:31,120 Nii et see on selge, on plaat üle praeguse tühi? 93 00:05:31,120 --> 00:05:34,350 Ja kui on, siis me meeles mis on seisukoht plaat. 94 00:05:34,350 --> 00:05:37,870 Plaat on asendis blank_i miinus 1 ja blank_j. 95 00:05:37,870 --> 00:05:40,660 nüüd esimene, meil on ka see kontroll siin, nii blank_i on 96 00:05:40,660 --> 00:05:41,760 suurem kui 0. 97 00:05:41,760 --> 00:05:43,410 >> Miks me tahame seda teha? 98 00:05:43,410 --> 00:05:47,290 Noh, kui tühi on ülemises reas pardal, siis me ei taha 99 00:05:47,290 --> 00:05:51,240 vaata üle tühjaks plaat alates miski kõrgemale 100 00:05:51,240 --> 00:05:52,430 rida pardal. 101 00:05:52,430 --> 00:05:55,950 See, kuidas sa võiksid lõpuks saada midagi sellist killustatust süü või 102 00:05:55,950 --> 00:05:59,030 Teie programm võib lihtsalt töö ettearvamatult. 103 00:05:59,030 --> 00:06:04,310 Niisiis, see on tagada, et me ei vaata kohtades, mis ei kehti. 104 00:06:04,310 --> 00:06:08,470 >> Nüüd me teeme sama asja kõik muud võimalikud kombinatsioonid. 105 00:06:08,470 --> 00:06:13,250 Nii et siin, me otsime alla tühi et näha, kas see plaat. 106 00:06:13,250 --> 00:06:16,950 Ja meil on ka veenduda, et me oleme ei alumisel real, või siis me 107 00:06:16,950 --> 00:06:18,910 ei peaks otsima plaat. 108 00:06:18,910 --> 00:06:25,040 Siin me läheme vaatama vasakule tühi, et näha, kas see on plaat. 109 00:06:25,040 --> 00:06:27,860 Ja me ei peaks otsima vasakule kui me oleme vasakpoolses veerus. 110 00:06:27,860 --> 00:06:30,100 Ja siin me läheme vaatama õigust tühjaks ning me ei tohiks 111 00:06:30,100 --> 00:06:33,340 vaata paremale, kui me oleme parempoolses veerus. 112 00:06:33,340 --> 00:06:37,820 >> Seega, kui ükski nendest asjadest on tõsi, see tähendab, et plaat ei külgnevate 113 00:06:37,820 --> 00:06:39,640 tühja ja me saame tagasi false. 114 00:06:39,640 --> 00:06:41,230 Liikuda ei olnud kehtiv. 115 00:06:41,230 --> 00:06:47,010 Aga kui üks neist oli tõsi, siis Siinkohal me teame, et tile_i ja 116 00:06:47,010 --> 00:06:50,540 tile_j on võrdne asend plaat. 117 00:06:50,540 --> 00:06:55,210 Ja nii saame uuendada pardal seisukohti tile_i ja tile_j. 118 00:06:55,210 --> 00:06:59,820 Me teame, et uus raha on tühi ja mis asendis blank_i 119 00:06:59,820 --> 00:07:02,950 blank_j, mis oli algne tühi - me teame plaat läheb 120 00:07:02,950 --> 00:07:04,030 liikuda seal. 121 00:07:04,030 --> 00:07:07,610 >> Pange tähele, et me tegelikult ei pea tegema tõeline swap siin, sest me teame, 122 00:07:07,610 --> 00:07:09,850 väärtused, mis tuleb lisada viiakse need positsioonid. 123 00:07:09,850 --> 00:07:13,780 Meil ei ole vaja ajutiselt muutuja ümber. 124 00:07:13,780 --> 00:07:16,920 >> Lõpuks peame meeles pidama, et me on meie globaalsed muutujad, mis on 125 00:07:16,920 --> 00:07:18,980 jälgida seisukoht tooriku. 126 00:07:18,980 --> 00:07:22,780 Nii et me tahame uuendada positsiooni tühi olema, kui plaat 127 00:07:22,780 --> 00:07:24,190 algselt oli. 128 00:07:24,190 --> 00:07:27,680 Lõpuks oleme tagasi true alates liikuda oli edukas. 129 00:07:27,680 --> 00:07:31,110 Oleme edukalt vahetada tooriku plaat. 130 00:07:31,110 --> 00:07:34,890 >> Olgu, viimane oleme vaja kontrollida võidetud. 131 00:07:34,890 --> 00:07:39,900 Nii võitis sarnaselt naaseb bool kus tõsi saab näidata, et 132 00:07:39,900 --> 00:07:41,460 kasutaja on võitnud mängu. 133 00:07:41,460 --> 00:07:43,780 Ja vale on, mis näitab, et mäng veel kestab. 134 00:07:43,780 --> 00:07:46,340 Kasutaja pole võitnud. 135 00:07:46,340 --> 00:07:52,100 Nii, et see saab olema päris palju vastand init, kus init, 136 00:07:52,100 --> 00:07:56,920 mäletan, me initsialiseerida pardal 15, 14, 13, 12, jne. 137 00:07:56,920 --> 00:08:03,000 Arvestades võitnud, me tahame, et kontrollida, kas Laud on 1, 2, 3, 4, 5, ja nii edasi. 138 00:08:03,000 --> 00:08:06,600 >> Niisiis, me initsialiseerida meie vastuollu 1 sest see on, mida top 139 00:08:06,600 --> 00:08:08,400 vasakul pardal olema. 140 00:08:08,400 --> 00:08:10,860 Ja siis me loop kogu pardal. 141 00:08:10,860 --> 00:08:13,690 Olgem ignoreerida seda tingimust teine. 142 00:08:13,690 --> 00:08:18,410 Ja see tingimus on lihtsalt läheb kontroll on laual selles asendis 143 00:08:18,410 --> 00:08:20,790 võrdne praeguse loeb? 144 00:08:20,790 --> 00:08:27,040 Kui nii, juurdekasvu loota, et Järgmisele kohale me pilk on üks kõrgemaid 145 00:08:27,040 --> 00:08:29,690 kui positsioon oleme praegu. 146 00:08:29,690 --> 00:08:32,700 >> Nii et see, kuidas me saame üleval vasakul peaks olema 1. 147 00:08:32,700 --> 00:08:33,950 Kasvatab arv 2. 148 00:08:33,950 --> 00:08:35,010 Vaata järgmist seisukohta. 149 00:08:35,010 --> 00:08:35,690 Kas see 2? 150 00:08:35,690 --> 00:08:37,659 Kui jah, siis juurdekasvu loota, et 3. 151 00:08:37,659 --> 00:08:39,179 Järgmine seisukoht, on see 3? 152 00:08:39,179 --> 00:08:42,440 Kui jah, siis juurdekasvu loota 4, ja nii edasi. 153 00:08:42,440 --> 00:08:49,190 Niisiis, kui on olemas mingi seisukoht pardal, mis ei ole võrdne meie loota, 154 00:08:49,190 --> 00:08:52,640 siis me tahame tagasi false sest et tähendab, et seal on mingi plaat, mis on 155 00:08:52,640 --> 00:08:55,490 pole õiges asendis. 156 00:08:55,490 --> 00:08:58,810 >> Nii et siin, mida see seisund läheb? 157 00:08:58,810 --> 00:09:02,170 Noh, mäletan, et pimekatse on peaks minema all paremal. 158 00:09:02,170 --> 00:09:06,180 Ja tühi väärtus ei pruugi tingimata võrduma väärtus 159 00:09:06,180 --> 00:09:11,080 võidelda, et läheb saavutata allosas paremal. 160 00:09:11,080 --> 00:09:15,760 Nii me konkreetselt soovite vaadata, kui ma võrdub võrdub d miinus 1 ja j võrdsete 161 00:09:15,760 --> 00:09:19,470 võrdub d miinus 1 - see on juba siis, kui me otsivad allosas paremal 162 00:09:19,470 --> 00:09:22,050 pardal - siis me lihtsalt soovivad jätkata. 163 00:09:22,050 --> 00:09:26,200 Me tahame, et jäta see eriti iteratsiooni loop. 164 00:09:26,200 --> 00:09:31,250 >> Ja nii, kui meil õnnestub saada selle kaudu nested loop, mis tähendab, et 165 00:09:31,250 --> 00:09:34,690 ei olnud plaat, mis oli vales kohas. 166 00:09:34,690 --> 00:09:38,900 Ja me murrame läbi silmuse ja tulla siin, kus me saame naasta tõsi. 167 00:09:38,900 --> 00:09:41,800 Kõik plaadid olid õiged seisukohad ja see tähendab, et kui kasutaja on 168 00:09:41,800 --> 00:09:43,230 mängu võitnud. 169 00:09:43,230 --> 00:09:44,460 Ja ongi kõik. 170 00:09:44,460 --> 00:09:46,550 Minu nimi on Rob Bowden, ja see oli 15. 171 00:09:46,550 --> 00:09:52,726