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 Jsem Rob, a doufám, že vaše hra pro hru 15. 4 00:00:17,800 --> 00:00:22,040 Nyní, tam jsou čtyři funkce, které potřebujete, k realizaci tohoto programu - init, 5 00:00:22,040 --> 00:00:24,650 kreslení, pohyb, a vyhrál. 6 00:00:24,650 --> 00:00:27,230 Takže, pojďme se podívat na init. 7 00:00:27,230 --> 00:00:32,930 >> Zde vidíme, že první věc, my jsme dělat, je deklarovat proměnnou 8 00:00:32,930 --> 00:00:34,600 volal pult. 9 00:00:34,600 --> 00:00:37,620 To bude inicializován na d krát d minus 1. 10 00:00:37,620 --> 00:00:40,200 Nezapomeňte, že d je dimenze z naší rady. 11 00:00:40,200 --> 00:00:43,840 Jak init bude fungovat je, že to bude iterovat nad celým fórem 12 00:00:43,840 --> 00:00:46,050 a jdeme na začátek v levém horním rohu. 13 00:00:46,050 --> 00:00:48,570 >> A řekněme, že jsme mají 4 od 4 desky. 14 00:00:48,570 --> 00:00:51,220 Takže vlevo nahoře jsme chtěl říct, je 15. 15 00:00:51,220 --> 00:00:53,960 A pak jsme jen tak počítat pomocí desek, řka: 15, 14, 13, 16 00:00:53,960 --> 00:00:58,510 12., 11, 10, 9, 8, 7, 6, 5, 4, a tak dále. 17 00:00:58,510 --> 00:01:03,780 Takže vlevo nahoře, očekáváme, že bude d krát d minus 1, které se v 4 o 4 18 00:01:03,780 --> 00:01:08,290 Případ bude 16 mínus 1, který je správně 15. 19 00:01:08,290 --> 00:01:10,885 >> A teď tady je místo, kde budeme iterovat nad celým fórem. 20 00:01:10,885 --> 00:01:14,720 A budeme nastavit každou pozici deska k aktuální hodnotě 21 00:01:14,720 --> 00:01:19,090 náš pult, a pak počítadlo se děje dekrementovat, takže další 22 00:01:19,090 --> 00:01:22,300 pozice se dostaneme bude mít Čítač je o jednu menší než 23 00:01:22,300 --> 00:01:23,690 předchozí pozice. 24 00:01:23,690 --> 00:01:26,970 Takže jsme zpočátku měli 15 a decrement čítače. 25 00:01:26,970 --> 00:01:30,065 Takže budeme přiřadit 14 až Další pozice, úbytek pult, 26 00:01:30,065 --> 00:01:33,710 a budeme přiřazena 13, a tak dále. 27 00:01:33,710 --> 00:01:37,620 >> A konečně, musíme zvládnout, že roh případ, kdy v případě, že deska má ještě 28 00:01:37,620 --> 00:01:44,450 dimenze, pak jen to, 15, 14, 13, 12, celou cestu až na 3, 2, 1, je 29 00:01:44,450 --> 00:01:46,780 chystá opustit nás s neřešitelný deska. 30 00:01:46,780 --> 00:01:49,390 A musíme vyměnit 1 a 2. 31 00:01:49,390 --> 00:01:52,930 Takže, pokud d mod 2 se rovná 0, to je jak budeme kontrolovat 32 00:01:52,930 --> 00:01:54,410 aby zjistil, jestli je to ještě. 33 00:01:54,410 --> 00:01:59,810 Je-li d mod 2 se rovná 0, pak v řádku d minus 1, což je spodní řádek, a 34 00:01:59,810 --> 00:02:05,430 poloha d minus 2, nebo sloupec d minus 2, budeme nastavit, aby se na 2, a 35 00:02:05,430 --> 00:02:07,860 sloupec d minus 3 jsme bude nastavena na 1. 36 00:02:07,860 --> 00:02:12,170 Tak to je jen obrácení, kde 1 a 2 v současné době jsou. 37 00:02:12,170 --> 00:02:16,270 >> Nakonec, budeme nastavit velmi vpravo dole rovná prázdné, kde 38 00:02:16,270 --> 00:02:20,700 blank byl hash definováno v horní části, jako 0. 39 00:02:20,700 --> 00:02:26,785 Takže to nebylo nezbytně nutné, protože to pro smyčce bude mít 40 00:02:26,785 --> 00:02:30,610 nastavení vpravo dole na 0, protože Počítadlo bude přirozeně dosáhne 0.. 41 00:02:30,610 --> 00:02:34,610 Ale to se spoléhá na nás s vědomím, že prázdné byla zatříděna najít 0.. 42 00:02:34,610 --> 00:02:38,280 Pokud jsem se jít do tohoto programu a později Změna prázdné v horní části 100, je 43 00:02:38,280 --> 00:02:39,770 by měla i nadále fungovat. 44 00:02:39,770 --> 00:02:43,180 >> Takže je to jen ujistit, že vpravo dole je vlastně rovná naší 45 00:02:43,180 --> 00:02:44,870 prázdná hodnota. 46 00:02:44,870 --> 00:02:50,270 Nakonec, máme dvě globální proměnné, tak prázdné i a j prázdné, a vidíme, 47 00:02:50,270 --> 00:02:53,360 ty, prohlásil na vrcholu. 48 00:02:53,360 --> 00:02:56,270 A budeme používat ty dva globální proměnné sledovat 49 00:02:56,270 --> 00:02:59,040 pozice prázdná, takže nemáme je třeba se podívat přes celé 50 00:02:59,040 --> 00:03:03,890 Deska najít prázdné každý čas se snažíme tah. 51 00:03:03,890 --> 00:03:08,450 Takže poloha blanku je vždy začnou v pravém dolním rohu. 52 00:03:08,450 --> 00:03:13,270 Takže je vpravo dole dána Indexy d minus 1, d minus 1. 53 00:03:13,270 --> 00:03:14,880 Tak, to je init. 54 00:03:14,880 --> 00:03:17,040 >> Nyní přejdeme 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órem. 57 00:03:20,970 --> 00:03:25,400 A my jen chcete vytisknout hodnotu to je v každé poloze desky. 58 00:03:25,400 --> 00:03:29,580 Tak tady jsme tisknete hodnotu, která je v každé poloze desky. 59 00:03:29,580 --> 00:03:32,280 A všimněte si, že děláme -. 60 00:03:32,280 --> 00:03:37,410 A to je jen říkám, že printf bez ohledu na to, jestli je to jedna číslice nebo 61 00:03:37,410 --> 00:03:42,010 dvě číslice číslo, přesto chceme, aby trvat až dva sloupce v tisku ven, 62 00:03:42,010 --> 00:03:46,290 tak, že pokud budeme mít dvě číslice a jedno číslice čísla ve stejném rady, naše 63 00:03:46,290 --> 00:03:49,450 Deska bude stále vypadat hezky a náměstí. 64 00:03:49,450 --> 00:03:54,190 >> Takže chceme udělat, že pro každou hodnotu na desce, s výjimkou na slepý pokus. 65 00:03:54,190 --> 00:03:58,260 Takže, pokud se místo v radě se rovná prázdný, pak se specificky 66 00:03:58,260 --> 00:04:01,730 chcete vytisknout pouze podtržítko reprezentovat prázdné místo 67 00:04:01,730 --> 00:04:05,150 bez ohledu na hodnotu prázdný ve skutečnosti je. 68 00:04:05,150 --> 00:04:08,500 >> A konečně, chceme tisknout ven na nový řádek. 69 00:04:08,500 --> 00:04:11,970 Všimněte si, že toto je stále uvnitř Vnější cyklus for, ale mimo 70 00:04:11,970 --> 00:04:13,200 vnitřní smyčky for. 71 00:04:13,200 --> 00:04:17,930 Vzhledem k tomu, vnější smyčky for je iterace přes všechny řádky, a tak to je printf 72 00:04:17,930 --> 00:04:22,130 bude jen vytisknout nový řádek, tak jsme přejít na vytištění na další řádek. 73 00:04:22,130 --> 00:04:23,910 A to je pro remízu. 74 00:04:23,910 --> 00:04:27,770 >> Tak, teď pojďme dál pohybovat. 75 00:04:27,770 --> 00:04:32,590 Teď jsme se projít krok, na dlaždici, která uživatel je zadán ve hře - jsou 76 00:04:32,590 --> 00:04:36,360 zadejte dlaždice, které chcete přesunout - a máš vrátit bool, takže 77 00:04:36,360 --> 00:04:39,300 buď true nebo false v závislosti na zda je tento krok byl vlastně 78 00:04:39,300 --> 00:04:43,360 platí - ať už dlaždice mohou být přestěhoval se do prázdného prostoru. 79 00:04:43,360 --> 00:04:48,340 >> Tak tady jsme deklarovat lokální proměnné, tile_1 a tile_j, které budou 80 00:04:48,340 --> 00:04:52,150 podobná blank_i a blank_j, kromě toho, že to bude sledovat 81 00:04:52,150 --> 00:04:54,910 pozice dlaždice. 82 00:04:54,910 --> 00:05:00,370 A teď, budeme používat blank_i a blank_j a říkat v pořádku, tak 83 00:05:00,370 --> 00:05:01,930 tady je prázdné na palubě. 84 00:05:01,930 --> 00:05:04,420 >> Nyní je dlaždice nad prázdné? 85 00:05:04,420 --> 00:05:06,210 Je dlaždice na levé straně polotovaru? 86 00:05:06,210 --> 00:05:07,420 Je dlaždice na pravé straně prázdné? 87 00:05:07,420 --> 00:05:08,970 Je dlaždice pod prázdná? 88 00:05:08,970 --> 00:05:13,330 Takže, je-li dlaždice v některé z těch, pozice, pak víme, že dlaždice 89 00:05:13,330 --> 00:05:16,390 může být přesunuta do prázdné místo a prázdné lze přesunout na místo, kde 90 00:05:16,390 --> 00:05:18,240 Deska je v současné době. 91 00:05:18,240 --> 00:05:26,400 >> Tak tady říkáme, jestli deska na pozici blank_i minus 1 blank_j. 92 00:05:26,400 --> 00:05:31,120 Tak to říká, je dlaždice nad současnou prázdné? 93 00:05:31,120 --> 00:05:34,350 A pokud ano, budeme mít na paměti, že je pozice dlaždice. 94 00:05:34,350 --> 00:05:37,870 Deska je v poloze blank_i minus 1 a blank_j. 95 00:05:37,870 --> 00:05:40,660 Nyní poprvé, máme také tuto kontrolu tady, tak blank_i je 96 00:05:40,660 --> 00:05:41,760 větší než 0. 97 00:05:41,760 --> 00:05:43,410 >> Proč chceme dělat, že? 98 00:05:43,410 --> 00:05:47,290 Tak, je-li prázdné, je v horní řadě představenstva, pak nechceme, aby 99 00:05:47,290 --> 00:05:51,240 podívejte se výše prázdné dlaždice od je nad horní nic 100 00:05:51,240 --> 00:05:52,430 řada představenstva. 101 00:05:52,430 --> 00:05:55,950 To je, jak byste mohli skončit dostat něco jako poruchy segmentace nebo 102 00:05:55,950 --> 00:05:59,030 Váš program by mohlo fungovat nečekanými způsoby. 103 00:05:59,030 --> 00:06:04,310 Tak, to je ujistit se, že ne podívejte se na místech, které nejsou platné. 104 00:06:04,310 --> 00:06:08,470 >> Teď budeme dělat totéž pro všechny další možné kombinace. 105 00:06:08,470 --> 00:06:13,250 Tak tady, hledáme níže prázdný aby zjistil, jestli je to dlaždice. 106 00:06:13,250 --> 00:06:16,950 A také musíme se ujistit, že jsme ne na spodním řádku, jinak bychom 107 00:06:16,950 --> 00:06:18,910 neměli dívat na dlaždice. 108 00:06:18,910 --> 00:06:25,040 Zde se budeme dívat na levé straně prázdné, zda je to dlaždice. 109 00:06:25,040 --> 00:06:27,860 A měli bychom se dívat na levé straně když jsme se v levém sloupci. 110 00:06:27,860 --> 00:06:30,100 A tady se budeme dívat na Právo prázdné, a neměli bychom 111 00:06:30,100 --> 00:06:33,340 podívejte se na pravé straně, pokud budeme v pravém sloupci. 112 00:06:33,340 --> 00:06:37,820 >> Takže, pokud žádná z těchto věcí byla pravda, to znamená, že se dlaždice nesousedí 113 00:06:37,820 --> 00:06:39,640 na prázdné a můžeme se vrátit false. 114 00:06:39,640 --> 00:06:41,230 Tento krok nebyl platný. 115 00:06:41,230 --> 00:06:47,010 Ale, jestliže jeden z nich byla pravda, pak na tento bod, víme, že tile_i a 116 00:06:47,010 --> 00:06:50,540 tile_j se rovnají pozice dlaždice. 117 00:06:50,540 --> 00:06:55,210 A tak můžeme aktualizovat desku na pozice tile_i a tile_j. 118 00:06:55,210 --> 00:06:59,820 Víme, že nová hodnota bude prázdná a že pozice blank_i 119 00:06:59,820 --> 00:07:02,950 blank_j, což byl původní prázdný - víme, že dlaždice se chystá 120 00:07:02,950 --> 00:07:04,030 přesunout tam. 121 00:07:04,030 --> 00:07:07,610 >> Všimněte si, nemáme vlastně musíte udělat, skutečný odkládací tady, protože víme, 122 00:07:07,610 --> 00:07:09,850 hodnoty, které musí být vloženy do těchto poloh. 123 00:07:09,850 --> 00:07:13,780 Nepotřebujeme dočasné variabilní kolem. 124 00:07:13,780 --> 00:07:16,920 >> Konečně, musíme mít na paměti, že jsme mají naše globální proměnné, které jsou 125 00:07:16,920 --> 00:07:18,980 sledování polohy z prázdné. 126 00:07:18,980 --> 00:07:22,780 Takže chceme aktualizovat pozice prázdné, aby tam, kde dlaždice 127 00:07:22,780 --> 00:07:24,190 původně byl. 128 00:07:24,190 --> 00:07:27,680 Nakonec, vraťte se pravda, protože krok byl úspěšný. 129 00:07:27,680 --> 00:07:31,110 Úspěšně jsme vyměnit prázdný s dlaždicí. 130 00:07:31,110 --> 00:07:34,890 >> Dobře, tak jsme konečně je třeba zkontrolovat výhry. 131 00:07:34,890 --> 00:07:39,900 Takže, vyhrál stejně vrací bool, kde pravda, bude znamenat, že 132 00:07:39,900 --> 00:07:41,460 uživatel vyhrál hru. 133 00:07:41,460 --> 00:07:43,780 A false naznačuje, že Hra se stále děje. 134 00:07:43,780 --> 00:07:46,340 Uživatel nevyhrál. 135 00:07:46,340 --> 00:07:52,100 Takže, to bude docela hodně opak init, kde init, 136 00:07:52,100 --> 00:07:56,920 pamatujte, že jsme se inicializovat desku na 15, 14, 13, 12, atd.. 137 00:07:56,920 --> 00:08:03,000 Vzhledem k tomu, vyhrál, chceme-li zkontrolovat, zda deska je 1, 2, 3, 4, 5, a tak dále. 138 00:08:03,000 --> 00:08:06,600 >> Takže, budeme inicializovat naše čelit na 1, protože to je to, co top 139 00:08:06,600 --> 00:08:08,400 vlevo na desce by měl být. 140 00:08:08,400 --> 00:08:10,860 A pak jdeme na smyčce nad celým fórem. 141 00:08:10,860 --> 00:08:13,690 Pojďme ignorovat tuto podmínku za vteřinu. 142 00:08:13,690 --> 00:08:18,410 A tento stav se jen tak Kontrola je rada v této poloze 143 00:08:18,410 --> 00:08:20,790 rovna aktuální počítá? 144 00:08:20,790 --> 00:08:27,040 Pokud tomu tak je, zvýšit počet tak, aby se Další pozice se podíváme na jeden vyšší 145 00:08:27,040 --> 00:08:29,690 poloze než jsme se právě teď. 146 00:08:29,690 --> 00:08:32,700 >> Tak to je, jak se dostat vlevo nahoře by měla být 1. 147 00:08:32,700 --> 00:08:33,950 Zvýšit počet na 2. 148 00:08:33,950 --> 00:08:35,010 Podívejte se na další pozici. 149 00:08:35,010 --> 00:08:35,690 Je to 2? 150 00:08:35,690 --> 00:08:37,659 Pokud tomu tak je, zvýšit počet na 3. 151 00:08:37,659 --> 00:08:39,179 Další pozice, je to 3? 152 00:08:39,179 --> 00:08:42,440 Pokud tomu tak je, zvýšit počet až 4, a tak dále. 153 00:08:42,440 --> 00:08:49,190 Takže pokud existuje nějaká pozice na deska, která se nerovná náš počet, 154 00:08:49,190 --> 00:08:52,640 pak se chceme vrátit false, protože to znamená, že tam je nějaký dlaždice, které je 155 00:08:52,640 --> 00:08:55,490 není ve správné poloze. 156 00:08:55,490 --> 00:08:58,810 >> Tak tady, co se tato podmínka dělá? 157 00:08:58,810 --> 00:09:02,170 No, pamatujte, že je prázdná má jít na pravém dolním rohu. 158 00:09:02,170 --> 00:09:06,180 A hodnota slepého vzorku je nemusí nutně rovnat hodnotě 159 00:09:06,180 --> 00:09:11,080 namítají, že bude dosaženo v pravém dolním rohu. 160 00:09:11,080 --> 00:09:15,760 Tak jsme se konkrétně chcete zkontrolovat, zda i rovná se rovná d minus 1 a j rovná 161 00:09:15,760 --> 00:09:19,470 se rovná d minus 1 -, který říká, zda se jsou při pohledu na v pravém dolním rohu 162 00:09:19,470 --> 00:09:22,050 deska - pak jsme jen Chcete pokračovat. 163 00:09:22,050 --> 00:09:26,200 Chceme, aby tento krok přeskočit, zejména iterace pro smyčce. 164 00:09:26,200 --> 00:09:31,250 >> A tak, pokud se nám podaří dostat se přes to vnořené smyčky, to znamená, že 165 00:09:31,250 --> 00:09:34,690 nebylo dlaždice, která byla v roce Nesprávná poloha. 166 00:09:34,690 --> 00:09:38,900 A my vymanit se z smyčky a přijít tady, kde se můžeme vrátit true. 167 00:09:38,900 --> 00:09:41,800 Všechny dlaždice jsou ve správných pozicích a to znamená, že uživatel má 168 00:09:41,800 --> 00:09:43,230 vyhrál hru. 169 00:09:43,230 --> 00:09:44,460 A to je vše. 170 00:09:44,460 --> 00:09:46,550 Jmenuji se Rob Bowden, a to 15. 171 00:09:46,550 --> 00:09:52,726