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 Ek is Rob, en ek hoop dat jou spel vir die spel van 15. 4 00:00:17,800 --> 00:00:22,040 Nou, daar is vier funksies wat jy nodig het te implementeer in hierdie program - init, 5 00:00:22,040 --> 00:00:24,650 trek, beweeg, en gewen. 6 00:00:24,650 --> 00:00:27,230 So, laat ons kyk na init. 7 00:00:27,230 --> 00:00:32,930 >> Hier sien ons die eerste ding wat ons is gaan doen, is verklaar 'n veranderlike 8 00:00:32,930 --> 00:00:34,600 genoem toonbank. 9 00:00:34,600 --> 00:00:37,620 Dit gaan geïnisialiseer word te d keer d minus 1. 10 00:00:37,620 --> 00:00:40,200 Onthou dat D die dimensie van ons raad. 11 00:00:40,200 --> 00:00:43,840 Hoe init gaan werk is dit gaan te Itereer oor die hele direksie 12 00:00:43,840 --> 00:00:46,050 en ons gaan om te begin links bo. 13 00:00:46,050 --> 00:00:48,570 >> En laat ons net sê ons het 'n 4 by 4 raad. 14 00:00:48,570 --> 00:00:51,220 So het die top verlaat ons gaan om te sê, is 15. 15 00:00:51,220 --> 00:00:53,960 En dan is ons net gaan om te tel middel van die style, sê 15, 14, 13, 16 00:00:53,960 --> 00:00:58,510 12, 11, 10, 9, 8, 7, 6, 5, 4, en so aan. 17 00:00:58,510 --> 00:01:03,780 So het die top links, verwag ons om te wees d keer d minus 1, wat in die 4 by 4 18 00:01:03,780 --> 00:01:08,290 geval gaan 16 minus te wees 1, wat is korrek 15. 19 00:01:08,290 --> 00:01:10,885 >> En hier is waar ons gaan Itereer oor die hele raad. 20 00:01:10,885 --> 00:01:14,720 En ons gaan elke posisie te stel in die raad aan die huidige waarde van 21 00:01:14,720 --> 00:01:19,090 ons toonbank, en dan toonbank gaan te decrement, sodat die volgende 22 00:01:19,090 --> 00:01:22,300 posisie wat ons bereik gaan hê counter een minder as 23 00:01:22,300 --> 00:01:23,690 die vorige posisie. 24 00:01:23,690 --> 00:01:26,970 So ons het aanvanklik 15 en Trek 'toonbank. 25 00:01:26,970 --> 00:01:30,065 So dan gaan ons wys 14 tot die volgende posisie, decrement toonbank, 26 00:01:30,065 --> 00:01:33,710 en ons gaan opgedra 13, en so aan. 27 00:01:33,710 --> 00:01:37,620 >> Ten slotte, moet ons die hoek te hanteer geval waar, indien die raad het 'n nog 28 00:01:37,620 --> 00:01:44,450 dimensie, dan net doen 15, 14, 13, 12, al die pad af tot 3, 2, 1, is 29 00:01:44,450 --> 00:01:46,780 gaan ons verlaat met 'n onopgeloste raad. 30 00:01:46,780 --> 00:01:49,390 En ons het om te ruil die 1 en die 2. 31 00:01:49,390 --> 00:01:52,930 Dus, as d mod 2 is gelyk aan 0, dis hoe ons gaan om te kyk 32 00:01:52,930 --> 00:01:54,410 om te sien of dit is selfs. 33 00:01:54,410 --> 00:01:59,810 As d mod 2 is gelyk aan 0, dan in ry D minus 1, wat is die onderste ry, en 34 00:01:59,810 --> 00:02:05,430 posisie d minus 2, of kolom d minus 2, ons gaan om dit te stel tot 2, en 35 00:02:05,430 --> 00:02:07,860 kolom d minus 3 ons gaan stel om 1. 36 00:02:07,860 --> 00:02:12,170 So dit is net die omkeer waar die 1 en 2 op die oomblik is. 37 00:02:12,170 --> 00:02:16,270 >> Ten slotte, ons gaan na die baie ingestel onder regs gelyk aan leë, waar 38 00:02:16,270 --> 00:02:20,700 leeg is hash gedefinieer aan die bokant as 0. 39 00:02:20,700 --> 00:02:26,785 So, dit was nie streng nodig, aangesien dit vir lus gaan hê 40 00:02:26,785 --> 00:02:30,610 stel die onderkant reg om 0, aangesien toonbank sal natuurlik bereik 0. 41 00:02:30,610 --> 00:02:34,610 Maar wat staatmaak op ons om te weet dat leeg is hashed n 0 te vind. 42 00:02:34,610 --> 00:02:38,280 As ek gaan in hierdie program en later verander leeg by die top 100, is dit 43 00:02:38,280 --> 00:02:39,770 moet nog werk. 44 00:02:39,770 --> 00:02:43,180 >> So dit is net om seker te maak dat die regs onder is eintlik gelyk aan ons 45 00:02:43,180 --> 00:02:44,870 leë waarde. 46 00:02:44,870 --> 00:02:50,270 Ten slotte, ons het twee globale veranderlikes, so leeg en ek leeg j, en ons sien 47 00:02:50,270 --> 00:02:53,360 diegene verklaar aan die bokant. 48 00:02:53,360 --> 00:02:56,270 En ons gaan die twee globale te gebruik veranderlikes spoor van die te hou 49 00:02:56,270 --> 00:02:59,040 posisie van die leë, sodat ons dit nie doen nie nodig het om te kyk deur die hele 50 00:02:59,040 --> 00:03:03,890 boord van die leë elke enkele te vind tyd dat ons probeer om 'n skuif te maak. 51 00:03:03,890 --> 00:03:08,450 So het die posisie van die leë altyd is gaan om te begin aan die onderkant regs. 52 00:03:08,450 --> 00:03:13,270 So die onderkant regs gegee word deur indekse d minus 1, d minus 1. 53 00:03:13,270 --> 00:03:14,880 So, dit is init. 54 00:03:14,880 --> 00:03:17,040 >> Nou beweeg ons op te trek. 55 00:03:17,040 --> 00:03:19,370 So, is gelykop gaan dieselfde wees waar ons gaan Itereer 56 00:03:19,370 --> 00:03:20,970 oor die hele raad. 57 00:03:20,970 --> 00:03:25,400 En ons wil net die waarde te druk dit is in elke posisie van die raad. 58 00:03:25,400 --> 00:03:29,580 So hier is ons die waarde wat die druk in elke posisie van die raad. 59 00:03:29,580 --> 00:03:32,280 En sien dat ons doen -. 60 00:03:32,280 --> 00:03:37,410 En dit is net vertel dat printf ongeag of dit 'n een syfer of 61 00:03:37,410 --> 00:03:42,010 twee-syfer-nommer, wat ons nog wil om dit te neem twee kolomme in die gedrukte uit, 62 00:03:42,010 --> 00:03:46,290 sodat as ons twee syfer en een syfer getalle in die dieselfde raad, ons 63 00:03:46,290 --> 00:03:49,450 raad sal steeds mooi en vierkante. 64 00:03:49,450 --> 00:03:54,190 >> So ons wil om dit te doen vir elke waarde in die raad, behalwe vir die leeg. 65 00:03:54,190 --> 00:03:58,260 So, as die posisie in die raad is gelyk aan die leë, dan het ons spesifiek 66 00:03:58,260 --> 00:04:01,730 wil uit te druk net 'n underscore die leë te stel, in plaas van 67 00:04:01,730 --> 00:04:05,150 ongeag die waarde van die leë eintlik is. 68 00:04:05,150 --> 00:04:08,500 >> Ten slotte, ons wil druk 'n nuwe lyn. 69 00:04:08,500 --> 00:04:11,970 Let daarop dat hierdie is nog in die buitenste lus, maar buite 70 00:04:11,970 --> 00:04:13,200 die binneste lus. 71 00:04:13,200 --> 00:04:17,930 Aangesien hierdie buitenste lus vir 'iterating oor al die rye, en so die printf is 72 00:04:17,930 --> 00:04:22,130 gaan net druk 'n nuwe lyn, sodat ons beweeg na die druk van die volgende ry. 73 00:04:22,130 --> 00:04:23,910 En dit is dit vir die trekking. 74 00:04:23,910 --> 00:04:27,770 >> So, laat ons nou beweeg op te skuif. 75 00:04:27,770 --> 00:04:32,590 Nou, ons slaag skuif, die teël wat die gebruiker is opgeneem in die spel - hulle 76 00:04:32,590 --> 00:04:36,360 Tik die teël hulle wil beweeg - en jy is veronderstel om 'n Bool om terug te keer, sodat 77 00:04:36,360 --> 00:04:39,300 waar of vals is, afhangende van of dit skuif was eintlik 78 00:04:39,300 --> 00:04:43,360 geldig - of dit teël kan wees verhuis na die leë ruimte. 79 00:04:43,360 --> 00:04:48,340 >> So hier het ons verklaar 'n plaaslike veranderlike, tile_1 en tile_j, wat gaan 80 00:04:48,340 --> 00:04:52,150 wees soortgelyk aan blank_i en blank_j, behalwe dit gaan die spoor van die te hou 81 00:04:52,150 --> 00:04:54,910 posisie van die teël. 82 00:04:54,910 --> 00:05:00,370 Nou hier gaan ons om te gebruik blank_i en blank_j en sê alles reg, sodat 83 00:05:00,370 --> 00:05:01,930 hier is die leë op die bord. 84 00:05:01,930 --> 00:05:04,420 >> Nou, is die teël bo die leë? 85 00:05:04,420 --> 00:05:06,210 Is die teël aan die linkerkant van die leë? 86 00:05:06,210 --> 00:05:07,420 Is die teël aan die regterkant van die leë? 87 00:05:07,420 --> 00:05:08,970 Is die teël onder die leë? 88 00:05:08,970 --> 00:05:13,330 Dus, as die teël is in enige van daardie posisies, dan weet ons dat die teël 89 00:05:13,330 --> 00:05:16,390 kan in die leë plek verskuif word en die leë verskuif kan word na die plek waar die 90 00:05:16,390 --> 00:05:18,240 teël is tans. 91 00:05:18,240 --> 00:05:26,400 >> So hier is, sê ons as raad by posisie blank_i minus 1 blank_j. 92 00:05:26,400 --> 00:05:31,120 So dit sê, is die teël bo die huidige leeg? 93 00:05:31,120 --> 00:05:34,350 En as dit so is, gaan ons om te onthou dit is die posisie van die teël. 94 00:05:34,350 --> 00:05:37,870 Die teël is in posisie blank_i minus 1 en blank_j. 95 00:05:37,870 --> 00:05:40,660 nou eers, ons het ook die tjek reg hier, so blank_i is 96 00:05:40,660 --> 00:05:41,760 groter as 0. 97 00:05:41,760 --> 00:05:43,410 >> Waarom wil ons dit te doen? 98 00:05:43,410 --> 00:05:47,290 Wel, as die leë is in die boonste ry van die direksie, dan wil ons nie te 99 00:05:47,290 --> 00:05:51,240 kyk bo die leë vir die teël sedert daar is niks behalwe die top 100 00:05:51,240 --> 00:05:52,430 ry van die direksie. 101 00:05:52,430 --> 00:05:55,950 Dit is hoe jy kan uiteindelik kry iets soos 'n segmentering skuld of 102 00:05:55,950 --> 00:05:59,030 jou program mag dalk net werk in onverwagse maniere. 103 00:05:59,030 --> 00:06:04,310 So, is dit om seker te maak dat ons dit nie doen nie kyk in plekke wat nie geldig is. 104 00:06:04,310 --> 00:06:08,470 >> Nou gaan ons dieselfde ding om te doen vir alle ander moontlike kombinasies. 105 00:06:08,470 --> 00:06:13,250 So hier is, is ons op soek onder die oop om te sien of dit is die teël. 106 00:06:13,250 --> 00:06:16,950 En ons het ook om seker te maak ons ​​is nie op die onderste ry, anders sal ons 107 00:06:16,950 --> 00:06:18,910 moet nie kyk vir die teël. 108 00:06:18,910 --> 00:06:25,040 Hier gaan ons kyk na die linkerkant van die leë om te sien of dit is die teël. 109 00:06:25,040 --> 00:06:27,860 En ons moet nie kyk na links As ons in die linker kolom. 110 00:06:27,860 --> 00:06:30,100 En hier gaan ons kyk na die regs van die leë, en ons moet nie 111 00:06:30,100 --> 00:06:33,340 kyk na die reg as ons in die regterkantste kolom. 112 00:06:33,340 --> 00:06:37,820 >> Dus, as een van daardie dinge waar was, wat beteken dat die teël was nie aangrensende 113 00:06:37,820 --> 00:06:39,640 na die leë en ons kan terugkeer onwaar. 114 00:06:39,640 --> 00:06:41,230 Die skuif was nie geldig nie. 115 00:06:41,230 --> 00:06:47,010 Maar, as een van daardie waar is, dan ten hierdie punt, ons weet dat tile_i en 116 00:06:47,010 --> 00:06:50,540 tile_j is gelyk aan die posisie van die teël. 117 00:06:50,540 --> 00:06:55,210 En so kan ons die raad by te werk posisies tile_i en tile_j. 118 00:06:55,210 --> 00:06:59,820 Ons weet dat die nuwe waarde sal die leë wees en dat die posisie blank_i 119 00:06:59,820 --> 00:07:02,950 blank_j, wat was die oorspronklike leeg - ons weet die teël gaan 120 00:07:02,950 --> 00:07:04,030 beweeg daar. 121 00:07:04,030 --> 00:07:07,610 >> Sien ons nie eintlik hoef te doen om 'n werklike ruil hier, aangesien ons weet dat die 122 00:07:07,610 --> 00:07:09,850 waardes wat ingevoeg word moet in daardie posisies. 123 00:07:09,850 --> 00:07:13,780 Ons hoef nie 'n tydelike veranderlike rond. 124 00:07:13,780 --> 00:07:16,920 >> Ten slotte, moet ons onthou dat ons het ons globale veranderlikes wat 125 00:07:16,920 --> 00:07:18,980 hou van die posisie van die leë. 126 00:07:18,980 --> 00:07:22,780 So wil ons die posisie van te werk die leë waar die teël te wees 127 00:07:22,780 --> 00:07:24,190 oorspronklik was. 128 00:07:24,190 --> 00:07:27,680 Ten slotte, ons terug waar nie, aangesien die skuif was suksesvol. 129 00:07:27,680 --> 00:07:31,110 Ons suksesvol ruil die leë met die teël. 130 00:07:31,110 --> 00:07:34,890 >> Alle reg, sodat ons laaste nodig gewen om seker te maak. 131 00:07:34,890 --> 00:07:39,900 So, het insgelyks gee 'n Bool waar ware gaan om aan te dui dat die 132 00:07:39,900 --> 00:07:41,460 gebruiker het die wedstryd gewen. 133 00:07:41,460 --> 00:07:43,780 En vals is wat aandui dat die spel is nog aan die gang. 134 00:07:43,780 --> 00:07:46,340 Die gebruiker het nie gewen het. 135 00:07:46,340 --> 00:07:52,100 So, is dit gaan wees pretty much die teenoorgestelde van init, waar init, 136 00:07:52,100 --> 00:07:56,920 onthou, ons inisialiseer die direksie 15, 14, 13, 12, ensovoorts. 137 00:07:56,920 --> 00:08:03,000 Terwyl gewen het, ons wil om te kyk of die direksie is 1, 2, 3, 4, 5, en so aan. 138 00:08:03,000 --> 00:08:06,600 >> So, gaan ons inisialiseer ons werk tot 1 want dit is wat die top 139 00:08:06,600 --> 00:08:08,400 links van die raad moet wees. 140 00:08:08,400 --> 00:08:10,860 En dan gaan ons lus oor die hele raad. 141 00:08:10,860 --> 00:08:13,690 Kom ons ignoreer hierdie toestand vir 'n tweede. 142 00:08:13,690 --> 00:08:18,410 En hierdie toestand is net gaan om te tjek is om die direksie by hierdie posisie 143 00:08:18,410 --> 00:08:20,790 gelyk is aan die huidige aanklagte? 144 00:08:20,790 --> 00:08:27,040 As dit so is, inkrementeer die telling so dat die volgende posisie ons kyk na een hoër 145 00:08:27,040 --> 00:08:29,690 as die posisie is ons op die oomblik. 146 00:08:29,690 --> 00:08:32,700 >> So dit is hoe ons die links bo moet wees 1. 147 00:08:32,700 --> 00:08:33,950 Inkrementeer die telling tot 2. 148 00:08:33,950 --> 00:08:35,010 Kyk na die volgende posisie. 149 00:08:35,010 --> 00:08:35,690 Is dit 2? 150 00:08:35,690 --> 00:08:37,659 As dit so is, inkrementeer die telling tot 3. 151 00:08:37,659 --> 00:08:39,179 Volgende posisie, is dit 3? 152 00:08:39,179 --> 00:08:42,440 As dit so is, inkrementeer die telling tot 4, en so aan. 153 00:08:42,440 --> 00:08:49,190 So, as daar enige posisie op die raad wat nie ons telling gelyk, 154 00:08:49,190 --> 00:08:52,640 dan wil ons valse sedert die terugkeer beteken daar is 'n paar teël wat 155 00:08:52,640 --> 00:08:55,490 nie in die regte posisie. 156 00:08:55,490 --> 00:08:58,810 >> So hier is, wat is hierdie toestand te doen? 157 00:08:58,810 --> 00:09:02,170 Wel, onthou dat die leë is veronderstel is om te gaan op die onderkant regs. 158 00:09:02,170 --> 00:09:06,180 En die leë se waarde mag nie noodwendig die waarde van die gelyke 159 00:09:06,180 --> 00:09:11,080 werk wat gaan bereik word aan die onderkant regs. 160 00:09:11,080 --> 00:09:15,760 So het ons spesifiek wil om te kyk of ek gelyk is gelyk aan d minus 1 en j gelykes 161 00:09:15,760 --> 00:09:19,470 gelyk aan d minus 1 - wat sê as ons is op soek na die onderkant regs van 162 00:09:19,470 --> 00:09:22,050 die raad - dan moet ons net wil voortgaan. 163 00:09:22,050 --> 00:09:26,200 Ons wil hierdie spesifieke te slaan iterasie van die lus. 164 00:09:26,200 --> 00:09:31,250 >> En so, as ons beheer te kry deur middel van hierdie geneste for-lus, wat beteken dat 165 00:09:31,250 --> 00:09:34,690 daar was geen teël wat in die verkeerde posisie. 166 00:09:34,690 --> 00:09:38,900 En ons breek uit van die lus en kom hier waar ons kan terugkeer waar. 167 00:09:38,900 --> 00:09:41,800 Alle teëls in die korrekte posisies en dit beteken dat die gebruiker 168 00:09:41,800 --> 00:09:43,230 het die wedstryd gewen. 169 00:09:43,230 --> 00:09:44,460 En dit is dit. 170 00:09:44,460 --> 00:09:46,550 My naam is Rob Bowden, en dit was 15. 171 00:09:46,550 --> 00:09:52,726