1 00:00:00,000 --> 00:00:13,070 2 00:00:13,070 --> 00:00:13,715 >> Роб BOWDEN: Здраво. 3 00:00:13,715 --> 00:00:17,800 Јас сум Роб, и се надевам дека вашата игра за игра на 15. 4 00:00:17,800 --> 00:00:22,040 Сега, постојат четири функции што треба за спроведување на оваа програма - init, 5 00:00:22,040 --> 00:00:24,650 подготви, се движат, и победи. 6 00:00:24,650 --> 00:00:27,230 Значи, ајде да погледнеме на init. 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 Се сеќавам дека d е димензија на бордот. 11 00:00:40,200 --> 00:00:43,840 Како init се случува на работа е тоа што се случува да iterate во овој форум 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 Значи горниот лев агол, очекуваме да биде d пати d минус 1, која во 4 од 4 18 00:01:03,780 --> 00:01:08,290 случај ќе биде 16 минус 1, кое е правилно 15. 19 00:01:08,290 --> 00:01:10,885 >> И сега тука е местото каде што ние ќе треба да iterate во овој форум. 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 позиција d минус 2, или колона d минус 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 празни е hash е дефинирано на врвот како 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 Но, тоа се потпира врз нас знаејќи дека празно беше hashed да се најде 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 Конечно, имаме две глобални променливи, па празно i и 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 Значи, тоа е init. 54 00:03:14,880 --> 00:03:17,040 >> Сега се движиме за да се подготви. 55 00:03:17,040 --> 00:03:19,370 Значи, нерешено ќе биде слична каде одиме да iterate 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 И тоа е само кажувам printf дека без оглед на, ако тоа е една цифра или 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 Бидејќи ова надворешниот за телефонска линија е процесирањето над сите редови, па така ова printf е 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 внесете плочка тие сакаат да се движат - а си требал да се врати bool, па 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 >> Забележете ние не, всушност треба да се направи вистински swap тука, бидејќи ние знаеме 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 Значи, освои слично враќа bool каде точно се случува да се покаже дека 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 Значи, ова ќе биде доста спротивно на init, каде init, 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