1 00:00:00,000 --> 00:00:13,070 2 00:00:13,070 --> 00:00:13,715 >> РОБ БОВДЕН: Здраво. 3 00:00:13,715 --> 00:00:17,800 Ја сам Роб, и надам се ваше игра за игру 15. 4 00:00:17,800 --> 00:00:22,040 Сада, постоје четири функције које треба да спроведу у овом програму - инит, 5 00:00:22,040 --> 00:00:24,650 цртати, преместите, и победио. 6 00:00:24,650 --> 00:00:27,230 Дакле, хајде да погледамо инит. 7 00:00:27,230 --> 00:00:32,930 >> Ево, видимо прву ствар смо ми урадити је прогласи променљиву 8 00:00:32,930 --> 00:00:34,600 зове бројач. 9 00:00:34,600 --> 00:00:37,620 То ће бити иницијализована да д пута Д минус 1. 10 00:00:37,620 --> 00:00:40,200 Запамтите да је д димензија нашег одбора. 11 00:00:40,200 --> 00:00:43,840 Како прва ће радити јесте да ће да вршите итерацију за цео боард 12 00:00:43,840 --> 00:00:46,050 и ми ћемо почети у горњем левом. 13 00:00:46,050 --> 00:00:48,570 >> И рецимо да ми имају 4 од 4 таблу. 14 00:00:48,570 --> 00:00:51,220 Дакле, горе лево смо да кажем јесте 15. 15 00:00:51,220 --> 00:00:53,960 И онда ми само да рачунају кроз даске, рекавши 15, 14, 13, 16 00:00:53,960 --> 00:00:58,510 12, 11, 10, 9, 8, 7, 6, 5, 4, и тако даље. 17 00:00:58,510 --> 00:01:03,780 Дакле, горњи леви, очекујемо да буде д пута Д минус 1, који је у 4 од 4 18 00:01:03,780 --> 00:01:08,290 Случај ће бити 16 минус 1, што је исправно 15.. 19 00:01:08,290 --> 00:01:10,885 >> А сада ево где ћемо поновити за цео боард. 20 00:01:10,885 --> 00:01:14,720 И ми ћемо поставити сваки положај у одбор на тренутну вредност 21 00:01:14,720 --> 00:01:19,090 наш бројач, а затим бројач иде на декрементирати, тако да следећа 22 00:01:19,090 --> 00:01:22,300 позиција стигнемо ће имати цоунтер бити један мањи од 23 00:01:22,300 --> 00:01:23,690 претходни положај. 24 00:01:23,690 --> 00:01:26,970 Тако да смо у почетку имали 15 и декрементирати бројач. 25 00:01:26,970 --> 00:01:30,065 Дакле, онда ћемо доделити 14 до следећи положај, умањење бројач, 26 00:01:30,065 --> 00:01:33,710 и ми ћемо додељен 13, и тако даље. 27 00:01:33,710 --> 00:01:37,620 >> Коначно, морамо да рукује тај кутак случај где, ако одбор има чак 28 00:01:37,620 --> 00:01:44,450 димензија, онда само раде 15, 14, 13, 12, све до 3, 2, 1, је 29 00:01:44,450 --> 00:01:46,780 ће нас оставити са нерешиви одбор. 30 00:01:46,780 --> 00:01:49,390 И морамо да мењате 1. и 2.. 31 00:01:49,390 --> 00:01:52,930 Дакле, ако г Мод 2 једнако 0, то је како ћемо проверити 32 00:01:52,930 --> 00:01:54,410 да видим да ли је то још. 33 00:01:54,410 --> 00:01:59,810 Ако је д мод 2 једнако 0, онда у реду Д минус 1, што је доњи ред, и 34 00:01:59,810 --> 00:02:05,430 положај Д минус 2, или колона Д минус 2, ми ћемо поставити то на 2, и 35 00:02:05,430 --> 00:02:07,860 колона Д минус 3 смо ће поставити на 1. 36 00:02:07,860 --> 00:02:12,170 Дакле, то је само уназад где 1 и 2 су тренутно. 37 00:02:12,170 --> 00:02:16,270 >> Коначно, ми ћемо поставити веома доле десно једнако празно, где 38 00:02:16,270 --> 00:02:20,700 празно је тараба дефинисана на врху као 0. 39 00:02:20,700 --> 00:02:26,785 Дакле, то није био стриктно неопходно, јер ово за петље ће имати 40 00:02:26,785 --> 00:02:30,610 поставите доњи право на 0, јер бројач ће природно достићи 0.. 41 00:02:30,610 --> 00:02:34,610 Али да се ослања на нас, знајући да празно је хеширају да нађе 0. 42 00:02:34,610 --> 00:02:38,280 Ако ја одем у овај програм и касније променити празно на врху до 100, то 43 00:02:38,280 --> 00:02:39,770 треба и даље радити. 44 00:02:39,770 --> 00:02:43,180 >> Дакле, ово је само да се уверите доле десно је заправо једнак наш 45 00:02:43,180 --> 00:02:44,870 празно вредност. 46 00:02:44,870 --> 00:02:50,270 Коначно, имамо два глобалне варијабле, тако празно и и ј празно, и ми видимо 47 00:02:50,270 --> 00:02:53,360 они проглашен на врху. 48 00:02:53,360 --> 00:02:56,270 И ми ћемо користити оне две глобалне променљиве да пратите 49 00:02:56,270 --> 00:02:59,040 положај празно, тако да ми не треба да изгледа кроз цео 50 00:02:59,040 --> 00:03:03,890 одбор да пронађе празан сваки време покушавамо да направи потез. 51 00:03:03,890 --> 00:03:08,450 Тако положај празан увек ће почети у доњем десном углу. 52 00:03:08,450 --> 00:03:13,270 Дакле, доњи десни даје Индекси Д минус 1, Д минус 1. 53 00:03:13,270 --> 00:03:14,880 Дакле, то је прва. 54 00:03:14,880 --> 00:03:17,040 >> Сада ћемо прећи на нерешено. 55 00:03:17,040 --> 00:03:19,370 Дакле, жреб ће бити сличан где ћемо поновити 56 00:03:19,370 --> 00:03:20,970 преко целог табли. 57 00:03:20,970 --> 00:03:25,400 А ми само желимо да одштампате вредност да је у свакој позицији одбора. 58 00:03:25,400 --> 00:03:29,580 Дакле овде, ми штампањем вредност која је у свакој позицији одбора. 59 00:03:29,580 --> 00:03:32,280 И приметите да радимо -. 60 00:03:32,280 --> 00:03:37,410 И то је управо говори да принтф без обзира да ли је то једна цифра или 61 00:03:37,410 --> 00:03:42,010 две цифре броја, ми и даље желимо да га заузимају две колоне у одштампате, 62 00:03:42,010 --> 00:03:46,290 тако да ако имамо две цифре и једну Бројеви цифра у истом броду, наш 63 00:03:46,290 --> 00:03:49,450 одбор ће и даље изгледа лепо и трг. 64 00:03:49,450 --> 00:03:54,190 >> Дакле, ми желимо да урадимо за сваку вредност у одбору, осим празан. 65 00:03:54,190 --> 00:03:58,260 Дакле, ако је позиција у табли једнак празно, онда ћемо конкретно 66 00:03:58,260 --> 00:04:01,730 Желим да одштампате само једну црту да представља празан, уместо 67 00:04:01,730 --> 00:04:05,150 без обзира вредност празно заправо је. 68 00:04:05,150 --> 00:04:08,500 >> На крају, желимо да одштампате из нове линије. 69 00:04:08,500 --> 00:04:11,970 Обратите пажњу да је ово још увек унутра спољни за петљу, али изван 70 00:04:11,970 --> 00:04:13,200 унутрашњи за петљу. 71 00:04:13,200 --> 00:04:17,930 Пошто ова спољашња за петљу је итератинг над свим редовима, па ово је принтф 72 00:04:17,930 --> 00:04:22,130 ће само одштампате нову линију, тако да смо пређите на одштампати следећи ред. 73 00:04:22,130 --> 00:04:23,910 И то је то за жреб. 74 00:04:23,910 --> 00:04:27,770 >> Дакле, сада идемо даље да се креће. 75 00:04:27,770 --> 00:04:32,590 Сада, пролазимо потез, на плочицу да корисник је ушао у игру - они 76 00:04:32,590 --> 00:04:36,360 унесите плочица желе да се крећу - и ти би требало да се врати боол, тако 77 00:04:36,360 --> 00:04:39,300 истинито или лажно, у зависности од да ли је то потез је заправо 78 00:04:39,300 --> 00:04:43,360 важи - да ли то може бити плочица преселио у празан простор. 79 00:04:43,360 --> 00:04:48,340 >> Дакле овде, ми изјављујемо локалну променљиву, тиле_1 и тиле_ј, који ће 80 00:04:48,340 --> 00:04:52,150 бити сличан бланк_и и бланк_ј, осим да ће то пратити 81 00:04:52,150 --> 00:04:54,910 положај плочица. 82 00:04:54,910 --> 00:05:00,370 Сада овде, ми ћемо користити бланк_и и бланк_ј и рећи све право, тако 83 00:05:00,370 --> 00:05:01,930 овде је празан на табли. 84 00:05:01,930 --> 00:05:04,420 >> Сада, је плочица изнад празан? 85 00:05:04,420 --> 00:05:06,210 Је плочица са леве празан? 86 00:05:06,210 --> 00:05:07,420 Је плочица са десне празан? 87 00:05:07,420 --> 00:05:08,970 Да ли је плочица испод празан? 88 00:05:08,970 --> 00:05:13,330 Дакле, ако плочица је у било којој од оних позиције, онда знамо да плочица 89 00:05:13,330 --> 00:05:16,390 може да се помера у празном делу и празно може бити премештена на место где 90 00:05:16,390 --> 00:05:18,240 плочица тренутно је. 91 00:05:18,240 --> 00:05:26,400 >> Дакле овде, ми кажемо ако одбор на позицији бланк_и минус 1 бланк_ј. 92 00:05:26,400 --> 00:05:31,120 Дакле ово говори је плочица изнад тренутног празан? 93 00:05:31,120 --> 00:05:34,350 А ако је тако, идемо да се сетим то је положај плочица. 94 00:05:34,350 --> 00:05:37,870 Плочица је у позицији бланк_и минус 1 и бланк_ј. 95 00:05:37,870 --> 00:05:40,660 Сада прво, имамо и овај чек овде, тако је бланк_и 96 00:05:40,660 --> 00:05:41,760 већи од 0. 97 00:05:41,760 --> 00:05:43,410 >> Зашто желимо да урадимо? 98 00:05:43,410 --> 00:05:47,290 Па, ако је празан у горњем реду одбора, онда ми не желимо да 99 00:05:47,290 --> 00:05:51,240 изгледају горе празно за плочице од не постоји ништа изнад врха 100 00:05:51,240 --> 00:05:52,430 ред одбора. 101 00:05:52,430 --> 00:05:55,950 Овако можете завршити добијање нешто као сегментације квара или 102 00:05:55,950 --> 00:05:59,030 ваш програм може само радити на неочекиване начине. 103 00:05:59,030 --> 00:06:04,310 Дакле, ово је да се уверите да ми не погледати на местима која нису важећа. 104 00:06:04,310 --> 00:06:08,470 >> Сада ћемо да урадимо исту ствар за све друге могуће комбинације. 105 00:06:08,470 --> 00:06:13,250 Дакле овде, ми тражимо испод празно да видим да ли је то плочица. 106 00:06:13,250 --> 00:06:16,950 И ми такође морамо да будемо сигурни да смо не на доњем реду, или ћемо 107 00:06:16,950 --> 00:06:18,910 не би требало да изгледа за плочице. 108 00:06:18,910 --> 00:06:25,040 Овде ћемо да погледамо лево од празно да видим да ли је плочица. 109 00:06:25,040 --> 00:06:27,860 И ми не би требало да изгледа на лево ако смо у колони са леве стране. 110 00:06:27,860 --> 00:06:30,100 И овде ћемо да погледамо на Право на празно, а ми не треба 111 00:06:30,100 --> 00:06:33,340 погледати на десно ако смо у крајњем десном колони. 112 00:06:33,340 --> 00:06:37,820 >> Дакле, ако се ниједна од тих ствари су истините, то значи плочица није била поред 113 00:06:37,820 --> 00:06:39,640 на празно и можемо вратити фалсе. 114 00:06:39,640 --> 00:06:41,230 Потез није био валидан. 115 00:06:41,230 --> 00:06:47,010 Али, ако је један од оних била истина, онда на ова тачка, ми знамо да је и тиле_и 116 00:06:47,010 --> 00:06:50,540 тиле_ј су једнаки положај плочица. 117 00:06:50,540 --> 00:06:55,210 И тако, можемо ажурирати одбор на позиције тиле_и и тиле_ј. 118 00:06:55,210 --> 00:06:59,820 Знамо нова вредност ће бити празно и да је положај бланк_и 119 00:06:59,820 --> 00:07:02,950 бланк_ј, која је била оригинална празно - ми знамо плочица ће 120 00:07:02,950 --> 00:07:04,030 померите тамо. 121 00:07:04,030 --> 00:07:07,610 >> Обратите пажњу да не стварно треба да урадите прави своп овде, јер ми знамо 122 00:07:07,610 --> 00:07:09,850 Вредности које треба да се убаци у тим позицијама. 123 00:07:09,850 --> 00:07:13,780 Ми не треба привремени променљива око. 124 00:07:13,780 --> 00:07:16,920 >> Коначно, треба да се сетимо да смо имамо глобалне варијабле које су 125 00:07:16,920 --> 00:07:18,980 праћење положаја од празно. 126 00:07:18,980 --> 00:07:22,780 Зато желимо да ажурирате положај празно да буде тамо где плочица 127 00:07:22,780 --> 00:07:24,190 првобитно је било. 128 00:07:24,190 --> 00:07:27,680 Коначно, ми смо се вратили прави од потез био успешан. 129 00:07:27,680 --> 00:07:31,110 Успешно смо заменили празно са плочица. 130 00:07:31,110 --> 00:07:34,890 >> У реду, тако да смо прошле Потребно је да проверите победио. 131 00:07:34,890 --> 00:07:39,900 Дакле, освојио слично враћа боол где истина ће указују на то да 132 00:07:39,900 --> 00:07:41,460 корисник је победио. 133 00:07:41,460 --> 00:07:43,780 И лажно се указује на то да Игра је још увек дешава. 134 00:07:43,780 --> 00:07:46,340 Корисник није освојио. 135 00:07:46,340 --> 00:07:52,100 Дакле, ово ће бити прилично супротно од инит, где прва, 136 00:07:52,100 --> 00:07:56,920 запамтите, ми смо иницијализирате одбор до 15, 14, 13, 12, итд. 137 00:07:56,920 --> 00:08:03,000 Док победили, ми желимо да проверите да ли плоча је 1, 2, 3, 4, 5, и тако даље. 138 00:08:03,000 --> 00:08:06,600 >> Дакле, идемо да покрене наш супротстави до 1 од то топ 139 00:08:06,600 --> 00:08:08,400 лево одбора треба да буде. 140 00:08:08,400 --> 00:08:10,860 А онда ћемо петљи преко целог табли. 141 00:08:10,860 --> 00:08:13,690 Хајде да игноришу овај услов за секунду. 142 00:08:13,690 --> 00:08:18,410 И овај услов је само да Провера је одбор на тој позицији 143 00:08:18,410 --> 00:08:20,790 једнака садашњих тачке? 144 00:08:20,790 --> 00:08:27,040 Ако је тако, повећавати рачунати тако да следећи положај гледамо је један виши 145 00:08:27,040 --> 00:08:29,690 од положаја смо у праву сада. 146 00:08:29,690 --> 00:08:32,700 >> Па тако смо добили горњи леви треба да буде 1. 147 00:08:32,700 --> 00:08:33,950 Прираст рачунати на 2. 148 00:08:33,950 --> 00:08:35,010 Погледајте на следећој позицији. 149 00:08:35,010 --> 00:08:35,690 Да ли је ово 2? 150 00:08:35,690 --> 00:08:37,659 Ако је тако, повећавати бројање до 3. 151 00:08:37,659 --> 00:08:39,179 Следећа позиција, ово је 3? 152 00:08:39,179 --> 00:08:42,440 Ако је тако, повећавати бројање до 4, и тако даље. 153 00:08:42,440 --> 00:08:49,190 Дакле, ако постоји било какав став о одбор да не равно наше бројање, 154 00:08:49,190 --> 00:08:52,640 онда желе да се врате, јер лажна да значи да постоји нека плочица која је 155 00:08:52,640 --> 00:08:55,490 не у правилном положају. 156 00:08:55,490 --> 00:08:58,810 >> Дакле овде, шта је ово стање ради? 157 00:08:58,810 --> 00:09:02,170 Па, сетите се да је празан требало да иду у доњем десном углу. 158 00:09:02,170 --> 00:09:06,180 И вредност празног а можда и није нужно једнака вредност 159 00:09:06,180 --> 00:09:11,080 одговарају да ће бити постигнут у доњем десном углу. 160 00:09:11,080 --> 00:09:15,760 Дакле, ми смо конкретно желите да проверите да ли сам једнако једнако Д минус 1 и ј екуалс 161 00:09:15,760 --> 00:09:19,470 једнако Д минус 1 - који се каже да смо траже у доњем десном 162 00:09:19,470 --> 00:09:22,050 одбор - онда смо управо жели да настави. 163 00:09:22,050 --> 00:09:26,200 Желимо да прескочите овај итерација у петљи за. 164 00:09:26,200 --> 00:09:31,250 >> И тако, ако успемо да се кроз ово угнеждена за петљу, то значи да 165 00:09:31,250 --> 00:09:34,690 није било плочица који је био у Неправилан положај. 166 00:09:34,690 --> 00:09:38,900 И ми смо се пробије из петље и долазе овде, где можемо да се врате тачно. 167 00:09:38,900 --> 00:09:41,800 Све плочице су у правилним позицијама а то значи да корисник има 168 00:09:41,800 --> 00:09:43,230 победио. 169 00:09:43,230 --> 00:09:44,460 И то је то. 170 00:09:44,460 --> 00:09:46,550 Моје име је Роб Боуден, а то је било 15.. 171 00:09:46,550 --> 00:09:52,726