>> ROB BOWDEN: Hi.
Es esmu Rob, un es ceru, ka jūsu spēle spēles 15.
Tagad tur ir četras funkcijas, jums ir nepieciešams īstenot šajā programmā - init,
zīmēt, pārvietot, un uzvarēja.
Tātad, pieņemsim apskatīt init.
>> Šeit mēs redzam, ka pirmā lieta, ko mēs esat gatavojas darīt, ir atzīt mainīgo
sauc counter.
Tas būs inicializēts mīnus pie d reizes d 1.
Atcerieties, ka d ir dimensija mūsu kuģa.
Kā init dodas uz darbu, ir tas, kas notiek atkārtot visā kuģa
un mēs esam gatavojas sākt augšpusē pa kreisi.
>> Un pieņemsim tikai teikt, ka mēs ir 4 pa 4 dēli.
Tā augšējā kreisajā stūrī, mēs esam teiksiet, ir 15.
Un tad mēs esam tikai gatavojas skaits pa dēļiem, sakot 15, 14, 13,
12, 11, 10, 9, 8, 7, 6, 5, 4, un tā tālāk.
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
lieta būs 16 mīnus 1, kas ir pareizi 15.
>> Un tagad, lūk, kur mēs ejam atkārtot visā kuģa.
Un mēs ejam, lai uzstādītu katru pozīciju valde uz pašreizējo vērtību
mūsu counter, un pēc tam counter notiek līdz decrement, tā, ka nākamais
pozīciju mēs sasniedzam nāksies counter būt viens mazāk nekā
Iepriekšējais amats.
Tāpēc mēs sākotnēji bija 15, un Samazināt skaitītāju.
Tātad, tad mēs ejam, lai piešķirtu 14 nākamais amats, samazinājums ir skaitītājs,
un mēs ejam piešķirts 13, un tā tālāk.
>> Visbeidzot, mums ir nepieciešams, lai apstrādātu šo stūri gadījums, ja valde ir vēl
dimensija, tad tikai dara 15, 14, 13, 12, galam, 3, 2, 1, ir
gatavojas atstāt mūs ar neatrisināmu kuģa.
Un mums ir swap 1 un 2.
Tātad, ja d mod 2 ir vienāds ar 0, tas ir kā mēs ejam, lai pārbaudītu
lai redzētu, vai tas ir pat.
Ja d mod 2 ir vienāds ar 0, tad rindā d mīnus 1, kas ir apakšējā rinda, un
pozīciju d mīnus 2, vai kolonna d mīnus 2, mēs ejam, lai uzstādītu, ka līdz 2, un
ailē d mīnus 3 mēs esam būs iestatīts uz 1.
Tāpēc, ka ir tikai atpakaļgaitā, kur 1 un 2 šobrīd ir.
>> Visbeidzot, mēs ejam, lai uzstādītu ļoti apakšējā labajā vienāds ar tukšu, ja
tukša ir hash definēts augšdaļā, kā 0.
Tāpēc, ka tas nav absolūti nepieciešams, jo šī cilpa nāksies
noteikt apakšējo tiesības uz 0, jo counter protams sasniegs 0.
Bet, kas paļaujas uz mums, zinot, ka tukšu tika sajaukts, lai atrastu 0.
Ja es iedziļināties šajā programmā, un vēlāk mainīt tukšu augšpusē līdz 100, tas
būtu joprojām strādā.
>> Tāpēc tas ir tikai pārliecinoties, ka apakšējā labajā faktiski vienāda ar mūsu
tukša vērtība.
Visbeidzot, mums ir divas pasaules mainīgie, tik tukša i un tukšu j, un mēs redzam,
tās, kuras augšgalā.
Un mēs esam gatavojas izmantot šīs divas pasaules mēroga mainīgie, lai sekotu
stāvokli tukšu, tā ka mums nav nepieciešams meklēt pa visu
valde, lai atrastu tukšu katru reizi, kad mēs cenšamies, lai pārvietotos.
Tāpēc pozīcija tukšās vienmēr ir gatavojas sākt apakšējā labajā stūrī.
Tā apakšējā labajā ievada indeksi d mīnus 1, d mīnus 1.
Tātad, tas ir init.
>> Tagad mēs pāriet uz izdarīt.
Tātad, izdarīt būs līdzīgi kur mēs ejam atkārtot
visā kuģa.
Un mēs vienkārši vēlamies, lai izdrukātu vērtību kas ir katrā pozīcijā kuģa.
Tāpēc šeit mēs esam drukāšanas vērtību, kas ir katrā pozīcijā uz kuģa.
Un paziņo, ka mēs darām -.
Un tas ir tikai stāsta printf ka neatkarīgi no tā, ja tas ir viens cipars vai
divciparu skaitlis, mēs joprojām gribam, lai aizņem divas kolonnas izdrukas,
tā, ka, ja mums ir divi ciparu un viena ciparu numurus paša kuģa, mūsu
valde joprojām izskatās jauki un kvadrātveida.
>> Tāpēc mēs vēlamies darīt, ka katru vērtības uz kuģa, izņemot tukšu.
Tātad, ja pozīcija kuģa vienāds tukšs, tad mēs īpaši
vēlaties izdrukāt tikai pasvītrojumu pārstāvēt tukšu, tā vietā, lai
neatkarīgi vērtība tukšs patiesībā ir.
>> Visbeidzot, mēs vēlamies, lai drukātu out jaunu līniju.
Ievērojiet, ka tas joprojām ir iekšā ārējā cilpa, bet ārpus
iekšējo cilpa.
Tā kā šis ārējā cilpa ir atkārtojot pār visām rindām, un tāpēc šī printf ir
gatavojas tikai drukāt jaunu līniju, tāpēc mēs pāriet uz izdrukāt nākamo rindu.
Un tas ir tas, lai izlozē.
>> Tātad, tagad pieņemsim pāriet uz pārvietoties.
Tagad mums iet pārvietot, flīzes, ka lietotājs ir iekļauta spēlē - viņi
ievadiet flīžu viņi vēlas, lai pārvietotos - un jūs vajadzēja atgriezties bool, tāpēc
nu patiess vai nepatiess, atkarībā no tā, vai šis solis bija patiešām
spēkā - vai tas flīzes var būt pārcēlās uz tukšu vietu.
>> Tāpēc šeit mēs paziņojam vietējo mainīgais, tile_1 un tile_j, kas gatavojas
būt līdzīga blank_i un blank_j, izņemot tas notiek, lai sekotu
nostāju flīzes.
Tagad šeit mēs esam gatavojas izmantot blank_i un blank_j un teikt visas tiesības, lai
šeit ir tukša uz kuģa.
>> Tagad ir flīžu virs tukšu?
Ir flīzes pa kreisi no tukšās?
Ir flīzes pa labi no tukšās?
Ir zem tukšu flīzes?
Tātad, ja flīžu ir kāda no tiem pozīcijas, tad mēs zinām, ka flīžu
var tikt pārvietota uz tukšu vietas un blank var pārvietot uz vietu, kur
flīzes patlaban.
>> Tātad šeit, mēs sakām, ja valde ir stāvoklī blank_i mīnus 1 blank_j.
Tāpēc tas ir saprotams, ir flīžu virs pašreizējā tukšās analīzes?
Un, ja tā, tad mēs ejam atcerēties , kas ir stāvoklis flīžu.
Flīzes ir pozīcijā blank_i mīnus 1 un blank_j.
tagad, pirmkārt, mums ir arī šo pārbaudi tieši šeit, tāpēc blank_i ir
lielāks par 0.
>> Kāpēc mēs gribam to darīt?
Nu, ja blank ir augšējā rindā valdes, tad mēs nevēlamies
izskatās virs tukša flīzes, jo nekas pacelties virs
rinda kuģa.
Tas ir, kā jūs, iespējams, galu galā kļūst kaut kas līdzīgs segmentācijas vainas vai
jūsu programma varētu tikai strādāt negaidīti veidos.
Tātad, šī ir pārliecināties, ka mums nav meklēt vietās, kas nav derīgs.
>> Tagad mēs esam gatavojas darīt to pašu attiecībā visas citas iespējamās kombinācijas.
Tātad šeit, mēs meklējam tālāk tukšs lai redzētu, vai tas ir flīzes.
Un mums ir arī pārliecināties, ka mēs esam ne uz apakšējās kārtas, vai arī mēs
nevajadzētu meklēt flīzes.
Lūk, mēs ejam apskatīt pa kreisi tukšu, lai redzētu, vai tas ir flīzes.
Un mums nevajadzētu skatīties pa kreisi ja mēs esam kreisās malas kolonnā.
Un šeit mēs esam skatīsies uz tiesības uz tukšu, un mums nevajadzētu
izskatās labi, ja mēs esam in rightmost kolonnas.
>> Tātad, ja neviena no šīm lietām bija taisnība, tas nozīmē, ka flīžu nebija blakus
ar tukšu un mēs varam atgriezties viltus.
Solis nebija derīgs.
Tomēr, ja viens no tiem ir patiesi, tad šo punktu, mēs zinām, ka tile_i un
tile_j ir vienāds ar nostāju flīzes.
Un tā, mēs varam atjaunināt valdi pozīcijas tile_i un tile_j.
Mēs zinām, jaunā vērtība būs tukša un ka stāvoklis blank_i
blank_j, kas bija sākotnējais tukša - mēs zinām, flīzes gatavojas
pārcelties tur.
>> Ievērojiet, mums nav reāli jādara reālā swap šeit, jo mēs zinām,
vērtības, kas ir nepieciešams, lai to varētu ievietot uz šīm pozīcijām.
Mums nav nepieciešams pagaidu mainīgais apkārt.
>> Visbeidzot, mums ir jāatceras, ka mēs ir mūsu globālos mainīgos, kas ir
sekotu nostāju par tukšu.
Tāpēc mēs vēlamies, lai atjauninātu pozīciju tukšu būt tur, kur flīzes
sākotnēji bija.
Visbeidzot, mēs atgriežamies taisnība, jo solis bija veiksmīga.
Mēs veiksmīgi mijmaiņas tukša ar flīze.
>> Labi, tāpēc pagājušajā mēs nepieciešams pārbaudīt uzvarēja.
Tātad, uzvarēja līdzīgi atgriež bool kur true notiek, lai norādītu, ka
lietotājs ir uzvarējis spēli.
Un viltus ir norādīts, ka spēle vēl nav beigusies.
Lietotājs nav uzvarējis.
Tātad, tas būs diezgan daudz pretējs init, kur init,
Atcerieties, ka mēs sāktu kuģa 15, 14, 13, 12, utt.
Tā uzvarēja, mēs vēlamies, lai pārbaudītu, vai board ir 1, 2, 3, 4, 5, un tā tālāk.
>> Tātad, mēs ejam, lai sāktu mūsu cīnītos pret 1, jo tas ir tas, ko top
kreisi no kuģa jābūt.
Un tad mēs ejam uz cilpas visā kuģa.
Pieņemsim ignorēt šo nosacījumu uz otru.
Un šis nosacījums ir tikai gatavojas pārbaude ir valde šajā pozīcijā
vienāds ar pašreizējo skaitu?
Ja ir, tad pieauguma skaitīšanu, lai Nākamo pozīciju mēs skatāmies, ir viens lielāks
par nostāju, mēs esam šobrīd.
>> Tātad tas, kā mēs augšējā kreisajā pusē jābūt 1.
Pieauguma grāfs 2.
Apskatīt nākamās pozīcijas.
Tas ir 2?
Ja tā, tad pieauguma grāfs 3.
Nākamais amats, tas ir 3?
Ja tā, tad pieauguma grāfs līdz 4, un tā tālāk.
Tātad, ja ir kāds pozīcija valde, kas nav vienāds mūsu skaits,
tad mēs vēlamies atgriezties viltus, jo tas nozīmē, ka ir dažas flīzes, kas ir
neatrodas pareizā stāvoklī.
>> Tātad, šeit, kas ir šis nosacījums dara?
Nu, atcerieties, ka tukša ir vajadzēja iet uz leju pa labi.
Un tukšo vērtība, iespējams, nav obligāti vienāda ar vērtību
novērstu, ka tiks sasniegts apakšējā labajā stūrī.
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
ir vienāds ar D mīnus 1 - kas saka, ja mēs meklē apakšējā labajā stūrī
board - tad mēs vienkārši vēlas turpināt.
Mēs vēlamies, lai izlaistu šo konkrēto atkārtojuma paredzēto cilpu.
>> Un tā, ja mums izdosies iegūt, izmantojot šo ligzdotu uz cilpas, tas nozīmē, ka
nebija flīzes, kas bija nepareiza pozīcija.
Un mēs izkļūt no cilpas un nāk Šeit, kur mēs varam atgriezties true.
Visas flīzes bija pareizajās pozīcijās , un tas nozīmē, ka lietotājs ir
uzvarēja spēli.
Un tas arī viss.
Mans vārds ir Rob Bowden, un tas bija 15.