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 Mi Rob, kaj mi esperas ke via ludo por ludo 15. 4 00:00:17,800 --> 00:00:22,040 Nu, jen estas kvar funkciojn vi bezonas por apliki en tiu programo - init, 5 00:00:22,040 --> 00:00:24,650 desegni, movi, kaj gajnis. 6 00:00:24,650 --> 00:00:27,230 Do, ni rigardu init. 7 00:00:27,230 --> 00:00:32,930 >> Tie, ni vidas la unua afero, kiun ni estas tuj fari estas deklari variablon 8 00:00:32,930 --> 00:00:34,600 vokis vendotablo. 9 00:00:34,600 --> 00:00:37,620 Oni tuj povas pravalorizita al d fojojn d minus 1. 10 00:00:37,620 --> 00:00:40,200 Memoru ke d estas la dimensio de nia estraro. 11 00:00:40,200 --> 00:00:43,840 Kiom init iras labori estas tuj persisti super la tuta forumaro 12 00:00:43,840 --> 00:00:46,050 kaj ni tuj komencu ĉe la supro maldekstro. 13 00:00:46,050 --> 00:00:48,570 >> Kaj ni simple diras, ke ni havas 4 de 4 tabulo. 14 00:00:48,570 --> 00:00:51,220 Do la supro forlasis ni estas dironta estas 15. 15 00:00:51,220 --> 00:00:53,960 Kaj tiam ni nur iri al la grafo meze de la tabuloj, dirante 15, 14, 13, 16 00:00:53,960 --> 00:00:58,510 12, 11, 10, 9, 8, 7, 6, 5, 4, kaj tiel plu. 17 00:00:58,510 --> 00:01:03,780 Do supre maldekstre, ni atendas esti d fojojn d minus 1, kiu en la 4 de 4 18 00:01:03,780 --> 00:01:08,290 kazo tuj estos 16 minus 1, kiu estas ĝuste 15. 19 00:01:08,290 --> 00:01:10,885 >> Kaj nun jen kie ni iras al persisti super la tuta forumaro. 20 00:01:10,885 --> 00:01:14,720 Kaj ni tuj starigu ĉiun pozicion en la estraro por la aktuala valoro de 21 00:01:14,720 --> 00:01:19,090 nia vendotablo, kaj tiam nombrilo tuj al dekremento, por ke la venonta 22 00:01:19,090 --> 00:01:22,300 pozicio ni atingas tuj havos nombrilo esti unu malpli ol 23 00:01:22,300 --> 00:01:23,690 la antaŭan pozicion. 24 00:01:23,690 --> 00:01:26,970 Do ni komence havis 15 kaj dekremento vendotablo. 25 00:01:26,970 --> 00:01:30,065 Tial ni iras al asigni 14 al la sekvanta pozicio, dekremento vendotablo, 26 00:01:30,065 --> 00:01:33,710 kaj ni iras al atribuitaj 13, kaj tiel plu. 27 00:01:33,710 --> 00:01:37,620 >> Fine, ni bezonas manipuli tiu angulo kazo kie, se la estraro havas eĉ 28 00:01:37,620 --> 00:01:44,450 dimensio, do nur faras 15, 14, 13, 12, la tutan vojon malsupren al 3, 2, 1, estas 29 00:01:44,450 --> 00:01:46,780 tuj forlasi nin per nesolvebla tabulo. 30 00:01:46,780 --> 00:01:49,390 Kaj ni devas interŝanĝi la 1 kaj la 2. 31 00:01:49,390 --> 00:01:52,930 Do, se d _mod_ 2 egalas 0, tio estas kiel ni tuj kontroli 32 00:01:52,930 --> 00:01:54,410 por vidi, ĉu ĝi estas vespero. 33 00:01:54,410 --> 00:01:59,810 Se d _mod_ 2 egalas 0, tiam en vico d minus 1, kiu estas malsupre, kaj 34 00:01:59,810 --> 00:02:05,430 pozicio d minus 2, aŭ kolumno d minus 2, ni tuj starigu ke al 2, kaj 35 00:02:05,430 --> 00:02:07,860 kolumno d minus 3 ni estas tuj agordita al 1. 36 00:02:07,860 --> 00:02:12,170 Do tio estas nur dorsflankanta kie 1 kaj 2 aktuale estas. 37 00:02:12,170 --> 00:02:16,270 >> Fine, ni tuj starigu la tre malsupro rajton egalan al malplenan, kie 38 00:02:16,270 --> 00:02:20,700 malplenan estis hash difinita ĉe la supro kiel 0. 39 00:02:20,700 --> 00:02:26,785 Do, tio ne estis strikte necesa, ekde ĉi por buklo tuj havos 40 00:02:26,785 --> 00:02:30,610 starigis malsupre dekstre al 0, ekde nombrilo nature atingi 0. 41 00:02:30,610 --> 00:02:34,610 Sed tio dependas al ni scii ke malplenan estis hashed trovi 0. 42 00:02:34,610 --> 00:02:38,280 Se mi iros en tiun programon kaj poste ŝanĝi malplenan je la supro al 100, ĝi 43 00:02:38,280 --> 00:02:39,770 devus ankoraŭ funkcias. 44 00:02:39,770 --> 00:02:43,180 >> Do tiu estas simple certigi, ke la malsupro dekstra estas fakte egala al nia 45 00:02:43,180 --> 00:02:44,870 malplena valoro. 46 00:02:44,870 --> 00:02:50,270 Fine, ni havas du mallokajn variablojn, tiel malplenan i kaj malplenan j, kaj ni vidas 47 00:02:50,270 --> 00:02:53,360 tiuj deklaris ĉe la supro. 48 00:02:53,360 --> 00:02:56,270 Kaj ni tuj uzi tiujn du tutmondaj variabloj por konservi trako de la 49 00:02:56,270 --> 00:02:59,040 pozicio de la celo, por ke ni ne bezonas rigardi tra la tuta 50 00:02:59,040 --> 00:03:03,890 tabulo por trovi la malplenan ĉiu sola tempo ni provos fari movon. 51 00:03:03,890 --> 00:03:08,450 Do la pozicio de la malplenan ĉiam estas tuj komenci ĉe la malsupro pravas. 52 00:03:08,450 --> 00:03:13,270 Do la dekstra malsupra estas donita per indeksoj d minus 1, d minus 1. 53 00:03:13,270 --> 00:03:14,880 Do, jen init. 54 00:03:14,880 --> 00:03:17,040 >> Nun ni pluiru, por cxerpi. 55 00:03:17,040 --> 00:03:19,370 Do, egaleco tuj estos simila kie ni iras persisti 56 00:03:19,370 --> 00:03:20,970 super la tuta forumaro. 57 00:03:20,970 --> 00:03:25,400 Kaj ni volas nur presi la valoro tio estas en ĉiu pozicio de la tabulo. 58 00:03:25,400 --> 00:03:29,580 Do jen, ni estas videbligi la valoro kiu estas en ĉiu pozicio de la tabulo. 59 00:03:29,580 --> 00:03:32,280 Kaj rimarki ke ni faras -. 60 00:03:32,280 --> 00:03:37,410 Kaj tio estas ĝuste diri printf ke sendepende de ĉu ĝi estas unu cifero aŭ 61 00:03:37,410 --> 00:03:42,010 du cifera nombro, ni tamen volas lin al prenu du kolumnojn en la print out, 62 00:03:42,010 --> 00:03:46,290 por ke, se ni havas du cifero kaj unu ciferaj nombroj en la sama estraro, niaj 63 00:03:46,290 --> 00:03:49,450 forumaro ankoraŭ aspektas bela kaj kvadrato. 64 00:03:49,450 --> 00:03:54,190 >> Do ni volas fari, ke por ĉiu valoro en la estraro, krom por la celo. 65 00:03:54,190 --> 00:03:58,260 Do, se la pozicio en la estraro egalas la malplenan, tiam ni specife 66 00:03:58,260 --> 00:04:01,730 deziras presi nur substreko reprezenti la malplenan, anstataŭ 67 00:04:01,730 --> 00:04:05,150 kion ajn la valoron de la malplenan reale estas. 68 00:04:05,150 --> 00:04:08,500 >> Fine, ni deziras presi el nova linio. 69 00:04:08,500 --> 00:04:11,970 Rimarku, ke tiu estas ankoraŭ ene la eksterajn por ciklo, sed ekstere 70 00:04:11,970 --> 00:04:13,200 la ena por buklo. 71 00:04:13,200 --> 00:04:17,930 Ekde ĉi tiu ekstera por buklo estas ripetanta super ĉiuj vicoj, kaj tiel ĉi printf estas 72 00:04:17,930 --> 00:04:22,130 tuj ĝuste presi novan linion, do ni pluiri por presi la sekva vico. 73 00:04:22,130 --> 00:04:23,910 Kaj tio estas por egaleco. 74 00:04:23,910 --> 00:04:27,770 >> Do, nun ni pluiru al movi. 75 00:04:27,770 --> 00:04:32,590 Nun, ni pasas movado, la kahelo, ke la uzanto eniris en la ludo - ili 76 00:04:32,590 --> 00:04:36,360 eniri la kahelo ili volas movi - kaj vi supozas resendas bool, tiel 77 00:04:36,360 --> 00:04:39,300 ĉu vera aŭ malvera, depende de ĉu tiu decido estis efektive 78 00:04:39,300 --> 00:04:43,360 valida - ĉu tiu tile povas esti enpenetris la malplenan spacon. 79 00:04:43,360 --> 00:04:48,340 >> Do jen, ni deklaras loka variablo, tile_1 kaj tile_j, kiuj tuj 80 00:04:48,340 --> 00:04:52,150 esti simila al blank_i kaj blank_j, krom ĝi estas tuj sekvigi la 81 00:04:52,150 --> 00:04:54,910 pozicio de la kahelo. 82 00:04:54,910 --> 00:05:00,370 Nun ĉi tie, ni tuj uzi blank_i kaj blank_j kaj diru ĉiuj pravas, tiel 83 00:05:00,370 --> 00:05:01,930 jen la malplena sur la tabulo. 84 00:05:01,930 --> 00:05:04,420 >> Nun, estas la kahelo super la malplenaj? 85 00:05:04,420 --> 00:05:06,210 Ĉu la kahelo maldekstre de la blanka? 86 00:05:06,210 --> 00:05:07,420 Ĉu la kahelo por la rajto de la malplenan? 87 00:05:07,420 --> 00:05:08,970 Ĉu la kahelo sube la blankan? 88 00:05:08,970 --> 00:05:13,330 Do, se la kahelo estas en iu ajn el tiuj pozicioj, tiam ni scias ke la kahelo 89 00:05:13,330 --> 00:05:16,390 povas movi sur la malplenan lokon kaj la malplenan povas esti movita al kie la 90 00:05:16,390 --> 00:05:18,240 kahelo aktuale estas. 91 00:05:18,240 --> 00:05:26,400 >> Do jen, ni diru, se estraro ĉe pozicio blank_i minus 1 blank_j. 92 00:05:26,400 --> 00:05:31,120 Do tiu estas diranta estas la kahelo supre la nuna malplenan? 93 00:05:31,120 --> 00:05:34,350 Kaj se jes, ni tuj memoras kiu estas la pozicio de la kahelo. 94 00:05:34,350 --> 00:05:37,870 La tegmentoj estas en pozicio blank_i minus 1 kaj blank_j. 95 00:05:37,870 --> 00:05:40,660 Nun unue, ni ankaŭ havas ĉi ĉeko ĝuste ĉi tie, do blank_i estas 96 00:05:40,660 --> 00:05:41,760 pli granda ol 0. 97 00:05:41,760 --> 00:05:43,410 >> Kial ni volas fari tion? 98 00:05:43,410 --> 00:05:47,290 Nu, se la malplenan estas en la supera vico de la estraro, tiam ni ne volas 99 00:05:47,290 --> 00:05:51,240 rigardi super la malplenaj por la kahelo ekde nenio estas supre la pinto 100 00:05:51,240 --> 00:05:52,430 vico de la tabulo. 101 00:05:52,430 --> 00:05:55,950 Jen kiel vi eble finos atingi iu kiel segmentación kulpo aŭ 102 00:05:55,950 --> 00:05:59,030 via programo povus simple labori en neatenditaj manieroj. 103 00:05:59,030 --> 00:06:04,310 Do, ĉi tiu estas certigi ke ni ne rigardu en lokoj, kiuj ne estas validaj. 104 00:06:04,310 --> 00:06:08,470 >> Nun ni tuj faru la samon por ĉiujn aliajn eblajn kombinojn. 105 00:06:08,470 --> 00:06:13,250 Do jen, ni serĉas sub la malplenan por vidi, ĉu tio estas la kahelo. 106 00:06:13,250 --> 00:06:16,950 Kaj ni devas ankaŭ certigi ni estas ne sur la suban linion, ĉar alie ni 107 00:06:16,950 --> 00:06:18,910 ne devas serĉi la kahelo. 108 00:06:18,910 --> 00:06:25,040 Tie, ni tuj rigardas al la maldekstro de la malplena por vidi, ĉu ĝi estas la kahelo. 109 00:06:25,040 --> 00:06:27,860 Kaj ni ne devus rigardi maldekstren se ni estas en la plej maldekstra kolumno. 110 00:06:27,860 --> 00:06:30,100 Kaj tie ni iras rigardi al la Dekstre de la malplenan, kaj ni ne devus 111 00:06:30,100 --> 00:06:33,340 rigardas al la dekstra, se ni estas en la plej dekstra kolumno. 112 00:06:33,340 --> 00:06:37,820 >> Do, se neniu el tiuj aferoj estas veraj, kiu signifas la kahelo ne estis najbara 113 00:06:37,820 --> 00:06:39,640 al la malplena kaj ni povas reveni falsaj. 114 00:06:39,640 --> 00:06:41,230 La movado estis ne valida. 115 00:06:41,230 --> 00:06:47,010 Sed, se unu el tiuj estis la vera, tiam ĉe tiu punkto, ni scias ke tile_i kaj 116 00:06:47,010 --> 00:06:50,540 tile_j estas egalaj al la pozicio de la kahelo. 117 00:06:50,540 --> 00:06:55,210 Kaj tiel, ni povas ĝisdatigi la tabulo ĉe pozicioj tile_i kaj tile_j. 118 00:06:55,210 --> 00:06:59,820 Ni scias la nova valoro estos la malplenan kaj ke la pozicio blank_i 119 00:06:59,820 --> 00:07:02,950 blank_j, kiu estis la originala malplena - ni konas la kahelo tuj 120 00:07:02,950 --> 00:07:04,030 movi tie. 121 00:07:04,030 --> 00:07:07,610 >> Rimarku ke ni ne efektive devas fari reala swap ĉi tie, ĉar ni konas la 122 00:07:07,610 --> 00:07:09,850 valoroj kiuj devas esti enmetita en tiuj pozicioj. 123 00:07:09,850 --> 00:07:13,780 Ni ne bezonas portempa variablo ĉirkaŭe. 124 00:07:13,780 --> 00:07:16,920 >> Fine, ni devas memori, ke ni havas nian mallokajn variablojn, kiuj estas 125 00:07:16,920 --> 00:07:18,980 konservanta trako de la pozicio de la celo. 126 00:07:18,980 --> 00:07:22,780 Do ni volas aktualigi la pozicio de la malplenan esti kie la kahelo 127 00:07:22,780 --> 00:07:24,190 origine estis. 128 00:07:24,190 --> 00:07:27,680 Fine, ni revenas vera ekde la movado sukcesis. 129 00:07:27,680 --> 00:07:31,110 Ni sukcese interŝanĝu la malplenan kun la kahelo. 130 00:07:31,110 --> 00:07:34,890 >> Enorde, do finfine ni bezonas kontroli gajnis. 131 00:07:34,890 --> 00:07:39,900 Do, gajnis simile resendas bool kie vera tuj indikas ke la 132 00:07:39,900 --> 00:07:41,460 uzanto gajnis la ludon. 133 00:07:41,460 --> 00:07:43,780 Kaj malvera estas indikante ke La ludo estas ankoraŭ iras. 134 00:07:43,780 --> 00:07:46,340 La uzanto ne gajnis. 135 00:07:46,340 --> 00:07:52,100 Do, ĉi tiu tuj estos sufiĉe tre la malo de init, kie init, 136 00:07:52,100 --> 00:07:56,920 memoru, ni pravalorizi la estraro 15, 14, 13, 12, ktp. 137 00:07:56,920 --> 00:08:03,000 Dum gajnis, ni volas kontroli, ĉu la tabulo estas 1, 2, 3, 4, 5, kaj tiel plu. 138 00:08:03,000 --> 00:08:06,600 >> Do, ni iras al pravalorizi nia kontraŭi al 1 kiam tio estas kion la supron 139 00:08:06,600 --> 00:08:08,400 Maldekstre de la estraro devus esti. 140 00:08:08,400 --> 00:08:10,860 Kaj poste ni iras al buklo super la tuta forumaro. 141 00:08:10,860 --> 00:08:13,690 Ni ignoru ĉi kondiĉo por dua. 142 00:08:13,690 --> 00:08:18,410 Kaj ĉi tiu kondiĉo estas ĝuste tuj ĉeko estas la tabulo ĉe ĉi pozicio 143 00:08:18,410 --> 00:08:20,790 egala al la nuna grafoj? 144 00:08:20,790 --> 00:08:27,040 Se jes, pliigo de la grafo por ke la sekvanta pozicio ni rigardas unu pli alta 145 00:08:27,040 --> 00:08:29,690 ol la pozicio ni estas je dekstra nun. 146 00:08:29,690 --> 00:08:32,700 >> Do jen kiel ni atingos la supre maldekstre devus esti 1. 147 00:08:32,700 --> 00:08:33,950 Pliigo la grafon al 2. 148 00:08:33,950 --> 00:08:35,010 Rigardu la sekva pozicio. 149 00:08:35,010 --> 00:08:35,690 Ĉu ĉi tiu estas 2? 150 00:08:35,690 --> 00:08:37,659 Se jes, pliigo de la grafo por 3. 151 00:08:37,659 --> 00:08:39,179 Sekva pozicio, estas jena 3? 152 00:08:39,179 --> 00:08:42,440 Se jes, pliigo de la grafo al 4, kaj tiel plu. 153 00:08:42,440 --> 00:08:49,190 Do, se estas ia pozicio en la tabulo kiu ne egalas nian grafon, 154 00:08:49,190 --> 00:08:52,640 do ni volas redoni malvera ĉar tio signifas, ke estas iuj tile ke estas 155 00:08:52,640 --> 00:08:55,490 ne en la korektan pozicion. 156 00:08:55,490 --> 00:08:58,810 >> Do jen, kio estas ĉi tiu kondiĉo faras? 157 00:08:58,810 --> 00:09:02,170 Nu, memoru, ke la malplenan estas supozis iri sur la fundo pravas. 158 00:09:02,170 --> 00:09:06,180 Kaj la malplenan valoro ne fariĝu nepre egali la valoron de la 159 00:09:06,180 --> 00:09:11,080 kontraŭi, ke tuj estos atingita ĉe la malsupro pravas. 160 00:09:11,080 --> 00:09:15,760 Do ni specife volas kontroli ĉu i egalas egalas d minus 1 kaj J egaluloj 161 00:09:15,760 --> 00:09:19,470 egalas d minus 1 - kio estas diranta, se ni rigardas sube dekstre de 162 00:09:19,470 --> 00:09:22,050 la tabulo - poste ni simple volas sekvi. 163 00:09:22,050 --> 00:09:26,200 Ni volas salti ĉi aparta ripeto de la buklo. 164 00:09:26,200 --> 00:09:31,250 >> Kaj do, se ni sukcesos ricevi per cxi nestitaj por buklo, tio signifas ke 165 00:09:31,250 --> 00:09:34,690 ne estis kahelo, kiu estis en la malĝusta pozicio. 166 00:09:34,690 --> 00:09:38,900 Kaj ni rompi la buklo kaj venu tie, kie ni povas reveni vera. 167 00:09:38,900 --> 00:09:41,800 Ĉiuj kaheloj restis en la korekta pozicioj kaj tio signifas ke la uzanto havas 168 00:09:41,800 --> 00:09:43,230 gajnis la ludon. 169 00:09:43,230 --> 00:09:44,460 Kaj tio estas ĝi. 170 00:09:44,460 --> 00:09:46,550 Mia nomo estas Rob Bowden, kaj tio estis 15. 171 00:09:46,550 --> 00:09:52,726