1 00:00:00,000 --> 00:00:13,070 2 00:00:13,070 --> 00:00:13,715 >> ROB BOWDEN: Sveiki. 3 00:00:13,715 --> 00:00:17,800 Aš Robas, ir aš tikiuosi, kad jūsų žaidimas žaidimas 15. 4 00:00:17,800 --> 00:00:22,040 Dabar yra keturios funkcijos jums reikia įgyvendinti šią programą - paleidimo, 5 00:00:22,040 --> 00:00:24,650 piešti, perkelti, ir laimėjo. 6 00:00:24,650 --> 00:00:27,230 Taigi, pažvelkime init. 7 00:00:27,230 --> 00:00:32,930 >> Čia mes matome, kad pirmasis dalykas, mes ruošiuosi padaryti tai paskelbti kintamąjį 8 00:00:32,930 --> 00:00:34,600 vadinamas skaitiklis. 9 00:00:34,600 --> 00:00:37,620 Tai bus inicializuoti D karto r minus 1. 10 00:00:37,620 --> 00:00:40,200 Atminkite, kad d yra dimensija Mūsų valdyba. 11 00:00:40,200 --> 00:00:43,840 Kaip init ketina dirbti tai, kas vyksta kad paeiliui valdžia visoje diskusijų lentoje 12 00:00:43,840 --> 00:00:46,050 ir mes ketiname pradėti viršuje kairėje. 13 00:00:46,050 --> 00:00:48,570 >> Ir tegul tiesiog pasakyti, kad mes turi 4 4 lenta. 14 00:00:48,570 --> 00:00:51,220 Taigi viršutiniame kairiajame mes ketina pasakyti 15. 15 00:00:51,220 --> 00:00:53,960 Ir tada mes tik ketina skaičiuoti per lentas, sakydamas: 15, 14, 13, 16 00:00:53,960 --> 00:00:58,510 12, 11, 10, 9, 8, 7, 6, 5, 4, ir tt. 17 00:00:58,510 --> 00:01:03,780 Taigi viršutinis kairysis, mes tikimės, kad d laikai r minus 1, ty į 4 iš 4 18 00:01:03,780 --> 00:01:08,290 atveju bus 16 minus 1, tai yra teisingai 15. 19 00:01:08,290 --> 00:01:10,885 >> Ir dabar čia, kur mes einame pakartoti valdžia visoje diskusijų lentoje. 20 00:01:10,885 --> 00:01:14,720 Ir mes ketiname nustatyti kiekvieno poziciją dabartinės vertės lenta 21 00:01:14,720 --> 00:01:19,090 mūsų skaitiklis, tada kovos vyksta į Mažėja, kad kitą 22 00:01:19,090 --> 00:01:22,300 pozicija pasiekiame teks skaitiklis yra vienas mažesnis nei 23 00:01:22,300 --> 00:01:23,690 ankstesnė pozicija. 24 00:01:23,690 --> 00:01:26,970 Taigi mes iš pradžių turėjo 15 ir Mažėja skaitiklis. 25 00:01:26,970 --> 00:01:30,065 Taigi mes ketiname priskirti 14 į kitą padėtį, Mažėja skaitiklis 26 00:01:30,065 --> 00:01:33,710 ir mes ketiname priskirti 13, ir taip toliau. 27 00:01:33,710 --> 00:01:37,620 >> Galiausiai, mes turime dirbti, kad kampe tuo atveju, kai, jei laive yra net 28 00:01:37,620 --> 00:01:44,450 dimensija, tada tiesiog daro 15, 14, 13, 12, visą kelią iki 3, 2, 1, yra 29 00:01:44,450 --> 00:01:46,780 ketina palikti mums neišsprendžiamos lenta. 30 00:01:46,780 --> 00:01:49,390 Ir mes turime apsikeitimo 1 ir 2. 31 00:01:49,390 --> 00:01:52,930 Taigi, jei d mod 2 lygi 0, tai kaip mes ketiname patikrinti 32 00:01:52,930 --> 00:01:54,410 pamatyti, jei ji dar. 33 00:01:54,410 --> 00:01:59,810 Jei d mod 2 yra lygus 0, tada eilutėje d minuso 1, kuris yra apatinėje eilutėje, ir 34 00:01:59,810 --> 00:02:05,430 pozicija d atėmus 2 arba stulpelis d atėmus 2, mes ketiname nustatyti, kad iki 2, ir 35 00:02:05,430 --> 00:02:07,860 stulpelis r minus 3 mes ketina nustatyti, kad 1. 36 00:02:07,860 --> 00:02:12,170 Taigi, tai tik atbuline eiga, kai 1 ir 2 metu. 37 00:02:12,170 --> 00:02:16,270 >> Galiausiai, mes ketiname nustatyti labai apačioje dešinėje lygi Blankas, kur 38 00:02:16,270 --> 00:02:20,700 Blankas buvo maišos apibrėžta viršuje, kaip 0. 39 00:02:20,700 --> 00:02:26,785 Taigi, tai nebuvo būtina, nes tai už linijos teks 40 00:02:26,785 --> 00:02:30,610 nustatyti apatinę teisę į 0, nes skaitiklis natūraliai pasiekti 0. 41 00:02:30,610 --> 00:02:34,610 Bet tai priklauso nuo mūsų, žinant, kad Blankas buvo maiša rasti 0. 42 00:02:34,610 --> 00:02:38,280 Jei aš einu į šią programą, ir vėliau pakeisti tuščią viršuje su 100, tai 43 00:02:38,280 --> 00:02:39,770 vis tiek turėtų dirbti. 44 00:02:39,770 --> 00:02:43,180 >> Taigi tai yra tiesiog įsitikinkite, kad apačioje dešinėje yra iš tikrųjų prilygsta mūsų 45 00:02:43,180 --> 00:02:44,870 tuščią reikšmę. 46 00:02:44,870 --> 00:02:50,270 Galiausiai, mes turime dvi globalių kintamųjų, taip tuščia aš ir tuščia j, duomenis ir matome 47 00:02:50,270 --> 00:02:53,360 deklaruotas viršuje. 48 00:02:53,360 --> 00:02:56,270 Ir mes ketiname naudoti šiuos du pasaulio kintamieji sekti 49 00:02:56,270 --> 00:02:59,040 pozicija Blankas, kad mes ne reikia ieškoti per visą 50 00:02:59,040 --> 00:03:03,890 lenta rasti tuščią kiekvieną laiko mes stengiamės padaryti žingsnį. 51 00:03:03,890 --> 00:03:08,450 Taigi, iš tuščios vietos visada yra ketina pradėti apačioje dešinėje. 52 00:03:08,450 --> 00:03:13,270 Taigi apačioje dešinėje yra pateiktas indeksai d atėmus 1 d atėmus 1. 53 00:03:13,270 --> 00:03:14,880 Taigi, tai paleidimo. 54 00:03:14,880 --> 00:03:17,040 >> Dabar mes pereiti prie piešti. 55 00:03:17,040 --> 00:03:19,370 Taigi, lygiosiomis bus panašus kur mes ketiname pakartoti 56 00:03:19,370 --> 00:03:20,970 valdžia visoje diskusijų lentoje. 57 00:03:20,970 --> 00:03:25,400 Ir mes tiesiog norime spausdinti vertę tai kiekvienos lentos vietoje. 58 00:03:25,400 --> 00:03:29,580 Taigi čia mes spausdinimo vertę, kad yra kiekvienos lentos vietoje. 59 00:03:29,580 --> 00:03:32,280 Ir pastebėsite, kad mes darome -. 60 00:03:32,280 --> 00:03:37,410 Ir tai tik sakau printf kad nepriklausomai nuo to, ar tai vienas skaitmuo arba 61 00:03:37,410 --> 00:03:42,010 dviejų skaitmenų numeris, mes vis tiek norime, kad ji užima du stulpelius išspausdina, 62 00:03:42,010 --> 00:03:46,290 taip, kad jei mes turime dvi skaitmuo ir vienas skaitmenų numeriai tame pačiame laive, mūsų 63 00:03:46,290 --> 00:03:49,450 lenta vis dar atrodo gražus ir kvadratas. 64 00:03:49,450 --> 00:03:54,190 >> Taigi, mes norime padaryti, kad už kiekvieną vertę valdyboje, išskyrus tuščias. 65 00:03:54,190 --> 00:03:58,260 Taigi, jei yra valdybos pozicija Lygu Blankas, tada mes specialiai 66 00:03:58,260 --> 00:04:01,730 norite spausdinti tik pabraukimo vietoj atstovauti tuščią, 67 00:04:01,730 --> 00:04:05,150 nepriklausomai nuo vertės Blankas iš tikrųjų yra. 68 00:04:05,150 --> 00:04:08,500 >> Galiausiai, mes norime spausdinti iš naujos eilutės. 69 00:04:08,500 --> 00:04:11,970 Atkreipkite dėmesį, kad tai yra dar viduje išorinė už linijos, bet ne 70 00:04:11,970 --> 00:04:13,200 vidinis už linijos. 71 00:04:13,200 --> 00:04:17,930 Kadangi tai išorinė for ciklas Iteracja per visas eilutes ir todėl tai printf yra 72 00:04:17,930 --> 00:04:22,130 vyksta tiesiog atsispausdinti naują liniją, todėl mes pereiti prie atspausdinti kitą eilutę. 73 00:04:22,130 --> 00:04:23,910 Štai ir viskas už lygiosiomis. 74 00:04:23,910 --> 00:04:27,770 >> Taigi, dabar galime pereiti judėti. 75 00:04:27,770 --> 00:04:32,590 Dabar mes pereiname perkelti, plytelių, kad vartotojo įrašytas į žaidimą - jie 76 00:04:32,590 --> 00:04:36,360 įveskite plytelių jie nori judėti - ir jums turėtų grįžti bool, todėl 77 00:04:36,360 --> 00:04:39,300 arba true arba false, priklausomai nuo ar tas žingsnis buvo iš tikrųjų 78 00:04:39,300 --> 00:04:43,360 galioja - ar kad plytelės gali būti persikėlė į tuščią erdvę. 79 00:04:43,360 --> 00:04:48,340 >> Taigi čia mes pareiškiame vietinį kintamąjį, tile_1 ir tile_j, kurie ketina 80 00:04:48,340 --> 00:04:52,150 būti panašus į blank_i ir blank_j, , išskyrus tai, kas vyksta sekti 81 00:04:52,150 --> 00:04:54,910 pozicija plytelių. 82 00:04:54,910 --> 00:05:00,370 Dabar čia mes ketiname naudoti blank_i ir blank_j ir sako viskas gerai, todėl 83 00:05:00,370 --> 00:05:01,930 čia ant lentos tuščias. 84 00:05:01,930 --> 00:05:04,420 >> Dabar yra didesnis tuščias plytelių? 85 00:05:04,420 --> 00:05:06,210 Ar į tuščią kairėje plytelių? 86 00:05:06,210 --> 00:05:07,420 Ar į tuščią dešinę plytelių? 87 00:05:07,420 --> 00:05:08,970 Ar žemiau tuščias plytelių? 88 00:05:08,970 --> 00:05:13,330 Taigi, jei plytelės yra bet kuri iš šių pozicijos, tada mes žinome, kad plytelių 89 00:05:13,330 --> 00:05:16,390 galima perkelti į tuščią vietoje ir Blankas gali būti perkeltas į kur 90 00:05:16,390 --> 00:05:18,240 plytelių metu. 91 00:05:18,240 --> 00:05:26,400 >> Taigi čia mes sakome, jei valdyba padėtyje blank_i atėmus 1 blank_j. 92 00:05:26,400 --> 00:05:31,120 Taigi, tai sakau, plytelių virš dabartinio tuščią? 93 00:05:31,120 --> 00:05:34,350 Ir jei taip, mes ketiname prisiminti tai plytelių pozicija. 94 00:05:34,350 --> 00:05:37,870 Plytelių padėtyje blank_i minus 1 ir blank_j. 95 00:05:37,870 --> 00:05:40,660 dabar pirma, mes taip pat turime šį patikrinimą čia, todėl blank_i yra 96 00:05:40,660 --> 00:05:41,760 didesnis nei 0. 97 00:05:41,760 --> 00:05:43,410 >> Kodėl mes norime padaryti? 98 00:05:43,410 --> 00:05:47,290 Na, jei Blankas yra viršutinėje eilutėje valdybos, tada mes nenorime 99 00:05:47,290 --> 00:05:51,240 žiūrėti aukščiau tuščią plytelių nuo nėra nieko aukščiau viršų 100 00:05:51,240 --> 00:05:52,430 eilė lentos. 101 00:05:52,430 --> 00:05:55,950 Tai kaip galite baigti gauti kažkas panašaus į segmentavimo kaltės ar 102 00:05:55,950 --> 00:05:59,030 jūsų programa gali tiesiog dirbti netikėtų būdų. 103 00:05:59,030 --> 00:06:04,310 Taigi, tai yra užtikrinti, kad mes ne ieškoti vietų, kurios yra neteisingas. 104 00:06:04,310 --> 00:06:08,470 >> Dabar mes ketiname daryti tą patį visi kiti galimi deriniai. 105 00:06:08,470 --> 00:06:13,250 Taigi čia mes ieškome žemiau tuščias pamatyti, jei tai plytelių. 106 00:06:13,250 --> 00:06:16,950 Ir mes taip pat turite įsitikinti, kad mes ne apatinėje eilutėje, kitaip mes 107 00:06:16,950 --> 00:06:18,910 neturėtų ieškoti plytelių. 108 00:06:18,910 --> 00:06:25,040 Čia mes ketiname pažvelgti į kairę Blankas pamatyti, jei ji yra plytelės. 109 00:06:25,040 --> 00:06:27,860 Ir mes neturėtume žiūrėti į kairę jei mes į kairiausias skiltyje. 110 00:06:27,860 --> 00:06:30,100 Ir čia mes ketiname ieškoti teisė Blankas, ir mes neturėtume 111 00:06:30,100 --> 00:06:33,340 žiūrėti į dešinę, jei mes į dešinę nutolusį skiltyje. 112 00:06:33,340 --> 00:06:37,820 >> Taigi, jei nė vienas iš tų dalykų, buvo tiesa, tai reiškia, kad plytelių nebuvo šalia 113 00:06:37,820 --> 00:06:39,640 į tuščias ir galime grįžti klaidinga. 114 00:06:39,640 --> 00:06:41,230 Žingsnis buvo neteisingas. 115 00:06:41,230 --> 00:06:47,010 Tačiau, jei viena iš jų buvo tiesa, tai bent Šiuo metu, mes žinome, kad tile_i ir 116 00:06:47,010 --> 00:06:50,540 tile_j yra lygūs pozicija plytelių. 117 00:06:50,540 --> 00:06:55,210 Ir taip, mes galime atnaujinti lenta pozicijos tile_i ir tile_j. 118 00:06:55,210 --> 00:06:59,820 Mes žinome, nauja reikšmė bus tuščia ir kad padėtis blank_i 119 00:06:59,820 --> 00:07:02,950 blank_j, kuris buvo originalas tuščias - mes žinome, plytelių ketina 120 00:07:02,950 --> 00:07:04,030 perkelti ten. 121 00:07:04,030 --> 00:07:07,610 >> Atkreipkite dėmesį, mes ne iš tikrųjų turi daryti nekilnojamojo apsikeitimo čia, nes mes žinome, 122 00:07:07,610 --> 00:07:09,850 vertės, kurios turi būti įtrauktas į šias pareigas. 123 00:07:09,850 --> 00:07:13,780 Mums nereikia laikinas kintamasis aplink. 124 00:07:13,780 --> 00:07:16,920 >> Galiausiai, mes turime prisiminti, kad mes turime globalių kintamųjų, kurie 125 00:07:16,920 --> 00:07:18,980 sekti padėtį ruošinio. 126 00:07:18,980 --> 00:07:22,780 Taigi, mes norime atnaujinti poziciją Blankas būti ten, kur plytelės 127 00:07:22,780 --> 00:07:24,190 iš pradžių buvo. 128 00:07:24,190 --> 00:07:27,680 Galiausiai, mes grąžina true, nes žingsnis buvo sėkmingas. 129 00:07:27,680 --> 00:07:31,110 Mes sėkmingai sukeisti Blankas su plytelių. 130 00:07:31,110 --> 00:07:34,890 >> Viskas gerai, taip pagaliau mes reikia patikrinti vonų. 131 00:07:34,890 --> 00:07:39,900 Taigi, juodieji panašiai grąžina bool kur tiesa ketina rodo, kad 132 00:07:39,900 --> 00:07:41,460 vartotojas laimėjo žaidimą. 133 00:07:41,460 --> 00:07:43,780 Ir neteisinga yra tai rodo, kad Žaidimas vis dar vyksta. 134 00:07:43,780 --> 00:07:46,340 Vartotojas dar laimėjo. 135 00:07:46,340 --> 00:07:52,100 Taigi, tai bus gana daug iš init priešais, kur init 136 00:07:52,100 --> 00:07:56,920 atminkite, kad mes inicijuoti lenta 15, 14, 13, 12, kt. 137 00:07:56,920 --> 00:08:03,000 Kadangi laimėjo, mes norime patikrinti, ar taryba yra 1, 2, 3, 4, 5, ir taip toliau. 138 00:08:03,000 --> 00:08:06,600 >> Taigi, mes ketiname inicijuoti mūsų kovoti su 1, nes tai, ką viršuje 139 00:08:06,600 --> 00:08:08,400 kairėje valdybos turėtų būti. 140 00:08:08,400 --> 00:08:10,860 Ir tada mes ketiname kilpa valdžia visoje diskusijų lentoje. 141 00:08:10,860 --> 00:08:13,690 Leiskite ignoruoti šią sąlygą sekundę. 142 00:08:13,690 --> 00:08:18,410 Ir ši sąlyga yra tik ketina patikrinimas yra šioje padėtyje lenta 143 00:08:18,410 --> 00:08:20,790 lygi dabartinei skaičiaus? 144 00:08:20,790 --> 00:08:27,040 Jei taip, prieaugio skaičius, kad kitą padėtį pažvelgtume vienas didesnis 145 00:08:27,040 --> 00:08:29,690 nei padėtyje esame dabar. 146 00:08:29,690 --> 00:08:32,700 >> Štai kaip mes viršuje, kairėje turėtų būti 1. 147 00:08:32,700 --> 00:08:33,950 Prieaugio skaičiavimą iki 2. 148 00:08:33,950 --> 00:08:35,010 Pažvelkite į kitą poziciją. 149 00:08:35,010 --> 00:08:35,690 Ar tai 2? 150 00:08:35,690 --> 00:08:37,659 Jei taip, prieaugio skaičiavimą iki 3. 151 00:08:37,659 --> 00:08:39,179 Kitas pozicija, tai yra 3? 152 00:08:39,179 --> 00:08:42,440 Jei taip, prieaugio skaičiavimą 4, ir pan. 153 00:08:42,440 --> 00:08:49,190 Taigi, jei yra bet kokia padėtis valdyba, kuri nėra lygi mūsų skaičius, 154 00:08:49,190 --> 00:08:52,640 tada mes norime return false, nes, kad tai ten kai plytelių, kad yra 155 00:08:52,640 --> 00:08:55,490 ne teisingoje padėtyje. 156 00:08:55,490 --> 00:08:58,810 >> Taigi čia, kas yra ši sąlyga darai? 157 00:08:58,810 --> 00:09:02,170 Na, atminkite, kad tuščias yra turėtų eiti į apačioje dešinėje. 158 00:09:02,170 --> 00:09:06,180 Ir tuščiasis vert gali ne nebūtinai yra lygūs vertę 159 00:09:06,180 --> 00:09:11,080 kovoti, kad bus pasiektas apačioje dešinėje. 160 00:09:11,080 --> 00:09:15,760 Taigi, mes specialiai norite patikrinti, jei aš Lygu lygu r minus 1 ir j lygu 161 00:09:15,760 --> 00:09:19,470 Lygu r atėmus 1 - kuris sako, jei mes žiūrite į apatiniame dešiniajame 162 00:09:19,470 --> 00:09:22,050 lenta - tada mes tiesiog norite tęsti. 163 00:09:22,050 --> 00:09:26,200 Mes norime, kad praleisti tai ypač pasikartojančių už kilpos. 164 00:09:26,200 --> 00:09:31,250 >> Ir taip, jei mums pavyks gauti per šį įdėtos už kilpos, tai reiškia, kad 165 00:09:31,250 --> 00:09:34,690 nebuvo plytelių, kad buvo neteisinga pozicija. 166 00:09:34,690 --> 00:09:38,900 Ir mes išeiti iš kilpos ir ateiti čia, kur mes galime grįžti tiesa. 167 00:09:38,900 --> 00:09:41,800 Visos plytelės buvo teisingas pozicijas ir tai reiškia, kad vartotojas turi 168 00:09:41,800 --> 00:09:43,230 laimėjo žaidimą. 169 00:09:43,230 --> 00:09:44,460 Štai ir viskas. 170 00:09:44,460 --> 00:09:46,550 Mano vardas yra Rob Bowden, ir tai buvo 15. 171 00:09:46,550 --> 00:09:52,726