ROB BOWDEN: Hi. Аз съм Роб, и аз се надявам си игра за игра на 15. Сега, има четири функции, които трябва за изпълнение в тази програма - първоначален, изготвя, се движи, и печели. Така че, нека да погледнем първоначален. Ето, ние виждаме, първото нещо, което сме ще направя, е да декларира променлива наречена брояч. Това ще се инициализира до г пъти г минус 1. Не забравяйте, че г е измерението на нашия съвет. Как първоначален ще се работи, е, че ще за обхождане на целия съвет и ние ще започнем в горния ляв ъгъл. И нека просто кажем, че сме имат 4 от 4 борда. Така че горния ляв ъгъл, ние сме ще кажа, е 15. И тогава ние просто ще разчитате през средата на дъските, заявявайки, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, и така нататък. Така че в горния ляв ъгъл, ние очакваме да бъде г пъти г минус 1, която в 4 от 4 случай ще бъде 16 минус 1, което е правилно 15. И сега тук е мястото, където отиваме да обхождане на целия съвет. И ние отиваме да настроите всяка позиция в на борда на текущата стойност на нашия брояч, и след това брояч ще за снижаване така че следващата позиция стигаме ще има брояч е един по-малко от предишната позиция. Така че първоначално имаше 15 и декрементира брояч. Така че след това отиваме да присвоите 14 към следващата позиция, снижаване брояч, и отиваме на целеви 13, и така нататък. И накрая, ние трябва да се справят с този ъгъл случай, в който, ако на борда има още измерение, тогава просто правим 15, 14, 13, 12, по целия път надолу до 3, 2, 1, е Ще ни оставя с неразрешим борда. И ние трябва да сменяте една и две. Така че, ако г мод 2 е равна на 0, това е как отиваме, за да проверите за да видите дали това е дори. Ако г мод две е равно на 0, след това в ред г минус 1, който е най-долния ред, и позиция г минус 2, или колона г минус 2, отиваме да зададете, че към 2, а колона г минус 3 сме ще създаде до 1. Така че това е просто обръщане, където на 1 и 2 в момента са. И накрая, ние отиваме да настроите самото долния десен равна на празно, където празно е хеш дефинирани в горната част, както е 0. Така че, това не е абсолютно необходимо, тъй като това за линия ще има настроите долния десен ъгъл на 0, тъй като брояч естествено ще достигне 0. Но, който разчита на нас, знаейки, че празно е сегментира да намери 0. Ако отида в тази програма, а по-късно промени в празен отгоре 100, като все още трябва да се работи. Така че това е просто като се уверите, че долния десен всъщност е равна на нашата празна стойност. И накрая, ние имаме две глобални променливи, толкова празен и аз празен J, и ние виждаме декларираните в горната част. И ние ще използваме тези два глобалното променливи, за да следите на положение на празна проба, така че ние не правим трябва да се търси през целия борда да се намери празната всеки един път, когато се опита да направи ход. Така че позицията на заготовката винаги е ще започне в долния десен ъгъл. Така че в долния десен ъгъл се дава от индекси г минус 1, г минус 1. Така че, това е първоначален. Сега да преминем към равенство. Така че, равенство ще е подобен къде отиваме, за да превъртите във форумите. И ние просто искаме да отпечатате стойността това е във всяка позиция на дъската. Така че тук, ние сме отпечатването на стойността, която е във всяка позиция на дъската. И забележете, че правим -. И това е само казвам, че ФОРМАТ независимо от това дали това е една цифра или две-цифрен номер, ние все пак искаме да да отнеме до две колони в разпечатката, така че ако имаме две цифри и една цифрени числа в една и съща дъска, нашата борда ще продължи да изглежда добре и квадрат. Така че ние искаме да се направи, че за всяка стойност в управителния съвет, с изключение на заготовката. Така че, ако положението в борда се равнява на на празен, тогава ние ИЗРИЧНО искате да отпечатате само долна черта да представлява заготовка, вместо независимо от стойността на договора празно в действителност. И накрая, ние искаме да отпечатате започва нов ред. Забележете, че това все още е вътре външната за линия, но извън вътрешната за контур. Тъй като тази външна за линия е итерации над всички редове, и така че това е ФОРМАТ просто ще се отпечатва нов ред, така че ние преминете към разпечатате на следващия ред. И това е за равенство. Така че, сега нека продължим да се движат. Сега, ние минаваме ход, плочката, че потребител е влязъл в играта - те въведете плочката те искат да се движат - и , което се очаква да се върне на булев, така или вярно или невярно, в зависимост от дали този ход е всъщност валиден - дали тази плочка може да бъде се мести в празното пространство. Така че тук, ние заявяваме локална променлива, tile_1 и tile_j, които ще да бъде подобна на blank_i и blank_j, освен това ще следи за Позиция на плочката. Сега тук, ние ще използваме blank_i и blank_j и да кажа нищо, така че тук е заготовката на дъската. Сега е плочката над празното? Дали плочката от ляво на бланката? Дали плочката от дясно на бланката? Дали плочката под бланката? Така че, ако плочката е в някоя от тези позиции, тогава ние знаем, че плочката може да бъде преместен в празно място и заготовката може да бъде преместена, когато плочки в момента е. Така че тук, ние казваме, ако борда на позиция blank_i минус 1 blank_j. Така че това се казва, е плочката над текущата бланката? И ако е така, отиваме да се помни, че е позицията на плочката. Плочката е в позиция blank_i минус 1 и blank_j. Сега на първо място, ние също имаме тази проверка точно тук, така blank_i е по-голяма от 0. Защо искате да направите това? Е, ако бланката е в най-горния ред на борда, тогава ние не искаме да виж по-горе заготовката за плочката, тъй като няма нищо по-горе на върха ред на дъската. Това е начина, по който може да се свърши получаване нещо подобно сегментиране повреда или Вашата програма може просто да работи по неочакван начин. Така че, това е като се уверите, че ние не правим гледам на места, които не са валидни. Сега ние ще направим същото за всички други възможни комбинации. Така че тук, ние не търсим под бланката за да видите дали това е плочката. И ние също трябва да се уверете, че ние сме не на най-долния ред, или в противен случай не трябва да се търси плочката. Ето, ние ще разгледаме в ляво от заготовката, за да видите дали това е плочката. И ние не трябва да гледаме към ляво ако ние сме в най-лявата колона. И тук ние отиваме да гледаме към право на заготовката, и ние не трябва да погледнете надясно, ако сме в най-дясната колона. Така че, ако нито едно от тези неща са верни, това означава, че плочката не е в непосредствена близост до празно и можем да се върнем фалшива. Този ход не е валидно. Но, ако някой от тези, които са верни, то този момент, ние знаем, че tile_i и tile_j са равни на Позиция на плочката. И така, ние можем да се актуализира на борда на позиции tile_i и tile_j. Ние знаем, новата стойност ще бъде празно и че blank_i позиция blank_j, която е оригинала празен - знаем плочката ще премести там. Забележете, ние всъщност не трябва да се направи недвижими суап тук, тъй като ние знаем, ценности, които трябва да се въведат в тези позиции. Ние не се нуждаем от временно променлива наоколо. И накрая, ние трябва да помним, че ние имаме нашите глобални променливи, които са следене на позицията на заготовката. Така че ние искаме да се актуализира позицията на заготовката да бъде там, където плочката първоначално е бил. И накрая, ние се върнете вярно, тъй като този ход е била успешна. Ние успешно сменяте празно с плочката. Добре, така че за последен път Трябва да се провери вона. Така че, спечели подобно връща булев, където Вярно ли е, ще се покаже, че потребител е спечелил играта. И фалшивата се посочва, че играта още не е свършила. Потребителят не е печелил. Така че, това ще бъде доста много обратното на първоначален, където първоначален, Спомням си, ние се инициализира на борда 15, 14, 13, 12, така нататък. Като има предвид, спечели, ние искаме да се провери дали борда е 1, 2, 3, 4, 5, и така нататък. Така че, ние отиваме да се инициализира ни противодействие на 1, тъй като това е, което на върха лява на съвета трябва да бъде. И тогава ние ще контур във форумите. Да се ​​игнорира това състояние за секунда. И това условие е просто ще проверка е на борда на директорите на тази позиция равна на текущата брои? Ако е така, нарастване на броя, така че следващата позиция се вгледаме в един по-висок от позицията ние сме в момента. Така че това е начина, по който получавате горния ляв трябва да бъде 1. Нарастване на броя на 2. Вижте на следващата позиция. Това 2? Ако е така, увеличаваме броя до три. Следваща позиция, е тази 3? Ако е така, нарастване на броя до 4, и така нататък. Така че, ако има някаква позиция на борд, който не е равно ни брой, След това ние искаме да се върне фалшиви, тъй като това означава, че има някои плочки, че е не в правилната позиция. Така че тук, какво прави това състояние? Е, не забравяйте, че заготовката е Трябваше да отиде в долния десен ъгъл. И стойността на празната проба не може непременно да се равнява на стойността на противодействие, което ще бъде постигнато в долния десен ъгъл. Така че ние специално искате да проверите, ако аз равнява се равнява на г минус 1 и к равни се равнява на г минус 1 -, който се казва, ако ние търсите в долния десен ъгъл на дъската - тогава ние просто искате да продължите. Искаме да пропуснете този конкретен итерация на цикъла за. И така, ако успеем да преминем през това вложени за линия, това означава, че не е имало плочки, че е бил в неправилната позиция. И ние се измъкне от примката и да се тук, където можем да се върнем вярно. Всички плочи са в правилните позиции и това означава, че потребителят има спечели играта. И това е всичко. Моето име е Роб Боудън, и това беше 15.