1 00:00:00,000 --> 00:00:13,070 2 00:00:13,070 --> 00:00:13,715 >> ROB BOWDEN: Ahoj. 3 00:00:13,715 --> 00:00:17,800 Som Rob, a dúfam, že vaša hra pre hru 15. 4 00:00:17,800 --> 00:00:22,040 Teraz, tam sú štyri funkcie, ktoré potrebujete, k realizácii tohto programu - init, 5 00:00:22,040 --> 00:00:24,650 kreslenie, pohyb, a vyhral. 6 00:00:24,650 --> 00:00:27,230 Takže, poďme sa pozrieť na init. 7 00:00:27,230 --> 00:00:32,930 >> Tu vidíme, že prvá vec, my sme robiť, je deklarovať premennú 8 00:00:32,930 --> 00:00:34,600 volal pult. 9 00:00:34,600 --> 00:00:37,620 To bude inicializovaný na d krát d mínus 1. 10 00:00:37,620 --> 00:00:40,200 Nezabudnite, že d je dimenzia z našej rady. 11 00:00:40,200 --> 00:00:43,840 Ako init bude fungovať je, že to bude iterovat nad celým fórom 12 00:00:43,840 --> 00:00:46,050 a ideme na začiatok v ľavom hornom rohu. 13 00:00:46,050 --> 00:00:48,570 >> A povedzme, že sme majú 4 od 4 dosky. 14 00:00:48,570 --> 00:00:51,220 Takže vľavo hore sme chcel povedať, je 15. 15 00:00:51,220 --> 00:00:53,960 A potom sme len tak počítať pomocou dosiek, riekol: 15, 14, 13, 16 00:00:53,960 --> 00:00:58,510 12., 11, 10, 9, 8, 7, 6, 5, 4, a tak ďalej. 17 00:00:58,510 --> 00:01:03,780 Takže vľavo hore, očakávame, že bude d krát d mínus 1, ktoré sa v 4 o 4 18 00:01:03,780 --> 00:01:08,290 Prípad bude 16 mínus 1, ktorý je správne 15. 19 00:01:08,290 --> 00:01:10,885 >> A teraz tu je miesto, kde budeme iterovat nad celým fórom. 20 00:01:10,885 --> 00:01:14,720 A budeme nastaviť každú pozíciu doska k aktuálnej hodnote 21 00:01:14,720 --> 00:01:19,090 náš pult, a potom počítadlo sa deje dekrementovat, takže ďalší 22 00:01:19,090 --> 00:01:22,300 pozície sa dostaneme bude mať Čítač je o jednu menej ako 23 00:01:22,300 --> 00:01:23,690 predchádzajúce pozície. 24 00:01:23,690 --> 00:01:26,970 Takže sme spočiatku mali 15 a decrement počítadlá. 25 00:01:26,970 --> 00:01:30,065 Takže budeme priradiť 14 až Ďalšie pozície, úbytok pult, 26 00:01:30,065 --> 00:01:33,710 a budeme priradená 13, a tak ďalej. 27 00:01:33,710 --> 00:01:37,620 >> A konečne, musíme zvládnuť, že roh prípad, kedy v prípade, že doska má ešte 28 00:01:37,620 --> 00:01:44,450 dimenzie, potom len to, 15, 14, 13, 12, celú cestu až na 3, 2, 1, je 29 00:01:44,450 --> 00:01:46,780 chystá opustiť nás s neriešiteľný doska. 30 00:01:46,780 --> 00:01:49,390 A musíme vymeniť 1 a 2. 31 00:01:49,390 --> 00:01:52,930 Takže, ak d mod 2 sa rovná 0, to je ako budeme kontrolovať 32 00:01:52,930 --> 00:01:54,410 aby zistil, či je to ešte. 33 00:01:54,410 --> 00:01:59,810 Je-li d mod 2 sa rovná 0, potom v riadku d mínus 1, čo je spodný riadok, a 34 00:01:59,810 --> 00:02:05,430 poloha d mínus 2, alebo stĺpec d mínus 2, budeme nastaviť, aby sa na 2, a 35 00:02:05,430 --> 00:02:07,860 stĺpec d mínus 3 sme bude nastavená na 1. 36 00:02:07,860 --> 00:02:12,170 Tak to je len obrátenie, kde 1 a 2 v súčasnej dobe sú. 37 00:02:12,170 --> 00:02:16,270 >> Nakoniec, budeme nastaviť veľmi vpravo dole rovná prázdne, kde 38 00:02:16,270 --> 00:02:20,700 blank bol hash definované v hornej časti, ako 0. 39 00:02:20,700 --> 00:02:26,785 Takže to nebolo nevyhnutne potrebné, pretože to pre sláčiky bude mať 40 00:02:26,785 --> 00:02:30,610 nastavenie vpravo dole na 0, pretože Počítadlo bude prirodzene dosiahne 0.. 41 00:02:30,610 --> 00:02:34,610 Ale to sa spolieha na nás s vedomím, že prázdne bola zatriedená nájsť 0.. 42 00:02:34,610 --> 00:02:38,280 Ak som sa ísť do tohto programu a neskôr Zmena prázdne v hornej časti 100, je 43 00:02:38,280 --> 00:02:39,770 by mala aj naďalej fungovať. 44 00:02:39,770 --> 00:02:43,180 >> Takže je to len uistiť, že vpravo dole je vlastne rovná našej 45 00:02:43,180 --> 00:02:44,870 prázdna hodnota. 46 00:02:44,870 --> 00:02:50,270 Nakoniec, máme dve globálne premenné, tak prázdne i a j prázdne, a vidíme, 47 00:02:50,270 --> 00:02:53,360 tie, vyhlásil na vrchole. 48 00:02:53,360 --> 00:02:56,270 A budeme používať tie dva globálne premenné sledovať 49 00:02:56,270 --> 00:02:59,040 pozície prázdna, takže nemáme je potrebné sa pozrieť cez celé 50 00:02:59,040 --> 00:03:03,890 Doska nájsť prázdne každý čas sa snažíme ťah. 51 00:03:03,890 --> 00:03:08,450 Takže poloha blanku je vždy začnú v pravom dolnom rohu. 52 00:03:08,450 --> 00:03:13,270 Takže je vpravo dole daná Indexy d mínus 1, d mínus 1. 53 00:03:13,270 --> 00:03:14,880 Tak, to je init. 54 00:03:14,880 --> 00:03:17,040 >> Teraz prejdeme k tomu. 55 00:03:17,040 --> 00:03:19,370 Takže remíza bude podobné kde budeme iterovat 56 00:03:19,370 --> 00:03:20,970 nad celým fórom. 57 00:03:20,970 --> 00:03:25,400 A my len chcete vytlačiť hodnotu to je v každej polohe dosky. 58 00:03:25,400 --> 00:03:29,580 Tak tu sme tlačíte hodnotu, ktorá je v každej polohe dosky. 59 00:03:29,580 --> 00:03:32,280 A všimnite si, že robíme -. 60 00:03:32,280 --> 00:03:37,410 A to je len hovorím, že printf bez ohľadu na to, či je to jedna číslica alebo 61 00:03:37,410 --> 00:03:42,010 dve číslice číslo, napriek tomu chceme, aby trvať až dva stĺpce v tlači von, 62 00:03:42,010 --> 00:03:46,290 tak, že ak budeme mať dve číslice a jedno číslice čísla v rovnakom rady, naša 63 00:03:46,290 --> 00:03:49,450 Doska bude stále vyzerať pekne a námestí. 64 00:03:49,450 --> 00:03:54,190 >> Takže chceme urobiť, že pre každú hodnotu na doske, s výnimkou na slepý pokus. 65 00:03:54,190 --> 00:03:58,260 Takže, ak sa miesto v rade sa rovná prázdny, potom sa špecificky 66 00:03:58,260 --> 00:04:01,730 chcete vytlačiť iba podčiarkovník reprezentovať prázdne miesto 67 00:04:01,730 --> 00:04:05,150 bez ohľadu na hodnotu prázdny v skutočnosti je. 68 00:04:05,150 --> 00:04:08,500 >> A konečne, chceme tlačiť von na nový riadok. 69 00:04:08,500 --> 00:04:11,970 Všimnite si, že toto je stále vo vnútri Vonkajší cyklus for, ale mimo 70 00:04:11,970 --> 00:04:13,200 vnútorné slučky for. 71 00:04:13,200 --> 00:04:17,930 Vzhľadom k tomu, vonkajšej slučky for je iterácie cez všetky riadky, a tak to je printf 72 00:04:17,930 --> 00:04:22,130 bude len vytlačiť nový riadok, tak sme prejsť na vytlačenie na ďalší riadok. 73 00:04:22,130 --> 00:04:23,910 A to je pre remízu. 74 00:04:23,910 --> 00:04:27,770 >> Tak, teraz poďme ďalej pohybovať. 75 00:04:27,770 --> 00:04:32,590 Teraz sme sa prejsť krok, na dlaždicu, ktorá užívateľ je zadaný v hre - sú 76 00:04:32,590 --> 00:04:36,360 zadajte dlaždice, ktoré chcete presunúť - a máš vrátiť bool, takže 77 00:04:36,360 --> 00:04:39,300 buď true alebo false v závislosti na či je tento krok bol vlastne 78 00:04:39,300 --> 00:04:43,360 platí - či už dlaždice môžu byť presťahoval sa do prázdneho priestoru. 79 00:04:43,360 --> 00:04:48,340 >> Tak tu sme deklarovať lokálne premenné, tile_1 a tile_j, ktoré budú 80 00:04:48,340 --> 00:04:52,150 podobná blank_i a blank_j, okrem toho, že to bude sledovať 81 00:04:52,150 --> 00:04:54,910 pozície dlaždice. 82 00:04:54,910 --> 00:05:00,370 A teraz, budeme používať blank_i a blank_j a hovoriť v poriadku, tak 83 00:05:00,370 --> 00:05:01,930 tu je prázdne na palube. 84 00:05:01,930 --> 00:05:04,420 >> Teraz je dlaždice nad prázdne? 85 00:05:04,420 --> 00:05:06,210 Je dlaždice na ľavej strane polotovaru? 86 00:05:06,210 --> 00:05:07,420 Je dlaždice na pravej strane prázdne? 87 00:05:07,420 --> 00:05:08,970 Je dlaždice pod prázdna? 88 00:05:08,970 --> 00:05:13,330 Takže, ak je dlaždice v niektorej z tých, pozície, potom vieme, že dlaždice 89 00:05:13,330 --> 00:05:16,390 môže byť presunutá do prázdnej miesto a prázdne možno presunúť na miesto, kde 90 00:05:16,390 --> 00:05:18,240 Doska je v súčasnej dobe. 91 00:05:18,240 --> 00:05:26,400 >> Tak tu hovoríme, či doska na pozíciu blank_i mínus 1 blank_j. 92 00:05:26,400 --> 00:05:31,120 Tak to hovorí, je dlaždice nad súčasnou prázdne? 93 00:05:31,120 --> 00:05:34,350 A ak áno, budeme mať na pamäti, že je pozícia dlaždice. 94 00:05:34,350 --> 00:05:37,870 Doska je v polohe blank_i mínus 1 a blank_j. 95 00:05:37,870 --> 00:05:40,660 Teraz po prvýkrát, máme tiež túto kontrolu tu, tak blank_i je 96 00:05:40,660 --> 00:05:41,760 väčšie ako 0. 97 00:05:41,760 --> 00:05:43,410 >> Prečo chceme robiť, že? 98 00:05:43,410 --> 00:05:47,290 Tak, ak je prázdne, je v hornom rade predstavenstva, potom nechceme, aby 99 00:05:47,290 --> 00:05:51,240 pozrite sa vyššie prázdne dlaždice od je nad hornou nič 100 00:05:51,240 --> 00:05:52,430 rad predstavenstva. 101 00:05:52,430 --> 00:05:55,950 To je, ako by ste mohli skončiť dostať niečo ako poruchy segmentácia alebo 102 00:05:55,950 --> 00:05:59,030 Váš program by mohlo fungovať nečakanými spôsobmi. 103 00:05:59,030 --> 00:06:04,310 Tak, to je uistiť sa, že nie pozrite sa na miestach, ktoré nie sú platné. 104 00:06:04,310 --> 00:06:08,470 >> Teraz budeme robiť to isté pre všetky ďalšie možné kombinácie. 105 00:06:08,470 --> 00:06:13,250 Tak tu, hľadáme nižšie prázdny aby zistil, či je to dlaždice. 106 00:06:13,250 --> 00:06:16,950 A tiež musíme sa uistiť, že sme nie na spodnom riadku, inak by sme 107 00:06:16,950 --> 00:06:18,910 nemali pozerať na dlaždice. 108 00:06:18,910 --> 00:06:25,040 Tu sa budeme pozerať na ľavej strane prázdne, či je to dlaždice. 109 00:06:25,040 --> 00:06:27,860 A mali by sme sa pozerať na ľavej strane keď sme sa v ľavom stĺpci. 110 00:06:27,860 --> 00:06:30,100 A tu sa budeme pozerať na Právo prázdne, a nemali by sme 111 00:06:30,100 --> 00:06:33,340 pozrite sa na pravej strane, ak budeme v pravom stĺpci. 112 00:06:33,340 --> 00:06:37,820 >> Takže, ak žiadna z týchto vecí bola pravda, to znamená, že sa dlaždice nesusedia 113 00:06:37,820 --> 00:06:39,640 na prázdne a môžeme sa vrátiť false. 114 00:06:39,640 --> 00:06:41,230 Tento krok nebol platný. 115 00:06:41,230 --> 00:06:47,010 Ale, ak jeden z nich bola pravda, potom na tento bod, vieme, že tile_i a 116 00:06:47,010 --> 00:06:50,540 tile_j sa rovnajú pozície dlaždice. 117 00:06:50,540 --> 00:06:55,210 A tak môžeme aktualizovať dosku na pozície tile_i a tile_j. 118 00:06:55,210 --> 00:06:59,820 Vieme, že nová hodnota bude prázdna a že pozícia blank_i 119 00:06:59,820 --> 00:07:02,950 blank_j, čo bol pôvodný prázdny - vieme, že dlaždice sa chystá 120 00:07:02,950 --> 00:07:04,030 presunúť tam. 121 00:07:04,030 --> 00:07:07,610 >> Všimnite si, nemáme vlastne musíte urobiť, skutočný odkladacia tu, pretože vieme, 122 00:07:07,610 --> 00:07:09,850 hodnoty, ktoré musia byť vložené do týchto polôh. 123 00:07:09,850 --> 00:07:13,780 Nepotrebujeme dočasné variabilný okolo. 124 00:07:13,780 --> 00:07:16,920 >> Konečne, musíme mať na pamäti, že sme majú naše globálne premenné, ktoré sú 125 00:07:16,920 --> 00:07:18,980 sledovanie polohy z prázdnej. 126 00:07:18,980 --> 00:07:22,780 Takže chceme aktualizovať pozície prázdne, aby tam, kde dlaždice 127 00:07:22,780 --> 00:07:24,190 pôvodne bol. 128 00:07:24,190 --> 00:07:27,680 Nakoniec, vráťte sa pravda, pretože krok bol úspešný. 129 00:07:27,680 --> 00:07:31,110 Úspešne sme vymeniť prázdny s dlaždicou. 130 00:07:31,110 --> 00:07:34,890 >> Dobre, tak sme konečne je potrebné skontrolovať výhry. 131 00:07:34,890 --> 00:07:39,900 Takže, vyhral rovnako vracia bool, kde pravda, bude znamenať, že 132 00:07:39,900 --> 00:07:41,460 užívateľ vyhral hru. 133 00:07:41,460 --> 00:07:43,780 A false naznačuje, že Hra sa stále deje. 134 00:07:43,780 --> 00:07:46,340 Užívateľ nevyhral. 135 00:07:46,340 --> 00:07:52,100 Takže, to bude celkom veľa opak init, kde init, 136 00:07:52,100 --> 00:07:56,920 pamätajte, že sme sa inicializovať dosku na 15, 14, 13, 12, atď. 137 00:07:56,920 --> 00:08:03,000 Vzhľadom k tomu, vyhral, ​​ak chceme skontrolovať, či doska je 1, 2, 3, 4, 5, a tak ďalej. 138 00:08:03,000 --> 00:08:06,600 >> Takže, budeme inicializovať naše čeliť na 1, pretože to je to, čo top 139 00:08:06,600 --> 00:08:08,400 vľavo na doske by mal byť. 140 00:08:08,400 --> 00:08:10,860 A potom ideme na slučke nad celým fórom. 141 00:08:10,860 --> 00:08:13,690 Poďme ignorovať túto podmienku za sekundu. 142 00:08:13,690 --> 00:08:18,410 A tento stav sa len tak Kontrola je rada v tejto polohe 143 00:08:18,410 --> 00:08:20,790 rovná aktuálnej počíta? 144 00:08:20,790 --> 00:08:27,040 Ak tomu tak je, zvýšiť počet tak, aby sa Ďalšie pozície sa pozrieme na jeden vyššia 145 00:08:27,040 --> 00:08:29,690 polohe než sme sa práve teraz. 146 00:08:29,690 --> 00:08:32,700 >> Tak to je, ako sa dostať vľavo hore by mala byť 1. 147 00:08:32,700 --> 00:08:33,950 Zvýšiť počet na 2. 148 00:08:33,950 --> 00:08:35,010 Pozrite sa na ďalšiu pozíciu. 149 00:08:35,010 --> 00:08:35,690 Je to 2? 150 00:08:35,690 --> 00:08:37,659 Ak tomu tak je, zvýšiť počet na 3. 151 00:08:37,659 --> 00:08:39,179 Ďalšie pozície, je to 3? 152 00:08:39,179 --> 00:08:42,440 Ak tomu tak je, zvýšiť počet až 4, a tak ďalej. 153 00:08:42,440 --> 00:08:49,190 Takže ak existuje nejaká pozície na doska, ktorá sa nerovná náš počet, 154 00:08:49,190 --> 00:08:52,640 potom sa chceme vrátiť false, pretože to znamená, že tam je nejaký dlaždice, ktoré je 155 00:08:52,640 --> 00:08:55,490 nie je v správnej polohe. 156 00:08:55,490 --> 00:08:58,810 >> Tak tu, čo sa táto podmienka robí? 157 00:08:58,810 --> 00:09:02,170 No, pamätajte, že je prázdna má ísť na pravom dolnom rohu. 158 00:09:02,170 --> 00:09:06,180 A hodnoty slepého pokusu je nemusí nutne rovnať hodnote 159 00:09:06,180 --> 00:09:11,080 namietajú, že sa dosiahne v pravom dolnom rohu. 160 00:09:11,080 --> 00:09:15,760 Tak sme sa konkrétne chcete skontrolovať, či aj rovná sa rovná d mínus 1 a j rovná 161 00:09:15,760 --> 00:09:19,470 sa rovná d mínus 1 -, ktorý hovorí, či sa sú pri pohľade na v pravom dolnom rohu 162 00:09:19,470 --> 00:09:22,050 doska - potom sme len Chcete pokračovať. 163 00:09:22,050 --> 00:09:26,200 Chceme, aby tento krok preskočiť, najmä iterácie pre sláčiky. 164 00:09:26,200 --> 00:09:31,250 >> A tak, ak sa nám podarí dostať sa cez to vnorené slučky, to znamená, že 165 00:09:31,250 --> 00:09:34,690 nebolo dlaždice, ktorá bola v roku Nesprávna poloha. 166 00:09:34,690 --> 00:09:38,900 A my vymaniť sa z slučky a prísť tu, kde sa môžeme vrátiť true. 167 00:09:38,900 --> 00:09:41,800 Všetky dlaždice sú v správnych pozíciách a to znamená, že užívateľ má 168 00:09:41,800 --> 00:09:43,230 vyhral hru. 169 00:09:43,230 --> 00:09:44,460 A to je všetko. 170 00:09:44,460 --> 00:09:46,550 Volám sa Rob Bowden, a to 15. 171 00:09:46,550 --> 00:09:52,726