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 Аз съм Роб, и аз се надявам си игра за игра на 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 И ние трябва да сменяте една и две. 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 Ако г мод две е равно на 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 И накрая, ние имаме две глобални променливи, толкова празен и аз празен J, и ние виждаме 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 >> Така че тук, ние заявяваме локална променлива, tile_1 и tile_j, които ще 80 00:04:48,340 --> 00:04:52,150 да бъде подобна на blank_i и blank_j, освен това ще следи за 81 00:04:52,150 --> 00:04:54,910 Позиция на плочката. 82 00:04:54,910 --> 00:05:00,370 Сега тук, ние ще използваме blank_i и blank_j и да кажа нищо, така че 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 >> Така че тук, ние казваме, ако борда на позиция blank_i минус 1 blank_j. 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 Плочката е в позиция blank_i минус 1 и blank_j. 95 00:05:37,870 --> 00:05:40,660 Сега на първо място, ние също имаме тази проверка точно тук, така blank_i е 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 Но, ако някой от тези, които са верни, то този момент, ние знаем, че tile_i и 116 00:06:47,010 --> 00:06:50,540 tile_j са равни на Позиция на плочката. 117 00:06:50,540 --> 00:06:55,210 И така, ние можем да се актуализира на борда на позиции tile_i и tile_j. 118 00:06:55,210 --> 00:06:59,820 Ние знаем, новата стойност ще бъде празно и че blank_i позиция 119 00:06:59,820 --> 00:07:02,950 blank_j, която е оригинала празен - знаем плочката ще 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 Ако е така, увеличаваме броя до три. 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