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 Sunt Rob, și sper că dumneavoastră joc de joc de 15. 4 00:00:17,800 --> 00:00:22,040 Acum, există patru funcții de care aveți nevoie să pună în aplicare în acest program - de inițializare, 5 00:00:22,040 --> 00:00:24,650 desena, muta, și a câștigat. 6 00:00:24,650 --> 00:00:27,230 Deci, să ne uităm la inițializare. 7 00:00:27,230 --> 00:00:32,930 >> Aici, vom vedea primul lucru pe care suntem de gând să faceți este să declare o variabilă 8 00:00:32,930 --> 00:00:34,600 numit contra. 9 00:00:34,600 --> 00:00:37,620 O să fi inițializat la d ori d minus 1. 10 00:00:37,620 --> 00:00:40,200 Amintiți-vă că d este dimensiunea de bord noastre. 11 00:00:40,200 --> 00:00:43,840 Cum de inițializare este de gând să lucreze este ca va pentru a itera peste întregii bord 12 00:00:43,840 --> 00:00:46,050 și vom începe în partea stângă sus. 13 00:00:46,050 --> 00:00:48,570 >> Și să spunem că ne-am au un 4 cu 4 bord. 14 00:00:48,570 --> 00:00:51,220 Deci, din partea stanga sus suntem O să spun este 15. 15 00:00:51,220 --> 00:00:53,960 Și apoi vom doar de gând să conta prin placi, spunând 15, 14, 13, 16 00:00:53,960 --> 00:00:58,510 12, 11, 10, 9, 8, 7, 6, 5, 4, și așa mai departe. 17 00:00:58,510 --> 00:01:03,780 Astfel încât partea din stânga sus, ne așteptăm să fie ori d d minus 1, care în 4 de 4 18 00:01:03,780 --> 00:01:08,290 caz va fi 16 minus 1, care este corect 15. 19 00:01:08,290 --> 00:01:10,885 >> Și acum, aici e unde vom repeta asupra întregului forum. 20 00:01:10,885 --> 00:01:14,720 Și vom stabili fiecare poziție în placa de la valoarea actuală a 21 00:01:14,720 --> 00:01:19,090 contra noastră, iar apoi contra se întâmplă la decrementeze, astfel încât următoarea 22 00:01:19,090 --> 00:01:22,300 poziție ajungem va avea Contor fi una mai mică de 23 00:01:22,300 --> 00:01:23,690 poziția anterioară. 24 00:01:23,690 --> 00:01:26,970 Așa că am avut inițial 15 și decrement contra. 25 00:01:26,970 --> 00:01:30,065 Deci vom aloca 14 la poziție următor, contra decrement, 26 00:01:30,065 --> 00:01:33,710 și vom alocat 13, și așa mai departe. 27 00:01:33,710 --> 00:01:37,620 >> În cele din urmă, trebuie să se ocupe de acel colț caz în care, în cazul în care consiliul are o chiar 28 00:01:37,620 --> 00:01:44,450 dimensiune, apoi face doar 15, 14, 13, 12, tot drumul până la 3, 2, 1, este 29 00:01:44,450 --> 00:01:46,780 O să ne lase cu un consiliu de nerezolvat. 30 00:01:46,780 --> 00:01:49,390 Și ne-am pentru a schimba 1 și 2. 31 00:01:49,390 --> 00:01:52,930 Deci, în cazul în care d mod 2 este egal cu 0, care este cum vom verifica 32 00:01:52,930 --> 00:01:54,410 pentru a vedea dacă e chiar. 33 00:01:54,410 --> 00:01:59,810 În cazul în care d mod 2 este egal cu 0, apoi în rândul d minus 1, care este rândul de jos, și 34 00:01:59,810 --> 00:02:05,430 Poziția d minus 2, sau coloana d minus 2, vom stabili că la 2, și 35 00:02:05,430 --> 00:02:07,860 coloana d minus 3 suntem va seta la 1. 36 00:02:07,860 --> 00:02:12,170 Astfel că e doar de mers înapoi în cazul în care 1 și 2 sunt în prezent. 37 00:02:12,170 --> 00:02:16,270 >> În cele din urmă, vom stabili foarte dreapta jos egal la gol, în cazul în care 38 00:02:16,270 --> 00:02:20,700 gol a fost definit hash în partea de sus ca 0. 39 00:02:20,700 --> 00:02:26,785 Astfel, că nu era strict necesar, deoarece acest lucru pentru bucla va avea 40 00:02:26,785 --> 00:02:30,610 stabilit dreptul de jos la 0, deoarece contor va ajunge in mod natural 0. 41 00:02:30,610 --> 00:02:34,610 Dar care se bazează pe noi, știind că gol a fost trunchiată pentru a găsi un 0. 42 00:02:34,610 --> 00:02:38,280 Dacă aș intra în acest program și mai târziu schimba gol la începutul până la 100, aceasta 43 00:02:38,280 --> 00:02:39,770 ar trebui să funcționeze în continuare. 44 00:02:39,770 --> 00:02:43,180 >> Deci, aceasta este doar asigurându-vă că dreapta jos este de fapt egal cu nostru 45 00:02:43,180 --> 00:02:44,870 valoare necompletată. 46 00:02:44,870 --> 00:02:50,270 În cele din urmă, avem două variabile globale, astfel gol i și j gol, și vom vedea 47 00:02:50,270 --> 00:02:53,360 cele declarate în partea de sus. 48 00:02:53,360 --> 00:02:56,270 Și am de gând să utilizeze cele două global variabile pentru a urmări 49 00:02:56,270 --> 00:02:59,040 poziția de martor, astfel încât să nu trebuie să se uite prin întregul 50 00:02:59,040 --> 00:03:03,890 bord pentru a găsi martor fiecare timp vom încerca să facă o mișcare. 51 00:03:03,890 --> 00:03:08,450 Deci poziția a semifabricatului este întotdeauna de gând să înceapă de la dreapta jos. 52 00:03:08,450 --> 00:03:13,270 Astfel încât partea din dreapta jos este dat de Indicii d minus 1, minus d 1. 53 00:03:13,270 --> 00:03:14,880 Deci, asta e de inițializare. 54 00:03:14,880 --> 00:03:17,040 >> Acum ne-am muta pe pentru a trage. 55 00:03:17,040 --> 00:03:19,370 Deci, remiză va fi similară unde vom repeta 56 00:03:19,370 --> 00:03:20,970 asupra întregului forum. 57 00:03:20,970 --> 00:03:25,400 Și vrem doar pentru a imprima valoarea care este în fiecare poziție a consiliului. 58 00:03:25,400 --> 00:03:29,580 Deci, aici, suntem de imprimare valoarea care este în fiecare poziție a consiliului. 59 00:03:29,580 --> 00:03:32,280 Și observați că facem -. 60 00:03:32,280 --> 00:03:37,410 Si acesta este doar spune printf care indiferent dacă este o cifră unul sau 61 00:03:37,410 --> 00:03:42,010 număr din două cifre, tot vreau să dura până două coloane, în afară de imprimare, 62 00:03:42,010 --> 00:03:46,290 astfel încât, dacă avem două cifre și o numere de cifre, în același bord, nostru 63 00:03:46,290 --> 00:03:49,450 bord va arata in continuare frumos și gradină. 64 00:03:49,450 --> 00:03:54,190 >> Așa că vrem să facem asta pentru fiecare valoare la bord, cu excepția pentru proba-martor. 65 00:03:54,190 --> 00:03:58,260 Deci, în cazul în care poziția în consiliul egal gol, atunci noi în mod special 66 00:03:58,260 --> 00:04:01,730 doriți să imprimați doar o subliniere să reprezinte blanc, în loc de 67 00:04:01,730 --> 00:04:05,150 , indiferent de valoarea gol este de fapt. 68 00:04:05,150 --> 00:04:08,500 >> În cele din urmă, ne-o dorim pentru a imprima o noua linie. 69 00:04:08,500 --> 00:04:11,970 Observați că acest lucru este încă în interiorul exterior de bucla, dar în afara 70 00:04:11,970 --> 00:04:13,200 interior pentru buclă. 71 00:04:13,200 --> 00:04:17,930 Deoarece acest exterior pentru buclă este iterarea peste toate rândurile, și deci aceasta este printf 72 00:04:17,930 --> 00:04:22,130 merge pentru a imprima doar o nouă linie, așa că muta pe pentru a imprima rândul următor. 73 00:04:22,130 --> 00:04:23,910 Și asta este pentru egalitate. 74 00:04:23,910 --> 00:04:27,770 >> Deci, acum să trecem la a muta. 75 00:04:27,770 --> 00:04:32,590 Acum, vom trece mișcare, tigla pe care utilizator a fost introdus în joc - în care 76 00:04:32,590 --> 00:04:36,360 intra tigla care doresc să se mute - și tu ar trebui să se întoarcă un bool, așa 77 00:04:36,360 --> 00:04:39,300 fie adevărat sau fals, în funcție de dacă aceasta mutare a fost de fapt 78 00:04:39,300 --> 00:04:43,360 valabil - fie că țiglă poate fi sa mutat în spațiul gol. 79 00:04:43,360 --> 00:04:48,340 >> Deci, aici, declarăm o variabilă locală, tile_1 și tile_j, care sunt de gând să 80 00:04:48,340 --> 00:04:52,150 fi similar cu blank_i și blank_j, cu excepția faptului că se va ține evidența 81 00:04:52,150 --> 00:04:54,910 Poziția a plăcii. 82 00:04:54,910 --> 00:05:00,370 Acum, aici, vom folosi blank_i și blank_j și spune bine, așa 83 00:05:00,370 --> 00:05:01,930 aici e martor de pe bord. 84 00:05:01,930 --> 00:05:04,420 >> Acum, este dala deasupra semifabricatului? 85 00:05:04,420 --> 00:05:06,210 Este țiglă din partea stângă a semifabricatului? 86 00:05:06,210 --> 00:05:07,420 Este de tigla la dreapta de martor? 87 00:05:07,420 --> 00:05:08,970 Este tigla de mai jos martor? 88 00:05:08,970 --> 00:05:13,330 Deci, dacă tigla este, în oricare dintre aceste poziții, atunci știm că tigla 89 00:05:13,330 --> 00:05:16,390 poate fi mutat în fața locului gol și semifabricatul poate fi mutat în cazul în care 90 00:05:16,390 --> 00:05:18,240 țiglă în prezent este. 91 00:05:18,240 --> 00:05:26,400 >> Deci, aici, ne spune dacă bord la poziția blank_i minus 1 blank_j. 92 00:05:26,400 --> 00:05:31,120 Deci, acest lucru este de a spune este țiglă deasupra martor curent? 93 00:05:31,120 --> 00:05:34,350 Și dacă da, vom aminti care este poziția de tigla. 94 00:05:34,350 --> 00:05:37,870 Tigla este în poziția blank_i minus 1 și blank_j. 95 00:05:37,870 --> 00:05:40,660 acum în primul rând, avem, de asemenea, această verificare chiar aici, deci este blank_i 96 00:05:40,660 --> 00:05:41,760 mai mare de 0. 97 00:05:41,760 --> 00:05:43,410 >> De ce vrem să facem asta? 98 00:05:43,410 --> 00:05:47,290 Ei bine, în cazul în care este martor în rândul de sus de bord, atunci nu vrem să 99 00:05:47,290 --> 00:05:51,240 vezi mai sus martor pentru tigla din nu există nimic deasupra primei 100 00:05:51,240 --> 00:05:52,430 rând de bord. 101 00:05:52,430 --> 00:05:55,950 Acesta este modul în care s-ar putea sfârși prin a obține ceva ca o eroare de segmentare sau 102 00:05:55,950 --> 00:05:59,030 programul ar putea să funcționeze doar în moduri neașteptate. 103 00:05:59,030 --> 00:06:04,310 Deci, acest lucru este de a face sigur că noi nu facem uite în locuri care nu sunt valide. 104 00:06:04,310 --> 00:06:08,470 >> Acum, vom face același lucru pentru toate celelalte combinații posibile. 105 00:06:08,470 --> 00:06:13,250 Deci, aici, suntem în căutarea de mai jos martor pentru a vedea dacă e tigla. 106 00:06:13,250 --> 00:06:16,950 Și avem, de asemenea, să ne asigurăm că suntem nu pe rândul de jos, altfel ne 107 00:06:16,950 --> 00:06:18,910 nu ar trebui să arate pentru țiglă. 108 00:06:18,910 --> 00:06:25,040 Aici, ne vom uita la stânga blanc pentru a vedea dacă e tigla. 109 00:06:25,040 --> 00:06:27,860 Și nu ar trebui să te uiți la stînga dacă suntem în coloana din stânga. 110 00:06:27,860 --> 00:06:30,100 Și aici ne vom uita la dreptul de martor, și nu ar trebui 111 00:06:30,100 --> 00:06:33,340 uita-te la dreapta dacă suntem în coloana din dreapta. 112 00:06:33,340 --> 00:06:37,820 >> Deci, în cazul în care nici unul din aceste lucruri erau adevărate, ceea ce înseamnă că placa nu a fost adiacente 113 00:06:37,820 --> 00:06:39,640 la martor și ne putem întoarce false. 114 00:06:39,640 --> 00:06:41,230 Mutarea nu a fost valid. 115 00:06:41,230 --> 00:06:47,010 Dar, în cazul în care unul dintre acestea au fost adevărate, apoi la acest moment, știm că tile_i și 116 00:06:47,010 --> 00:06:50,540 tile_j sunt egale cu Poziția a plăcii. 117 00:06:50,540 --> 00:06:55,210 Și astfel, putem actualiza placa la poziții tile_i și tile_j. 118 00:06:55,210 --> 00:06:59,820 Știm că noua valoare va fi martor și că blank_i poziție 119 00:06:59,820 --> 00:07:02,950 blank_j, care a fost originalul blank - știm că tigla este de gând să 120 00:07:02,950 --> 00:07:04,030 muta acolo. 121 00:07:04,030 --> 00:07:07,610 >> Observați că nu avem de fapt de a face o reală de swap aici, din moment ce știm 122 00:07:07,610 --> 00:07:09,850 valorile care trebuie să fie introduse în aceste poziții. 123 00:07:09,850 --> 00:07:13,780 Nu avem nevoie de o temporar variabilă în jurul. 124 00:07:13,780 --> 00:07:16,920 >> În cele din urmă, trebuie să ne amintim că noi au variabilele globale, care sunt 125 00:07:16,920 --> 00:07:18,980 urmărirea poziției a semifabricatului. 126 00:07:18,980 --> 00:07:22,780 Așa că vrem să actualizeze poziția de blanc pentru a fi în cazul în care țiglă 127 00:07:22,780 --> 00:07:24,190 inițial a fost. 128 00:07:24,190 --> 00:07:27,680 În cele din urmă, ne-am întoarce adevărat, deoarece mutarea a fost de succes. 129 00:07:27,680 --> 00:07:31,110 Am schimba cu succes gol cu ​​tigla. 130 00:07:31,110 --> 00:07:34,890 >> În regulă, așa că am trecut nevoie pentru a verifica castigat. 131 00:07:34,890 --> 00:07:39,900 Deci, a castigat întoarce în mod similar un bool unde adevărată va indica faptul 132 00:07:39,900 --> 00:07:41,460 utilizator a câștigat jocul. 133 00:07:41,460 --> 00:07:43,780 Și fals se indică faptul că jocul este încă în desfășurare. 134 00:07:43,780 --> 00:07:46,340 Utilizatorul nu a castigat. 135 00:07:46,340 --> 00:07:52,100 Deci, acest lucru va fi destul de mult opusul de inițializare, în cazul în care init, 136 00:07:52,100 --> 00:07:56,920 amintiți-vă, am inițializa placa la 15, 14, 13, 12, etc. 137 00:07:56,920 --> 00:08:03,000 În timp ce a castigat, vrem pentru a verifica dacă bord este 1, 2, 3, 4, 5, și așa mai departe. 138 00:08:03,000 --> 00:08:06,600 >> Deci, vom inițializa nostru contracara la 1, deoarece asta e ceea ce partea de sus 139 00:08:06,600 --> 00:08:08,400 stâng al consiliului ar trebui să fie. 140 00:08:08,400 --> 00:08:10,860 Și apoi vom buclă asupra întregului forum. 141 00:08:10,860 --> 00:08:13,690 Să ignore această condiție pentru o secundă. 142 00:08:13,690 --> 00:08:18,410 Și această condiție este doar de gând să verificare este placa de la această poziție 143 00:08:18,410 --> 00:08:20,790 egal cu numărul actual? 144 00:08:20,790 --> 00:08:27,040 Dacă este așa, incrementa numărătoare, astfel încât poziția următoare ne uităm la unul mai mare 145 00:08:27,040 --> 00:08:29,690 decât poziția suntem la chiar acum. 146 00:08:29,690 --> 00:08:32,700 >> Deci, asta e cum ajungem stânga sus ar trebui să fie 1. 147 00:08:32,700 --> 00:08:33,950 Incrementa numărul 2. 148 00:08:33,950 --> 00:08:35,010 Uită-te la poziția următoare. 149 00:08:35,010 --> 00:08:35,690 Este acest 2? 150 00:08:35,690 --> 00:08:37,659 Dacă este așa, incrementa numărul 3. 151 00:08:37,659 --> 00:08:39,179 Poziția următoare, este aceasta 3? 152 00:08:39,179 --> 00:08:42,440 Dacă este așa, incrementa numărul de la 4, și așa mai departe. 153 00:08:42,440 --> 00:08:49,190 Deci, dacă nu există nici o poziție privind bord care nu are egal cu numărul nostru, 154 00:08:49,190 --> 00:08:52,640 apoi ne-am dori să se întoarcă false de la care înseamnă că există unele țiglă, care este 155 00:08:52,640 --> 00:08:55,490 nu în poziția corectă. 156 00:08:55,490 --> 00:08:58,810 >> Deci, aici, ceea ce face această condiție? 157 00:08:58,810 --> 00:09:02,170 Ei bine, amintiți-vă că este martor ar trebui să meargă pe partea din dreapta jos. 158 00:09:02,170 --> 00:09:06,180 Și valoarea martor nu s-ar putea egală neapărat valoarea a 159 00:09:06,180 --> 00:09:11,080 contracara, care urmează să fie atins la dreapta jos. 160 00:09:11,080 --> 00:09:15,760 Așa că ne-am dori în mod special pentru a verifica dacă i egal este egal cu d minus 1 și j este egal 161 00:09:15,760 --> 00:09:19,470 d este egal cu minus 1 - care spune dacă ne-am se uita la partea din dreapta jos a 162 00:09:19,470 --> 00:09:22,050 bord -, atunci ne-am doresc să continue. 163 00:09:22,050 --> 00:09:26,200 Vrem să săriți peste acest special repetare a buclei pentru. 164 00:09:26,200 --> 00:09:31,250 >> Și astfel, dacă reușim să trecem prin asta imbricate pentru buclă, ceea ce înseamnă că 165 00:09:31,250 --> 00:09:34,690 nu a existat nici o țiglă care a fost în poziția incorectă. 166 00:09:34,690 --> 00:09:38,900 Și ne-am iesi din bucla și vin aici, unde ne putem întoarce adevărat. 167 00:09:38,900 --> 00:09:41,800 Toate piesele au fost în pozițiile corecte și asta înseamnă că utilizatorul are 168 00:09:41,800 --> 00:09:43,230 a castigat jocul. 169 00:09:43,230 --> 00:09:44,460 Și asta e tot. 170 00:09:44,460 --> 00:09:46,550 Numele meu este Rob Bowden, iar acest lucru a fost de 15. 171 00:09:46,550 --> 00:09:52,726