Роб BOWDEN: Здраво. Јас сум Роб, и се надевам дека вашата игра за игра на 15. Сега, постојат четири функции што треба за спроведување на оваа програма - init, подготви, се движат, и победи. Значи, ајде да погледнеме на init. Тука, ние гледаме на Првото нешто што ние сме одам да направите е декларирате променлива наречен шанкот. Тоа се случува да биде иницијализиран до г пати г минус 1. Се сеќавам дека d е димензија на бордот. Како init се случува на работа е тоа што се случува да iterate во овој форум и ние ќе започне во горниот лев агол. И да речеме ние имаат 4 од 4 одборот. Значи горниот лев агол ние сме случува да се каже е 15. А потоа ние сме само ќе да се избројат преку одбори, велејќи: 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, и така натаму. Значи горниот лев агол, очекуваме да биде d пати d минус 1, која во 4 од 4 случај ќе биде 16 минус 1, кое е правилно 15. И сега тука е местото каде што ние ќе треба да iterate во овој форум. И ние ќе поставите секоја позиција во одборот на моменталната вредност на нашите контра, а потоа контра се случува да Намалување, така што на следната позиција стигнуваме се случува да имаат контра биде еден помалку од претходната позиција. Па ние првично имале 15 и Намалување шанкот. Па тогаш ние ќе треба да му ја додели 14 до следната позиција, декриминирачките контра, и ние ќе доделен 13, и така натаму. Конечно, ние треба да се справи со тој агол случај кога, доколку одборот има уште димензија, а потоа само прави 15, 14, 13, 12, сите начин до 3, 2, 1, е ќе ни остави со нерешлива одбор. И ние треба да се разменуваат на 1 и 2. Значи, ако г современи 2 еднаква на 0, тоа е како ние ќе да се провери за да видат дали тоа е дури. Ако г современи 2 еднаква на 0, а потоа во ред г минус 1, кое е долниот ред, и позиција d минус 2, или колона d минус 2, ние ќе треба да ја постави таа до 2, а колона г минус 3 сме ќе се постави на 1. Значи тоа е само обратен каде 1 и 2 во моментов се. Конечно, ние ќе треба да се постави на многу долниот десен еднаква да се празни, каде што празни е hash е дефинирано на врвот како 0. Значи, тоа не беше стриктно неопходно, бидејќи ова за телефонска линија ќе има постави долниот десен на 0, бидејќи контра природно ќе достигне 0. Но, тоа се потпира врз нас знаејќи дека празно беше hashed да се најде 0. Ако одам во оваа програма, а подоцна промена празно на врвот на 100, тоа уште треба да работат. Значи ова е само што си сигурен дека долниот десен е всушност еднаков на нашиот празно вредност. Конечно, имаме две глобални променливи, па празно i и j празно, и не гледаме декларираниот на врвот. И ние ќе ги користат овие две глобални варијабли за да ги пратите на позицијата на празно, така што ние не треба да се погледне во текот на целиот одбор да се најде празно секој време ние се обидуваме да се направи потег. Значи ставот на празно секогаш е ќе започне во долниот десен. Значи крајна право е дадено од страна на индекси г минус 1, г минус 1. Значи, тоа е init. Сега се движиме за да се подготви. Значи, нерешено ќе биде слична каде одиме да iterate во овој форум. И ние само сакаме да се печати вредноста тоа е во секоја позиција на таблата. Па еве, ние сме печатење на вредност која е во секоја позиција на таблата. И ќе забележите дека ние сме прави -. И тоа е само кажувам printf дека без оглед на, ако тоа е една цифра или која две цифрен број, ние се уште го сакаат тоа да заземаат две колони во печатените надвор, така што ако имаме двоцифрено и еден цифрен број во иста табла, нашите одбор се уште ќе изгледаат убаво и плоштадот. Затоа сакаме да го стори тоа за секој вредност во одборот, со исклучок на празно. Значи, ако позицијата во одборот еднаква на празно, тогаш ние конкретно сакате да испечатите само црта да ги претставуваат празно, наместо без оглед на вредноста на празно всушност е. Конечно, ние сакаме да се печати надвор нова линија. Забележете дека ова е уште внатре надворешниот за јамка, но надвор внатрешниот за јамка. Бидејќи ова надворешниот за телефонска линија е процесирањето над сите редови, па така ова printf е случува само печати нова линија, па ние се движат за да испечатите на следниот ред. И тоа е тоа за нерешено. Значи, сега да се движат за да се движат. Сега, ние помине потег, плочка дека корисникот е внесен во играта - тие внесете плочка тие сакаат да се движат - а си требал да се врати bool, па точно или неточно, во зависност од дали тој потег беше всушност валидна - дали тоа плочка може да биде се преселил во празни места. Па еве, ние се изјасни локална променлива, 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, кој беше оригиналниот празно - знаеме плочка се случува да се се преселат таму. Забележете ние не, всушност треба да се направи вистински swap тука, бидејќи ние знаеме вредности кои треба да бидат вметнати во тие позиции. Ние не треба привремена променлива наоколу. Конечно, ние треба да се запамети дека ние имаме глобални променливи кои се следење на позицијата на празно. Затоа сакаме да се ажурира на позицијата на на празно за да биде каде што плочка првично беше. Конечно, ќе се вратиме точно затоа потег беше успешна. Ние успешно трампа на празно со плочка. Добро, па минатата ние треба да се провери победи. Значи, освои слично враќа bool каде точно се случува да се покаже дека корисникот е добитник на играта. И лажни укажува дека играта се уште се случува. Корисникот нема освоено. Значи, ова ќе биде доста спротивно на init, каде init, се сеќавам, ние се иницијализира на одборот до 15, 14, 13, 12, итн. Додека победи, ние сакаме да се провери дали членската група е 1, 2, 3, 4, 5, и така натаму. Значи, ние ќе треба да се иницијализира на нашите спротивни на 1, бидејќи тоа е она што на врвот лево од одборот треба да биде. А потоа ние ќе јамка во овој форум. Ајде да се игнорира овој услов за вториот. И оваа состојба е само ќе проверете е на одборот на оваа позиција еднаков на сегашниот точки? Ако е така, прираст на пребројувањето на гласовите, така што следната позиција гледаме е еден повисок од позиција ние сме во моментов. Па тоа е како ќе го добиеме горниот лев агол треба да биде 1. Прираст на пребројувањето на гласовите 2. Погледнете на следниот позиција. Дали е ова 2? Ако е така, прираст на пребројувањето на гласовите на 3. Следната позиција, дали е ова 3? Ако е така, прираст на пребројувањето на гласовите до 4, и така натаму. Значи, ако постои било каква позиција на одбор дека не се изедначи нашите брои, тогаш ние сакаме да се врати лажни, бидејќи тоа значи има некои плочка, која е не е во правилна позиција. Значи тука, она што е оваа состојба правиш? Добро, се сеќавам дека празно е би требало да одат на долниот десен. И вредноста на празно не може мора да се изедначи со вредноста на спротивстави што се случува да се постигне во долниот десен. Па ние конкретно сакаш да се провери дали можам еднакво еднаква на г минус 1 и ѕ еднаквите еднакво г минус 1 - која е велејќи дека ако ние се гледа во долниот десен агол на Форум - тогаш ние само сакате да продолжите. Ние сакаме да го прескокнете овој конкретен повторување на за телефонска линија. И така, ако успееме да се добие преку овој вгнездени за телефонска линија, тоа значи дека немаше плочка, која беше во неточни позиција. И ние се пробие на јамка и се тука, каде што може да се врати вистина. Сите плочки биле во точни позиции и тоа значи дека корисникот има победи на играта. И тоа е тоа. Моето име е Роб Бауден, и ова беше 15.