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 Es esmu Rob, un es ceru, ka jūsu spēle spēles 15. 4 00:00:17,800 --> 00:00:22,040 Tagad tur ir četras funkcijas, jums ir nepieciešams īstenot šajā programmā - init, 5 00:00:22,040 --> 00:00:24,650 zīmēt, pārvietot, un uzvarēja. 6 00:00:24,650 --> 00:00:27,230 Tātad, pieņemsim apskatīt init. 7 00:00:27,230 --> 00:00:32,930 >> Šeit mēs redzam, ka pirmā lieta, ko mēs esat gatavojas darīt, ir atzīt mainīgo 8 00:00:32,930 --> 00:00:34,600 sauc counter. 9 00:00:34,600 --> 00:00:37,620 Tas būs inicializēts mīnus pie d reizes d 1. 10 00:00:37,620 --> 00:00:40,200 Atcerieties, ka d ir dimensija mūsu kuģa. 11 00:00:40,200 --> 00:00:43,840 Kā init dodas uz darbu, ir tas, kas notiek atkārtot visā kuģa 12 00:00:43,840 --> 00:00:46,050 un mēs esam gatavojas sākt augšpusē pa kreisi. 13 00:00:46,050 --> 00:00:48,570 >> Un pieņemsim tikai teikt, ka mēs ir 4 pa 4 dēli. 14 00:00:48,570 --> 00:00:51,220 Tā augšējā kreisajā stūrī, mēs esam teiksiet, ir 15. 15 00:00:51,220 --> 00:00:53,960 Un tad mēs esam tikai gatavojas skaits pa dēļiem, sakot 15, 14, 13, 16 00:00:53,960 --> 00:00:58,510 12, 11, 10, 9, 8, 7, 6, 5, 4, un tā tālāk. 17 00:00:58,510 --> 00:01:03,780 Tā augšējā kreisajā stūrī, mēs sagaidām, ka būs d reizes d mīnus 1, kas ir 4 līdz 4 18 00:01:03,780 --> 00:01:08,290 lieta būs 16 mīnus 1, kas ir pareizi 15. 19 00:01:08,290 --> 00:01:10,885 >> Un tagad, lūk, kur mēs ejam atkārtot visā kuģa. 20 00:01:10,885 --> 00:01:14,720 Un mēs ejam, lai uzstādītu katru pozīciju valde uz pašreizējo vērtību 21 00:01:14,720 --> 00:01:19,090 mūsu counter, un pēc tam counter notiek līdz decrement, tā, ka nākamais 22 00:01:19,090 --> 00:01:22,300 pozīciju mēs sasniedzam nāksies counter būt viens mazāk nekā 23 00:01:22,300 --> 00:01:23,690 Iepriekšējais amats. 24 00:01:23,690 --> 00:01:26,970 Tāpēc mēs sākotnēji bija 15, un Samazināt skaitītāju. 25 00:01:26,970 --> 00:01:30,065 Tātad, tad mēs ejam, lai piešķirtu 14 nākamais amats, samazinājums ir skaitītājs, 26 00:01:30,065 --> 00:01:33,710 un mēs ejam piešķirts 13, un tā tālāk. 27 00:01:33,710 --> 00:01:37,620 >> Visbeidzot, mums ir nepieciešams, lai apstrādātu šo stūri gadījums, ja valde ir vēl 28 00:01:37,620 --> 00:01:44,450 dimensija, tad tikai dara 15, 14, 13, 12, galam, 3, 2, 1, ir 29 00:01:44,450 --> 00:01:46,780 gatavojas atstāt mūs ar neatrisināmu kuģa. 30 00:01:46,780 --> 00:01:49,390 Un mums ir swap 1 un 2. 31 00:01:49,390 --> 00:01:52,930 Tātad, ja d mod 2 ir vienāds ar 0, tas ir kā mēs ejam, lai pārbaudītu 32 00:01:52,930 --> 00:01:54,410 lai redzētu, vai tas ir pat. 33 00:01:54,410 --> 00:01:59,810 Ja d mod 2 ir vienāds ar 0, tad rindā d mīnus 1, kas ir apakšējā rinda, un 34 00:01:59,810 --> 00:02:05,430 pozīciju d mīnus 2, vai kolonna d mīnus 2, mēs ejam, lai uzstādītu, ka līdz 2, un 35 00:02:05,430 --> 00:02:07,860 ailē d mīnus 3 mēs esam būs iestatīts uz 1. 36 00:02:07,860 --> 00:02:12,170 Tāpēc, ka ir tikai atpakaļgaitā, kur 1 un 2 šobrīd ir. 37 00:02:12,170 --> 00:02:16,270 >> Visbeidzot, mēs ejam, lai uzstādītu ļoti apakšējā labajā vienāds ar tukšu, ja 38 00:02:16,270 --> 00:02:20,700 tukša ir hash definēts augšdaļā, kā 0. 39 00:02:20,700 --> 00:02:26,785 Tāpēc, ka tas nav absolūti nepieciešams, jo šī cilpa nāksies 40 00:02:26,785 --> 00:02:30,610 noteikt apakšējo tiesības uz 0, jo counter protams sasniegs 0. 41 00:02:30,610 --> 00:02:34,610 Bet, kas paļaujas uz mums, zinot, ka tukšu tika sajaukts, lai atrastu 0. 42 00:02:34,610 --> 00:02:38,280 Ja es iedziļināties šajā programmā, un vēlāk mainīt tukšu augšpusē līdz 100, tas 43 00:02:38,280 --> 00:02:39,770 būtu joprojām strādā. 44 00:02:39,770 --> 00:02:43,180 >> Tāpēc tas ir tikai pārliecinoties, ka apakšējā labajā faktiski vienāda ar mūsu 45 00:02:43,180 --> 00:02:44,870 tukša vērtība. 46 00:02:44,870 --> 00:02:50,270 Visbeidzot, mums ir divas pasaules mainīgie, tik tukša i un tukšu j, un mēs redzam, 47 00:02:50,270 --> 00:02:53,360 tās, kuras augšgalā. 48 00:02:53,360 --> 00:02:56,270 Un mēs esam gatavojas izmantot šīs divas pasaules mēroga mainīgie, lai sekotu 49 00:02:56,270 --> 00:02:59,040 stāvokli tukšu, tā ka mums nav nepieciešams meklēt pa visu 50 00:02:59,040 --> 00:03:03,890 valde, lai atrastu tukšu katru reizi, kad mēs cenšamies, lai pārvietotos. 51 00:03:03,890 --> 00:03:08,450 Tāpēc pozīcija tukšās vienmēr ir gatavojas sākt apakšējā labajā stūrī. 52 00:03:08,450 --> 00:03:13,270 Tā apakšējā labajā ievada indeksi d mīnus 1, d mīnus 1. 53 00:03:13,270 --> 00:03:14,880 Tātad, tas ir init. 54 00:03:14,880 --> 00:03:17,040 >> Tagad mēs pāriet uz izdarīt. 55 00:03:17,040 --> 00:03:19,370 Tātad, izdarīt būs līdzīgi kur mēs ejam atkārtot 56 00:03:19,370 --> 00:03:20,970 visā kuģa. 57 00:03:20,970 --> 00:03:25,400 Un mēs vienkārši vēlamies, lai izdrukātu vērtību kas ir katrā pozīcijā kuģa. 58 00:03:25,400 --> 00:03:29,580 Tāpēc šeit mēs esam drukāšanas vērtību, kas ir katrā pozīcijā uz kuģa. 59 00:03:29,580 --> 00:03:32,280 Un paziņo, ka mēs darām -. 60 00:03:32,280 --> 00:03:37,410 Un tas ir tikai stāsta printf ka neatkarīgi no tā, ja tas ir viens cipars vai 61 00:03:37,410 --> 00:03:42,010 divciparu skaitlis, mēs joprojām gribam, lai aizņem divas kolonnas izdrukas, 62 00:03:42,010 --> 00:03:46,290 tā, ka, ja mums ir divi ciparu un viena ciparu numurus paša kuģa, mūsu 63 00:03:46,290 --> 00:03:49,450 valde joprojām izskatās jauki un kvadrātveida. 64 00:03:49,450 --> 00:03:54,190 >> Tāpēc mēs vēlamies darīt, ka katru vērtības uz kuģa, izņemot tukšu. 65 00:03:54,190 --> 00:03:58,260 Tātad, ja pozīcija kuģa vienāds tukšs, tad mēs īpaši 66 00:03:58,260 --> 00:04:01,730 vēlaties izdrukāt tikai pasvītrojumu pārstāvēt tukšu, tā vietā, lai 67 00:04:01,730 --> 00:04:05,150 neatkarīgi vērtība tukšs patiesībā ir. 68 00:04:05,150 --> 00:04:08,500 >> Visbeidzot, mēs vēlamies, lai drukātu out jaunu līniju. 69 00:04:08,500 --> 00:04:11,970 Ievērojiet, ka tas joprojām ir iekšā ārējā cilpa, bet ārpus 70 00:04:11,970 --> 00:04:13,200 iekšējo cilpa. 71 00:04:13,200 --> 00:04:17,930 Tā kā šis ārējā cilpa ir atkārtojot pār visām rindām, un tāpēc šī printf ir 72 00:04:17,930 --> 00:04:22,130 gatavojas tikai drukāt jaunu līniju, tāpēc mēs pāriet uz izdrukāt nākamo rindu. 73 00:04:22,130 --> 00:04:23,910 Un tas ir tas, lai izlozē. 74 00:04:23,910 --> 00:04:27,770 >> Tātad, tagad pieņemsim pāriet uz pārvietoties. 75 00:04:27,770 --> 00:04:32,590 Tagad mums iet pārvietot, flīzes, ka lietotājs ir iekļauta spēlē - viņi 76 00:04:32,590 --> 00:04:36,360 ievadiet flīžu viņi vēlas, lai pārvietotos - un jūs vajadzēja atgriezties bool, tāpēc 77 00:04:36,360 --> 00:04:39,300 nu patiess vai nepatiess, atkarībā no tā, vai šis solis bija patiešām 78 00:04:39,300 --> 00:04:43,360 spēkā - vai tas flīzes var būt pārcēlās uz tukšu vietu. 79 00:04:43,360 --> 00:04:48,340 >> Tāpēc šeit mēs paziņojam vietējo mainīgais, tile_1 un tile_j, kas gatavojas 80 00:04:48,340 --> 00:04:52,150 būt līdzīga blank_i un blank_j, izņemot tas notiek, lai sekotu 81 00:04:52,150 --> 00:04:54,910 nostāju flīzes. 82 00:04:54,910 --> 00:05:00,370 Tagad šeit mēs esam gatavojas izmantot blank_i un blank_j un teikt visas tiesības, lai 83 00:05:00,370 --> 00:05:01,930 šeit ir tukša uz kuģa. 84 00:05:01,930 --> 00:05:04,420 >> Tagad ir flīžu virs tukšu? 85 00:05:04,420 --> 00:05:06,210 Ir flīzes pa kreisi no tukšās? 86 00:05:06,210 --> 00:05:07,420 Ir flīzes pa labi no tukšās? 87 00:05:07,420 --> 00:05:08,970 Ir zem tukšu flīzes? 88 00:05:08,970 --> 00:05:13,330 Tātad, ja flīžu ir kāda no tiem pozīcijas, tad mēs zinām, ka flīžu 89 00:05:13,330 --> 00:05:16,390 var tikt pārvietota uz tukšu vietas un blank var pārvietot uz vietu, kur 90 00:05:16,390 --> 00:05:18,240 flīzes patlaban. 91 00:05:18,240 --> 00:05:26,400 >> Tātad šeit, mēs sakām, ja valde ir stāvoklī blank_i mīnus 1 blank_j. 92 00:05:26,400 --> 00:05:31,120 Tāpēc tas ir saprotams, ir flīžu virs pašreizējā tukšās analīzes? 93 00:05:31,120 --> 00:05:34,350 Un, ja tā, tad mēs ejam atcerēties , kas ir stāvoklis flīžu. 94 00:05:34,350 --> 00:05:37,870 Flīzes ir pozīcijā blank_i mīnus 1 un blank_j. 95 00:05:37,870 --> 00:05:40,660 tagad, pirmkārt, mums ir arī šo pārbaudi tieši šeit, tāpēc blank_i ir 96 00:05:40,660 --> 00:05:41,760 lielāks par 0. 97 00:05:41,760 --> 00:05:43,410 >> Kāpēc mēs gribam to darīt? 98 00:05:43,410 --> 00:05:47,290 Nu, ja blank ir augšējā rindā valdes, tad mēs nevēlamies 99 00:05:47,290 --> 00:05:51,240 izskatās virs tukša flīzes, jo nekas pacelties virs 100 00:05:51,240 --> 00:05:52,430 rinda kuģa. 101 00:05:52,430 --> 00:05:55,950 Tas ir, kā jūs, iespējams, galu galā kļūst kaut kas līdzīgs segmentācijas vainas vai 102 00:05:55,950 --> 00:05:59,030 jūsu programma varētu tikai strādāt negaidīti veidos. 103 00:05:59,030 --> 00:06:04,310 Tātad, šī ir pārliecināties, ka mums nav meklēt vietās, kas nav derīgs. 104 00:06:04,310 --> 00:06:08,470 >> Tagad mēs esam gatavojas darīt to pašu attiecībā visas citas iespējamās kombinācijas. 105 00:06:08,470 --> 00:06:13,250 Tātad šeit, mēs meklējam tālāk tukšs lai redzētu, vai tas ir flīzes. 106 00:06:13,250 --> 00:06:16,950 Un mums ir arī pārliecināties, ka mēs esam ne uz apakšējās kārtas, vai arī mēs 107 00:06:16,950 --> 00:06:18,910 nevajadzētu meklēt flīzes. 108 00:06:18,910 --> 00:06:25,040 Lūk, mēs ejam apskatīt pa kreisi tukšu, lai redzētu, vai tas ir flīzes. 109 00:06:25,040 --> 00:06:27,860 Un mums nevajadzētu skatīties pa kreisi ja mēs esam kreisās malas kolonnā. 110 00:06:27,860 --> 00:06:30,100 Un šeit mēs esam skatīsies uz tiesības uz tukšu, un mums nevajadzētu 111 00:06:30,100 --> 00:06:33,340 izskatās labi, ja mēs esam in rightmost kolonnas. 112 00:06:33,340 --> 00:06:37,820 >> Tātad, ja neviena no šīm lietām bija taisnība, tas nozīmē, ka flīžu nebija blakus 113 00:06:37,820 --> 00:06:39,640 ar tukšu un mēs varam atgriezties viltus. 114 00:06:39,640 --> 00:06:41,230 Solis nebija derīgs. 115 00:06:41,230 --> 00:06:47,010 Tomēr, ja viens no tiem ir patiesi, tad šo punktu, mēs zinām, ka tile_i un 116 00:06:47,010 --> 00:06:50,540 tile_j ir vienāds ar nostāju flīzes. 117 00:06:50,540 --> 00:06:55,210 Un tā, mēs varam atjaunināt valdi pozīcijas tile_i un tile_j. 118 00:06:55,210 --> 00:06:59,820 Mēs zinām, jaunā vērtība būs tukša un ka stāvoklis blank_i 119 00:06:59,820 --> 00:07:02,950 blank_j, kas bija sākotnējais tukša - mēs zinām, flīzes gatavojas 120 00:07:02,950 --> 00:07:04,030 pārcelties tur. 121 00:07:04,030 --> 00:07:07,610 >> Ievērojiet, mums nav reāli jādara reālā swap šeit, jo mēs zinām, 122 00:07:07,610 --> 00:07:09,850 vērtības, kas ir nepieciešams, lai to varētu ievietot uz šīm pozīcijām. 123 00:07:09,850 --> 00:07:13,780 Mums nav nepieciešams pagaidu mainīgais apkārt. 124 00:07:13,780 --> 00:07:16,920 >> Visbeidzot, mums ir jāatceras, ka mēs ir mūsu globālos mainīgos, kas ir 125 00:07:16,920 --> 00:07:18,980 sekotu nostāju par tukšu. 126 00:07:18,980 --> 00:07:22,780 Tāpēc mēs vēlamies, lai atjauninātu pozīciju tukšu būt tur, kur flīzes 127 00:07:22,780 --> 00:07:24,190 sākotnēji bija. 128 00:07:24,190 --> 00:07:27,680 Visbeidzot, mēs atgriežamies taisnība, jo solis bija veiksmīga. 129 00:07:27,680 --> 00:07:31,110 Mēs veiksmīgi mijmaiņas tukša ar flīze. 130 00:07:31,110 --> 00:07:34,890 >> Labi, tāpēc pagājušajā mēs nepieciešams pārbaudīt uzvarēja. 131 00:07:34,890 --> 00:07:39,900 Tātad, uzvarēja līdzīgi atgriež bool kur true notiek, lai norādītu, ka 132 00:07:39,900 --> 00:07:41,460 lietotājs ir uzvarējis spēli. 133 00:07:41,460 --> 00:07:43,780 Un viltus ir norādīts, ka spēle vēl nav beigusies. 134 00:07:43,780 --> 00:07:46,340 Lietotājs nav uzvarējis. 135 00:07:46,340 --> 00:07:52,100 Tātad, tas būs diezgan daudz pretējs init, kur init, 136 00:07:52,100 --> 00:07:56,920 Atcerieties, ka mēs sāktu kuģa 15, 14, 13, 12, utt. 137 00:07:56,920 --> 00:08:03,000 Tā uzvarēja, mēs vēlamies, lai pārbaudītu, vai board ir 1, 2, 3, 4, 5, un tā tālāk. 138 00:08:03,000 --> 00:08:06,600 >> Tātad, mēs ejam, lai sāktu mūsu cīnītos pret 1, jo tas ir tas, ko top 139 00:08:06,600 --> 00:08:08,400 kreisi no kuģa jābūt. 140 00:08:08,400 --> 00:08:10,860 Un tad mēs ejam uz cilpas visā kuģa. 141 00:08:10,860 --> 00:08:13,690 Pieņemsim ignorēt šo nosacījumu uz otru. 142 00:08:13,690 --> 00:08:18,410 Un šis nosacījums ir tikai gatavojas pārbaude ir valde šajā pozīcijā 143 00:08:18,410 --> 00:08:20,790 vienāds ar pašreizējo skaitu? 144 00:08:20,790 --> 00:08:27,040 Ja ir, tad pieauguma skaitīšanu, lai Nākamo pozīciju mēs skatāmies, ir viens lielāks 145 00:08:27,040 --> 00:08:29,690 par nostāju, mēs esam šobrīd. 146 00:08:29,690 --> 00:08:32,700 >> Tātad tas, kā mēs augšējā kreisajā pusē jābūt 1. 147 00:08:32,700 --> 00:08:33,950 Pieauguma grāfs 2. 148 00:08:33,950 --> 00:08:35,010 Apskatīt nākamās pozīcijas. 149 00:08:35,010 --> 00:08:35,690 Tas ir 2? 150 00:08:35,690 --> 00:08:37,659 Ja tā, tad pieauguma grāfs 3. 151 00:08:37,659 --> 00:08:39,179 Nākamais amats, tas ir 3? 152 00:08:39,179 --> 00:08:42,440 Ja tā, tad pieauguma grāfs līdz 4, un tā tālāk. 153 00:08:42,440 --> 00:08:49,190 Tātad, ja ir kāds pozīcija valde, kas nav vienāds mūsu skaits, 154 00:08:49,190 --> 00:08:52,640 tad mēs vēlamies atgriezties viltus, jo tas nozīmē, ka ir dažas flīzes, kas ir 155 00:08:52,640 --> 00:08:55,490 neatrodas pareizā stāvoklī. 156 00:08:55,490 --> 00:08:58,810 >> Tātad, šeit, kas ir šis nosacījums dara? 157 00:08:58,810 --> 00:09:02,170 Nu, atcerieties, ka tukša ir vajadzēja iet uz leju pa labi. 158 00:09:02,170 --> 00:09:06,180 Un tukšo vērtība, iespējams, nav obligāti vienāda ar vērtību 159 00:09:06,180 --> 00:09:11,080 novērstu, ka tiks sasniegts apakšējā labajā stūrī. 160 00:09:11,080 --> 00:09:15,760 Tāpēc mēs īpaši vēlamies pārbaudīt, ja es vienāds vienāds d mīnus 1 un j vienāds 161 00:09:15,760 --> 00:09:19,470 ir vienāds ar D mīnus 1 - kas saka, ja mēs meklē apakšējā labajā stūrī 162 00:09:19,470 --> 00:09:22,050 board - tad mēs vienkārši vēlas turpināt. 163 00:09:22,050 --> 00:09:26,200 Mēs vēlamies, lai izlaistu šo konkrēto atkārtojuma paredzēto cilpu. 164 00:09:26,200 --> 00:09:31,250 >> Un tā, ja mums izdosies iegūt, izmantojot šo ligzdotu uz cilpas, tas nozīmē, ka 165 00:09:31,250 --> 00:09:34,690 nebija flīzes, kas bija nepareiza pozīcija. 166 00:09:34,690 --> 00:09:38,900 Un mēs izkļūt no cilpas un nāk Šeit, kur mēs varam atgriezties true. 167 00:09:38,900 --> 00:09:41,800 Visas flīzes bija pareizajās pozīcijās , un tas nozīmē, ka lietotājs ir 168 00:09:41,800 --> 00:09:43,230 uzvarēja spēli. 169 00:09:43,230 --> 00:09:44,460 Un tas arī viss. 170 00:09:44,460 --> 00:09:46,550 Mans vārds ir Rob Bowden, un tas bija 15. 171 00:09:46,550 --> 00:09:52,726