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 Unë jam Rob, dhe unë shpresoj tuaj lojë për lojë të 15. 4 00:00:17,800 --> 00:00:22,040 Tani, ka katër funksione që ju duhet për të zbatuar në këtë program - init, 5 00:00:22,040 --> 00:00:24,650 të nxjerrë, të lëvizë, dhe fitoi. 6 00:00:24,650 --> 00:00:27,230 Pra, le të shohim në init. 7 00:00:27,230 --> 00:00:32,930 >> Këtu, ne shohim se gjëja e parë që jeni do të bëni është të deklarojë një ndryshore 8 00:00:32,930 --> 00:00:34,600 quajtur counter. 9 00:00:34,600 --> 00:00:37,620 Ajo do të jetë initialized të d herë d minus 1. 10 00:00:37,620 --> 00:00:40,200 Mos harroni se d është dimensioni e bordit tonë. 11 00:00:40,200 --> 00:00:43,840 Si init do të punojë është ajo që po ndodh të iterate mbi gjithë forumin 12 00:00:43,840 --> 00:00:46,050 dhe ne jemi duke shkuar për të filluar në të majtë të lartë. 13 00:00:46,050 --> 00:00:48,570 >> Dhe le të them vetëm ne kanë një 4 nga 4 bordit. 14 00:00:48,570 --> 00:00:51,220 Pra, top la ne jemi do të thonë se është 15. 15 00:00:51,220 --> 00:00:53,960 Dhe atëherë ne jemi vetëm do të mbështetet përmes bordeve, duke thënë: 15, 14, 13, 16 00:00:53,960 --> 00:00:58,510 12, 11, 10, 9, 8, 7, 6, 5, 4, etj. 17 00:00:58,510 --> 00:01:03,780 Pra i majtë lartë, ne presim që të jetë d herë d minus 1, e cila ne pozicionin 4 nga 4 18 00:01:03,780 --> 00:01:08,290 Rasti do të jetë minus 16 1, e cila është e saktë 15. 19 00:01:08,290 --> 00:01:10,885 >> Dhe tani këtu është ku ne jemi duke shkuar për të iterate mbi gjithë forumin. 20 00:01:10,885 --> 00:01:14,720 Dhe ne jemi duke shkuar për të vendosur çdo pozicion në bordit të vlerës aktuale të 21 00:01:14,720 --> 00:01:19,090 counter tonë, dhe pastaj kundër po shkon në pakësim, në mënyrë që e ardhshme 22 00:01:19,090 --> 00:01:22,300 Pozita të arrijmë do të ketë counter jetë një më pak se 23 00:01:22,300 --> 00:01:23,690 pozicioni i mëparshëm. 24 00:01:23,690 --> 00:01:26,970 Pra, ne fillim kishte 15 dhe pakësim counter. 25 00:01:26,970 --> 00:01:30,065 Pra, atëherë ne do të caktojë 14 të pozicion tjetër, pakësim counter, 26 00:01:30,065 --> 00:01:33,710 dhe ne jemi duke shkuar për të caktuar 13, dhe kështu me radhë. 27 00:01:33,710 --> 00:01:37,620 >> Së fundi, ne kemi nevojë për të trajtuar atë qoshe rast ku, në qoftë se bordi ka një edhe 28 00:01:37,620 --> 00:01:44,450 dimension, atëherë vetëm duke bërë 15, 14, 13, 12, të gjithë mënyrë deri në 3, 2, 1, është 29 00:01:44,450 --> 00:01:46,780 do të na lënë me një bord pazgjedhshëm. 30 00:01:46,780 --> 00:01:49,390 Dhe ne duhet të bie në ujdi me 1 dhe 2. 31 00:01:49,390 --> 00:01:52,930 Pra, nëse d mod 2 është e barabartë me 0, kjo është se si ne jemi duke shkuar për të kontrolluar 32 00:01:52,930 --> 00:01:54,410 për të parë nëse kjo është edhe. 33 00:01:54,410 --> 00:01:59,810 Nëse d mod 2 është e barabartë me 0, atëherë në rresht d minus 1, e cila është rresht poshtme, dhe 34 00:01:59,810 --> 00:02:05,430 Pozicioni d minus 2, ose kolona d minus 2, ne jemi duke shkuar për të vendosur se në 2, dhe 35 00:02:05,430 --> 00:02:07,860 Kolona d minus 3 ne jemi duke shkuar për të vendosur në 1. 36 00:02:07,860 --> 00:02:12,170 Pra kjo na përmbysur ku 1 dhe 2 janë aktualisht. 37 00:02:12,170 --> 00:02:16,270 >> Së fundi, ne jemi duke shkuar për të vendosur shumë të fund e drejta e barabartë me bosh, ku 38 00:02:16,270 --> 00:02:20,700 blank ka qenë hash përcaktuar në majë si 0. 39 00:02:20,700 --> 00:02:26,785 Pra, kjo nuk ishte e nevojshme, pasi që kjo për lak do të ketë 40 00:02:26,785 --> 00:02:30,610 vendosur fund të drejtën për 0, që nga counter natyrisht do të arrijë 0. 41 00:02:30,610 --> 00:02:34,610 Por që mbështetet mbi ne duke e ditur se blank u sheshuar për të gjetur një 0. 42 00:02:34,610 --> 00:02:38,280 Nëse unë shkoj në këtë program dhe më vonë ndryshojë bosh në majë të 100, ajo 43 00:02:38,280 --> 00:02:39,770 duhet ende punë. 44 00:02:39,770 --> 00:02:43,180 >> Pra, kjo është vetëm duke u siguruar se e drejtë fund të fundit është e barabartë me të vërtetë tonë 45 00:02:43,180 --> 00:02:44,870 Vlera bosh. 46 00:02:44,870 --> 00:02:50,270 Së fundi, ne kemi dy variabla globale, kështu që unë bosh dhe j bosh, dhe ne shohim 47 00:02:50,270 --> 00:02:53,360 ato të deklaruara në krye. 48 00:02:53,360 --> 00:02:56,270 Dhe ne jemi duke shkuar për të përdorur këto dy globale variablat për të mbajtur gjurmët e 49 00:02:56,270 --> 00:02:59,040 Pozita e bosh, në mënyrë që ne të mos bëjmë duhet të shohim nëpër të gjithë 50 00:02:59,040 --> 00:03:03,890 bordit për të gjetur bosh çdo të vetme herë që ne të përpiqemi për të bërë një lëvizje. 51 00:03:03,890 --> 00:03:08,450 Pra, pozita e bosh gjithmonë është do të fillojë në fund të drejtën. 52 00:03:08,450 --> 00:03:13,270 Pra, e drejta e poshtme është dhënë nga Indekset 1 d minus 1, d minus. 53 00:03:13,270 --> 00:03:14,880 Pra, kjo është init. 54 00:03:14,880 --> 00:03:17,040 >> Tani ne shkojmë për të nxjerrë. 55 00:03:17,040 --> 00:03:19,370 Pra, barazim do të jetë i ngjashëm ku ne jemi duke shkuar për të iterate 56 00:03:19,370 --> 00:03:20,970 mbi gjithë forumin. 57 00:03:20,970 --> 00:03:25,400 Dhe ne vetëm duam të shtypura vlerën kjo është në çdo pozicion të bordit. 58 00:03:25,400 --> 00:03:29,580 Pra këtu, ne jemi shtypjen e vlerës që është në çdo pozicion te bordi. 59 00:03:29,580 --> 00:03:32,280 Dhe vini re se ne jemi duke bërë -. 60 00:03:32,280 --> 00:03:37,410 Dhe kjo është vetëm duke u thënë se printf pa marrë parasysh nëse është një shifër një ose 61 00:03:37,410 --> 00:03:42,010 numër dy shifror, ne ende duan që ajo të marrë dy kolona në shtyp jashtë, 62 00:03:42,010 --> 00:03:46,290 kështu që në qoftë se ne kemi dy shifra dhe një numra shifror në të njëjtin bord, tona 63 00:03:46,290 --> 00:03:49,450 Bordi do të vazhdojë të duken bukur dhe katrore. 64 00:03:49,450 --> 00:03:54,190 >> Pra, ne duam të bëjmë që për çdo vlerë në tabelën, përveç bosh. 65 00:03:54,190 --> 00:03:58,260 Pra, në qoftë se pozicioni në bord është e barabartë bosh, atëherë ne në mënyrë specifike 66 00:03:58,260 --> 00:04:01,730 doni të shtypura nga vetëm një nënvizuar për të përfaqësuar bosh, në vend të 67 00:04:01,730 --> 00:04:05,150 çfarëdo vlera e bosh në të vërtetë është. 68 00:04:05,150 --> 00:04:08,500 >> Së fundi, ne duam të shtypura nga një linjë të re. 69 00:04:08,500 --> 00:04:11,970 Vini re se kjo është ende brenda jashtme për lak, por jashtë 70 00:04:11,970 --> 00:04:13,200 brendshme për lak. 71 00:04:13,200 --> 00:04:17,930 Që kjo e jashtme për lak është iterating mbi të gjitha rreshtave, dhe kështu që kjo është e printf 72 00:04:17,930 --> 00:04:22,130 duke shkuar për të shkruar vetëm një linjë të re, kështu që ne lëvizin për të shtypura nga rreshtin tjetër. 73 00:04:22,130 --> 00:04:23,910 Dhe kjo është ajo për barazim. 74 00:04:23,910 --> 00:04:27,770 >> Pra, tani le të lëvizin për të lëvizur. 75 00:04:27,770 --> 00:04:32,590 Tani, ne të kalojë masën, tjegull se përdorues është futur në lojë - ata 76 00:04:32,590 --> 00:04:36,360 hyjnë në tjegull ata duan për të lëvizur - dhe ju jeni duke menduar për të kthyer një bool, kështu 77 00:04:36,360 --> 00:04:39,300 qoftë e vërtetë apo e rreme, në varësi të nëse ky veprim ishte në të vërtetë 78 00:04:39,300 --> 00:04:43,360 vlefshme - nëse do që të tjegull mund të jetë lëvizur në hapësirën e zbrazët. 79 00:04:43,360 --> 00:04:48,340 >> Pra këtu, ne të deklarojë një ndryshore lokale, tile_1 dhe tile_j, të cilat do të 80 00:04:48,340 --> 00:04:52,150 të jetë i ngjashëm me blank_i dhe blank_j, përveç se do të mbajnë gjurmët e 81 00:04:52,150 --> 00:04:54,910 pozicioni i pllakave. 82 00:04:54,910 --> 00:05:00,370 Tani këtu, ne jemi duke shkuar për të përdorur blank_i dhe blank_j dhe thoni të gjithë të drejtë, kështu që 83 00:05:00,370 --> 00:05:01,930 këtu është bosh në bord. 84 00:05:01,930 --> 00:05:04,420 >> Tani, është tjegull sipër bosh? 85 00:05:04,420 --> 00:05:06,210 Është pllakave të majtë bosh? 86 00:05:06,210 --> 00:05:07,420 A është tjegull për të drejtën e bosh? 87 00:05:07,420 --> 00:05:08,970 A është tjegull më poshtë bosh? 88 00:05:08,970 --> 00:05:13,330 Pra, nëse tjegull është në ndonjë nga ato pozicione, atëherë ne e dimë se tjegull 89 00:05:13,330 --> 00:05:16,390 mund të zhvendoset në vend bosh dhe bosh mund të lëvizur në ku 90 00:05:16,390 --> 00:05:18,240 tjegull aktualisht është. 91 00:05:18,240 --> 00:05:26,400 >> Kështu që këtu, të themi nëse bordi në pozicionin blank_i minus 1 blank_j. 92 00:05:26,400 --> 00:05:31,120 Pra, kjo është duke thënë është tjegull mbi bosh tanishme? 93 00:05:31,120 --> 00:05:34,350 Dhe nëse po, ne jemi duke shkuar për të kujtuar që është pozita e tjegull. 94 00:05:34,350 --> 00:05:37,870 Tjegull është në pozitë blank_i minus 1 dhe blank_j. 95 00:05:37,870 --> 00:05:40,660 tani së pari, ne gjithashtu kemi këtë kontroll të drejtë këtu, kështu blank_i është 96 00:05:40,660 --> 00:05:41,760 madhe se 0. 97 00:05:41,760 --> 00:05:43,410 >> Pse ne duam të bëjmë këtë? 98 00:05:43,410 --> 00:05:47,290 E pra, nëse bosh është në radhë të lartë i bordit, atëherë ne nuk duam të 99 00:05:47,290 --> 00:05:51,240 shikoni më lartë bosh për tjegull që prej nuk ka asgjë mbi krye 100 00:05:51,240 --> 00:05:52,430 rresht i bordit. 101 00:05:52,430 --> 00:05:55,950 Kjo është se si ju mund të përfundojnë duke u diçka si një defekti segmentimit ose 102 00:05:55,950 --> 00:05:59,030 programi juaj mund vetëm të punojnë në mënyra të papritura. 103 00:05:59,030 --> 00:06:04,310 Pra, kjo është duke u siguruar se ne nuk bëjmë shikoni në vende që nuk janë të vlefshme. 104 00:06:04,310 --> 00:06:08,470 >> Tani ne jemi duke shkuar për të bërë të njëjtën gjë për të gjitha kombinimet e tjera të mundshme. 105 00:06:08,470 --> 00:06:13,250 Pra këtu, ne jemi duke kërkuar poshtë bosh për të parë nëse kjo është tjegull. 106 00:06:13,250 --> 00:06:16,950 Dhe ne gjithashtu duhet të sigurohemi që ne jemi jo në rreshtin e poshtëm, ose ndryshe ne 107 00:06:16,950 --> 00:06:18,910 nuk duhet të shikoni për tjegull. 108 00:06:18,910 --> 00:06:25,040 Këtu, ne do të shikojmë në të majtë të bosh për të parë nëse është e tjegull. 109 00:06:25,040 --> 00:06:27,860 Dhe ne nuk duhet të shikojmë në të majtë në qoftë se ne jemi në kolonën pari nga e majta. 110 00:06:27,860 --> 00:06:30,100 Dhe këtu ne do të shikojmë të drejta e bosh, dhe ne nuk duhet të 111 00:06:30,100 --> 00:06:33,340 shikoni në të djathtë, nëse ne jemi në kolonën rightmost. 112 00:06:33,340 --> 00:06:37,820 >> Pra, në qoftë se asnjë nga ato gjëra ishin të vërteta, që do të thotë tjegull nuk ishte ngjitur 113 00:06:37,820 --> 00:06:39,640 për bosh dhe ne mund të kthimit të rreme. 114 00:06:39,640 --> 00:06:41,230 Ky veprim nuk ishte i vlefshëm. 115 00:06:41,230 --> 00:06:47,010 Por, në qoftë se një nga ata që ishin të vërteta, atëherë në këtë pikë, ne e dimë se tile_i dhe 116 00:06:47,010 --> 00:06:50,540 tile_j janë të barabartë tek pozicioni i pllakave. 117 00:06:50,540 --> 00:06:55,210 Dhe kështu, ne mund update bordit në pozicionet tile_i dhe tile_j. 118 00:06:55,210 --> 00:06:59,820 Ne e dimë se vlera e re do të jetë bosh dhe që blank_i pozicioni 119 00:06:59,820 --> 00:07:02,950 blank_j, i cili ishte origjinal blank - ne e dimë tjegull do të 120 00:07:02,950 --> 00:07:04,030 lëvizë atje. 121 00:07:04,030 --> 00:07:07,610 >> Vini re ne nuk të vërtetë kanë për të bërë një swap të vërtetë këtu, pasi ne e dimë 122 00:07:07,610 --> 00:07:09,850 vlerat që duhet të futen në ato pozita. 123 00:07:09,850 --> 00:07:13,780 Ne nuk kemi nevojë për një të përkohshme ndryshueshme përreth. 124 00:07:13,780 --> 00:07:16,920 >> Së fundi, ne duhet të kujtojmë se ne kanë variablave tona globale që janë të 125 00:07:16,920 --> 00:07:18,980 mbajtja e pozitës i bosh. 126 00:07:18,980 --> 00:07:22,780 Pra, ne duam të rinovuar pozicionin e bosh të jetë ku tjegull 127 00:07:22,780 --> 00:07:24,190 fillimisht ishte. 128 00:07:24,190 --> 00:07:27,680 Së fundi, ne kthim i vërtetë që nga ky veprim ishte i suksesshëm. 129 00:07:27,680 --> 00:07:31,110 Ne me sukses të bie në ujdi bosh me tjegull. 130 00:07:31,110 --> 00:07:34,890 >> Në rregull, kështu që ne e kaluar duhet të kontrolloni fitoi. 131 00:07:34,890 --> 00:07:39,900 Pra, fitoi në mënyrë të ngjashme kthen një bool ku e vërtetë është duke shkuar për të treguar se 132 00:07:39,900 --> 00:07:41,460 përdorues ka fituar ndeshjen. 133 00:07:41,460 --> 00:07:43,780 Dhe false është duke treguar se loja është ende do. 134 00:07:43,780 --> 00:07:46,340 Ky përdorues nuk e ka fituar. 135 00:07:46,340 --> 00:07:52,100 Pra, kjo do të jetë shumë e shumë të e kundërta e init, ku init, 136 00:07:52,100 --> 00:07:56,920 mbani mend, ne nisja e bordit 15, 14, 13, 12, kështu për të. 137 00:07:56,920 --> 00:08:03,000 Ndërsa fituar, ne duam të kontrolloni nëse bordi eshte 1, 2, 3, 4, 5, etj. 138 00:08:03,000 --> 00:08:06,600 >> Pra, ne do të nisja tonë luftuar në 1 që nga kjo është ajo që më së 139 00:08:06,600 --> 00:08:08,400 e majtë të bordit duhet të jetë. 140 00:08:08,400 --> 00:08:10,860 Dhe pastaj ne do të lak mbi gjithë forumin. 141 00:08:10,860 --> 00:08:13,690 Le të injorojë këtë kusht për një të dytë. 142 00:08:13,690 --> 00:08:18,410 Dhe kjo gjendje është vetëm do të kontrolloni është bordi në këtë pozitë 143 00:08:18,410 --> 00:08:20,790 barabartë me pikat aktuale? 144 00:08:20,790 --> 00:08:27,040 Nëse është kështu, rritje numërimin në mënyrë që Pozicioni tjetër ne shikojmë është një më i lartë 145 00:08:27,040 --> 00:08:29,690 se pozicioni ne jemi në të drejtë tani. 146 00:08:29,690 --> 00:08:32,700 >> Pra, kjo është se si ne të merrni të lartë të majtë duhet të jetë 1. 147 00:08:32,700 --> 00:08:33,950 Rritja numërimin në 2. 148 00:08:33,950 --> 00:08:35,010 Shikoni pozitën e ardhshëm. 149 00:08:35,010 --> 00:08:35,690 A është kjo e 2? 150 00:08:35,690 --> 00:08:37,659 Nëse është kështu, rritje numërimin në 3. 151 00:08:37,659 --> 00:08:39,179 Pozicioni Tjetra, kjo është 3? 152 00:08:39,179 --> 00:08:42,440 Nëse është kështu, rritje numërimin në 4, etj. 153 00:08:42,440 --> 00:08:49,190 Pra, nëse ka ndonjë pozitë në Bordi Udhëheqës i cili nuk ka të barabartë numërimin e tonë, 154 00:08:49,190 --> 00:08:52,640 atëherë ne duam të kthimit të rreme pasi që do të thotë ka disa tjegull që është 155 00:08:52,640 --> 00:08:55,490 jo në pozicionin e duhur. 156 00:08:55,490 --> 00:08:58,810 >> Kështu që këtu, çfarë është ky kusht duke bërë? 157 00:08:58,810 --> 00:09:02,170 E pra, mos harroni se është bosh menduar për të shkuar në të djathtë fund. 158 00:09:02,170 --> 00:09:06,180 Dhe vlera bosh nuk mund domosdoshmërisht të barabartë me vlerën e 159 00:09:06,180 --> 00:09:11,080 kundërshtuar që do të arrihet në fund të drejtën. 160 00:09:11,080 --> 00:09:15,760 Pra, ne në mënyrë specifike të dëshironi të shikoni në qoftë se i është e barabartë e barabartë d minus 1 dhe j është e barabartë me 161 00:09:15,760 --> 00:09:19,470 është e barabartë me d minus 1 - e cila është duke thënë se në qoftë se ne janë duke kërkuar në fund të drejtën e 162 00:09:19,470 --> 00:09:22,050 bord - atëherë ne vetëm duan të vazhdojnë. 163 00:09:22,050 --> 00:09:26,200 Ne duam të kaloni këtë të veçantë përsëritje e për lak. 164 00:09:26,200 --> 00:09:31,250 >> Dhe kështu, në qoftë se ne të arrijnë të marrin me anë të kësaj mbivendosur për lak, kjo do të thotë se 165 00:09:31,250 --> 00:09:34,690 nuk kishte asnjë tjegull se ishte në pozicioni i gabuar. 166 00:09:34,690 --> 00:09:38,900 Dhe ne pushim nga lak dhe të vijnë këtu, ku ne mund të kthehet e vërtetë. 167 00:09:38,900 --> 00:09:41,800 Të gjitha pllaka ishin në pozicionet e saktë dhe kjo do të thotë se përdoruesi ka 168 00:09:41,800 --> 00:09:43,230 fitoi ndeshjen. 169 00:09:43,230 --> 00:09:44,460 Dhe kjo është ajo. 170 00:09:44,460 --> 00:09:46,550 Emri im është Rob Bowden, dhe kjo ishte 15. 171 00:09:46,550 --> 00:09:52,726