ROB BOWDEN: Hi. Olen Rob ja ma loodan, et teie mäng mängu 15. Nüüd on neli funktsiooni, mida vajate rakendada selle programmi - init, joonistada, liikuda, ja võitis. Nii, vaatame init. Siin näeme, et esimene asi, me oleme teha, on kuulutada muutuja nimetatakse counter. See saab initsialiseerida d korda d miinus 1. Pea meeles, et d on mõõde meie pardal. Kuidas init läheb tööle on see läheb itereerima kogu pardal ja me ei kavatse hakata ülaosas vasakul. Ja ütleme, et me on 4 4 pardal. Nii top vasakule oleme kavatse öelda 15. Ja siis me lihtsalt loen läbi lauad, öeldes 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, ja nii edasi. Nii top vasakule, me eeldame, et d korda d miinus 1, mis 4 4 juhul saab olema 16 miinus 1, mis on õigesti 15. Ja nüüd siin, kus me Käi kogu pardal. Ja me ei kavatse seada iga positsiooni Juhatuse praeguse väärtuse meie counter, ja siis counter läheb ainult kahandab, et järgmine positsioon jõuame läheb on counter üks alla varasemat seisukohta. Nii et meil oli algselt 15 ja aland counter. Nii siis me määrata 14 Järgmise seisukoha aland loendur ja me määratud 13, ja nii edasi. Lõpuks peame hakkama nurgas sellisel juhul, kui pardal on ka mõõde, siis lihtsalt teeme 15, 14, 13, 12, kõik viis kuni 3, 2, 1, on jäta meid lahendamatu pardal. Ja meil on vahetada 1 ja 2. Niisiis, kui d mod 2 võrdub 0, see on kuidas me ei kavatse vaadata et näha, kas see on isegi. Kui d mod 2 võrdub 0, siis rida d miinus 1, mis on alumises reas ning positsioon d miinus 2, või veerg d miinus 2, me seada, et 2 ja veerus d miinus 3 me läheb seatud 1. Nii et lihtsalt tagurdab kus 1 ja 2 on hetkel. Lõpuks me seada väga all paremal võrdne tühjaks, kus tühi on hash määratletud tipus kui 0. Nii, et ei ole tingimata vajalik, kuna see silmus läheb on seada alt paremale 0, sest counter loomulikult jõuda 0. Aga see sõltub meist, teades, et tühi oli räsitud leida 0. Kui ma lähen seda programmi ja hiljem muuta tühi ülaosas 100, see tuleb veel palju tööd. Nii et see on lihtsalt tagada, et all paremal on tegelikult võrdne meie tühi väärtus. Lõpuks on meil kaks globaalsed muutujad, nii tühi i ja tühi j ja näeme deklareeritud ülaosas. Ja me ei kavatse kasutada nende kahe globaalse muutujaid jälgida positsiooni tühjaks, nii et meil ei ole vaja vaadata läbi kogu pardal, et leida tühi iga aeg püüame liikuda. Nii positsiooni tühi alati on hakkan allosas paremal. Nii põhjas õigus on antud indeksid d miinus 1, d miinus 1. Nii, et init. Nüüd liigume edasi juhtida. Niisiis, draw saab olema sarnane kus me kinnitada, kogu pardal. Ja me lihtsalt tahame trükkida raha see on igas asendis pardal. Nii et siin me oleme trükkimise raha, mis on igas asendis pardal. Ja teate, mis me teeme -. Ja see on just öelnud printf et olenemata sellest, kas see on üks number või kahekohaline number, et me ikka tahame seda kuluda kaks veergu välja printida, nii et kui meil on kahekohaline ja üks numbrini sama lauaga, meie juhatuse ikkagi vaadata kena ja kandiline. Nii et me tahame seda teha, et iga väärtus juhatuses, välja arvatud tühi. Niisiis, kui positsioon pardal võrdub tühjaks, siis me konkreetselt soovite printida ainult alakriips esindada tühi asemel mis iganes väärtus tühi tegelikult on. Lõpuks me tahame prindi välja uus liin. Pange tähele, et see on ikka sees välimine silmus, kuid väljaspool sisemine silmus. Kuna see välimine kontuur iterating üle kõigi ridade, ja nii see printf on läheb lihtsalt printida uus liin, nii et me liikuda välja trükkida järgmisel real. Ja see on see viik. Nii, nüüd liigume edasi liikuda. Nüüd võtame liikuda, kivimaja, et kasutaja on kantud mäng - nad sisestage plaat nad tahavad liikuda - ja sa peaksid tagasi bool, nii kas on õige või vale, sõltuvalt kas see samm oli tegelikult Kehtiv - kas see plaat võib olla kolis tühja ruumi. Nii et siin me tunnistada kohaliku muutuja, tile_1 ja tile_j, mis hakkavad sarnaneks blank_i ja blank_j, välja arvatud, et see saab jälgida asend plaat. Nüüd me ei kavatse kasutada blank_i ja blank_j ja öelda, olgu, nii siin on tühi laual. Nüüd on plaat üle tühja? Kas plaat vasakul tühi? Kas plaat paremal tühi? Kas plaat alla tühi? Niisiis, kui plaat on kõik need positsioone, siis me teame, et plaat saab kolis tühi koht ja tühjaks saab liigutada, kui plaat praegu on. Nii et siin me ütleme, kui juhatus positsioonis blank_i miinus 1 blank_j. Nii et see on selge, on plaat üle praeguse tühi? Ja kui on, siis me meeles mis on seisukoht plaat. Plaat on asendis blank_i miinus 1 ja blank_j. nüüd esimene, meil on ka see kontroll siin, nii blank_i on suurem kui 0. Miks me tahame seda teha? Noh, kui tühi on ülemises reas pardal, siis me ei taha vaata üle tühjaks plaat alates miski kõrgemale rida pardal. See, kuidas sa võiksid lõpuks saada midagi sellist killustatust süü või Teie programm võib lihtsalt töö ettearvamatult. Niisiis, see on tagada, et me ei vaata kohtades, mis ei kehti. Nüüd me teeme sama asja kõik muud võimalikud kombinatsioonid. Nii et siin, me otsime alla tühi et näha, kas see plaat. Ja meil on ka veenduda, et me oleme ei alumisel real, või siis me ei peaks otsima plaat. Siin me läheme vaatama vasakule tühi, et näha, kas see on plaat. Ja me ei peaks otsima vasakule kui me oleme vasakpoolses veerus. Ja siin me läheme vaatama õigust tühjaks ning me ei tohiks vaata paremale, kui me oleme parempoolses veerus. Seega, kui ükski nendest asjadest on tõsi, see tähendab, et plaat ei külgnevate tühja ja me saame tagasi false. Liikuda ei olnud kehtiv. Aga kui üks neist oli tõsi, siis Siinkohal me teame, et tile_i ja tile_j on võrdne asend plaat. Ja nii saame uuendada pardal seisukohti tile_i ja tile_j. Me teame, et uus raha on tühi ja mis asendis blank_i blank_j, mis oli algne tühi - me teame plaat läheb liikuda seal. Pange tähele, et me tegelikult ei pea tegema tõeline swap siin, sest me teame, väärtused, mis tuleb lisada viiakse need positsioonid. Meil ei ole vaja ajutiselt muutuja ümber. Lõpuks peame meeles pidama, et me on meie globaalsed muutujad, mis on jälgida seisukoht tooriku. Nii et me tahame uuendada positsiooni tühi olema, kui plaat algselt oli. Lõpuks oleme tagasi true alates liikuda oli edukas. Oleme edukalt vahetada tooriku plaat. Olgu, viimane oleme vaja kontrollida võidetud. Nii võitis sarnaselt naaseb bool kus tõsi saab näidata, et kasutaja on võitnud mängu. Ja vale on, mis näitab, et mäng veel kestab. Kasutaja pole võitnud. Nii, et see saab olema päris palju vastand init, kus init, mäletan, me initsialiseerida pardal 15, 14, 13, 12, jne. Arvestades võitnud, me tahame, et kontrollida, kas Laud on 1, 2, 3, 4, 5, ja nii edasi. Niisiis, me initsialiseerida meie vastuollu 1 sest see on, mida top vasakul pardal olema. Ja siis me loop kogu pardal. Olgem ignoreerida seda tingimust teine. Ja see tingimus on lihtsalt läheb kontroll on laual selles asendis võrdne praeguse loeb? Kui nii, juurdekasvu loota, et Järgmisele kohale me pilk on üks kõrgemaid kui positsioon oleme praegu. Nii et see, kuidas me saame üleval vasakul peaks olema 1. Kasvatab arv 2. Vaata järgmist seisukohta. Kas see 2? Kui jah, siis juurdekasvu loota, et 3. Järgmine seisukoht, on see 3? Kui jah, siis juurdekasvu loota 4, ja nii edasi. Niisiis, kui on olemas mingi seisukoht pardal, mis ei ole võrdne meie loota, siis me tahame tagasi false sest et tähendab, et seal on mingi plaat, mis on pole õiges asendis. Nii et siin, mida see seisund läheb? Noh, mäletan, et pimekatse on peaks minema all paremal. Ja tühi väärtus ei pruugi tingimata võrduma väärtus võidelda, et läheb saavutata allosas paremal. Nii me konkreetselt soovite vaadata, kui ma võrdub võrdub d miinus 1 ja j võrdsete võrdub d miinus 1 - see on juba siis, kui me otsivad allosas paremal pardal - siis me lihtsalt soovivad jätkata. Me tahame, et jäta see eriti iteratsiooni loop. Ja nii, kui meil õnnestub saada selle kaudu nested loop, mis tähendab, et ei olnud plaat, mis oli vales kohas. Ja me murrame läbi silmuse ja tulla siin, kus me saame naasta tõsi. Kõik plaadid olid õiged seisukohad ja see tähendab, et kui kasutaja on mängu võitnud. Ja ongi kõik. Minu nimi on Rob Bowden, ja see oli 15.