ROB BOWDEN: Sveiki. Aš Robas, ir aš tikiuosi, kad jūsų žaidimas žaidimas 15. Dabar yra keturios funkcijos jums reikia įgyvendinti šią programą - paleidimo, piešti, perkelti, ir laimėjo. Taigi, pažvelkime init. Čia mes matome, kad pirmasis dalykas, mes ruošiuosi padaryti tai paskelbti kintamąjį vadinamas skaitiklis. Tai bus inicializuoti D karto r minus 1. Atminkite, kad d yra dimensija Mūsų valdyba. Kaip init ketina dirbti tai, kas vyksta kad paeiliui valdžia visoje diskusijų lentoje ir mes ketiname pradėti viršuje kairėje. Ir tegul tiesiog pasakyti, kad mes turi 4 4 lenta. Taigi viršutiniame kairiajame mes ketina pasakyti 15. Ir tada mes tik ketina skaičiuoti per lentas, sakydamas: 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, ir tt. Taigi viršutinis kairysis, mes tikimės, kad d laikai r minus 1, ty į 4 iš 4 atveju bus 16 minus 1, tai yra teisingai 15. Ir dabar čia, kur mes einame pakartoti valdžia visoje diskusijų lentoje. Ir mes ketiname nustatyti kiekvieno poziciją dabartinės vertės lenta mūsų skaitiklis, tada kovos vyksta į Mažėja, kad kitą pozicija pasiekiame teks skaitiklis yra vienas mažesnis nei ankstesnė pozicija. Taigi mes iš pradžių turėjo 15 ir Mažėja skaitiklis. Taigi mes ketiname priskirti 14 į kitą padėtį, Mažėja skaitiklis ir mes ketiname priskirti 13, ir taip toliau. Galiausiai, mes turime dirbti, kad kampe tuo atveju, kai, jei laive yra net dimensija, tada tiesiog daro 15, 14, 13, 12, visą kelią iki 3, 2, 1, yra ketina palikti mums neišsprendžiamos lenta. Ir mes turime apsikeitimo 1 ir 2. Taigi, jei d mod 2 lygi 0, tai kaip mes ketiname patikrinti pamatyti, jei ji dar. Jei d mod 2 yra lygus 0, tada eilutėje d minuso 1, kuris yra apatinėje eilutėje, ir pozicija d atėmus 2 arba stulpelis d atėmus 2, mes ketiname nustatyti, kad iki 2, ir stulpelis r minus 3 mes ketina nustatyti, kad 1. Taigi, tai tik atbuline eiga, kai 1 ir 2 metu. Galiausiai, mes ketiname nustatyti labai apačioje dešinėje lygi Blankas, kur Blankas buvo maišos apibrėžta viršuje, kaip 0. Taigi, tai nebuvo būtina, nes tai už linijos teks nustatyti apatinę teisę į 0, nes skaitiklis natūraliai pasiekti 0. Bet tai priklauso nuo mūsų, žinant, kad Blankas buvo maiša rasti 0. Jei aš einu į šią programą, ir vėliau pakeisti tuščią viršuje su 100, tai vis tiek turėtų dirbti. Taigi tai yra tiesiog įsitikinkite, kad apačioje dešinėje yra iš tikrųjų prilygsta mūsų tuščią reikšmę. Galiausiai, mes turime dvi globalių kintamųjų, taip tuščia aš ir tuščia j, duomenis ir matome deklaruotas viršuje. Ir mes ketiname naudoti šiuos du pasaulio kintamieji sekti pozicija Blankas, kad mes ne reikia ieškoti per visą lenta rasti tuščią kiekvieną laiko mes stengiamės padaryti žingsnį. Taigi, iš tuščios vietos visada yra ketina pradėti apačioje dešinėje. Taigi apačioje dešinėje yra pateiktas indeksai d atėmus 1 d atėmus 1. Taigi, tai paleidimo. Dabar mes pereiti prie piešti. Taigi, lygiosiomis bus panašus kur mes ketiname pakartoti valdžia visoje diskusijų lentoje. Ir mes tiesiog norime spausdinti vertę tai kiekvienos lentos vietoje. Taigi čia mes spausdinimo vertę, kad yra kiekvienos lentos vietoje. Ir pastebėsite, kad mes darome -. Ir tai tik sakau printf kad nepriklausomai nuo to, ar tai vienas skaitmuo arba dviejų skaitmenų numeris, mes vis tiek norime, kad ji užima du stulpelius išspausdina, taip, kad jei mes turime dvi skaitmuo ir vienas skaitmenų numeriai tame pačiame laive, mūsų lenta vis dar atrodo gražus ir kvadratas. Taigi, mes norime padaryti, kad už kiekvieną vertę valdyboje, išskyrus tuščias. Taigi, jei yra valdybos pozicija Lygu Blankas, tada mes specialiai norite spausdinti tik pabraukimo vietoj atstovauti tuščią, nepriklausomai nuo vertės Blankas iš tikrųjų yra. Galiausiai, mes norime spausdinti iš naujos eilutės. Atkreipkite dėmesį, kad tai yra dar viduje išorinė už linijos, bet ne vidinis už linijos. Kadangi tai išorinė for ciklas Iteracja per visas eilutes ir todėl tai printf yra vyksta tiesiog atsispausdinti naują liniją, todėl mes pereiti prie atspausdinti kitą eilutę. Štai ir viskas už lygiosiomis. Taigi, dabar galime pereiti judėti. Dabar mes pereiname perkelti, plytelių, kad vartotojo įrašytas į žaidimą - jie įveskite plytelių jie nori judėti - ir jums turėtų grįžti bool, todėl arba true arba false, priklausomai nuo ar tas žingsnis buvo iš tikrųjų galioja - ar kad plytelės gali būti persikėlė į tuščią erdvę. Taigi čia mes pareiškiame vietinį kintamąjį, tile_1 ir tile_j, kurie ketina būti panašus į blank_i ir blank_j, , išskyrus tai, kas vyksta sekti pozicija plytelių. Dabar čia mes ketiname naudoti blank_i ir blank_j ir sako viskas gerai, todėl čia ant lentos tuščias. Dabar yra didesnis tuščias plytelių? Ar į tuščią kairėje plytelių? Ar į tuščią dešinę plytelių? Ar žemiau tuščias plytelių? Taigi, jei plytelės yra bet kuri iš šių pozicijos, tada mes žinome, kad plytelių galima perkelti į tuščią vietoje ir Blankas gali būti perkeltas į kur plytelių metu. Taigi čia mes sakome, jei valdyba padėtyje blank_i atėmus 1 blank_j. Taigi, tai sakau, plytelių virš dabartinio tuščią? Ir jei taip, mes ketiname prisiminti tai plytelių pozicija. Plytelių padėtyje blank_i minus 1 ir blank_j. dabar pirma, mes taip pat turime šį patikrinimą čia, todėl blank_i yra didesnis nei 0. Kodėl mes norime padaryti? Na, jei Blankas yra viršutinėje eilutėje valdybos, tada mes nenorime žiūrėti aukščiau tuščią plytelių nuo nėra nieko aukščiau viršų eilė lentos. Tai kaip galite baigti gauti kažkas panašaus į segmentavimo kaltės ar jūsų programa gali tiesiog dirbti netikėtų būdų. Taigi, tai yra užtikrinti, kad mes ne ieškoti vietų, kurios yra neteisingas. Dabar mes ketiname daryti tą patį visi kiti galimi deriniai. Taigi čia mes ieškome žemiau tuščias pamatyti, jei tai plytelių. Ir mes taip pat turite įsitikinti, kad mes ne apatinėje eilutėje, kitaip mes neturėtų ieškoti plytelių. Čia mes ketiname pažvelgti į kairę Blankas pamatyti, jei ji yra plytelės. Ir mes neturėtume žiūrėti į kairę jei mes į kairiausias skiltyje. Ir čia mes ketiname ieškoti teisė Blankas, ir mes neturėtume žiūrėti į dešinę, jei mes į dešinę nutolusį skiltyje. Taigi, jei nė vienas iš tų dalykų, buvo tiesa, tai reiškia, kad plytelių nebuvo šalia į tuščias ir galime grįžti klaidinga. Žingsnis buvo neteisingas. Tačiau, jei viena iš jų buvo tiesa, tai bent Šiuo metu, mes žinome, kad tile_i ir tile_j yra lygūs pozicija plytelių. Ir taip, mes galime atnaujinti lenta pozicijos tile_i ir tile_j. Mes žinome, nauja reikšmė bus tuščia ir kad padėtis blank_i blank_j, kuris buvo originalas tuščias - mes žinome, plytelių ketina perkelti ten. Atkreipkite dėmesį, mes ne iš tikrųjų turi daryti nekilnojamojo apsikeitimo čia, nes mes žinome, vertės, kurios turi būti įtrauktas į šias pareigas. Mums nereikia laikinas kintamasis aplink. Galiausiai, mes turime prisiminti, kad mes turime globalių kintamųjų, kurie sekti padėtį ruošinio. Taigi, mes norime atnaujinti poziciją Blankas būti ten, kur plytelės iš pradžių buvo. Galiausiai, mes grąžina true, nes žingsnis buvo sėkmingas. Mes sėkmingai sukeisti Blankas su plytelių. Viskas gerai, taip pagaliau mes reikia patikrinti vonų. Taigi, juodieji panašiai grąžina bool kur tiesa ketina rodo, kad vartotojas laimėjo žaidimą. Ir neteisinga yra tai rodo, kad Žaidimas vis dar vyksta. Vartotojas dar laimėjo. Taigi, tai bus gana daug iš init priešais, kur init atminkite, kad mes inicijuoti lenta 15, 14, 13, 12, kt. Kadangi laimėjo, mes norime patikrinti, ar taryba yra 1, 2, 3, 4, 5, ir taip toliau. Taigi, mes ketiname inicijuoti mūsų kovoti su 1, nes tai, ką viršuje kairėje valdybos turėtų būti. Ir tada mes ketiname kilpa valdžia visoje diskusijų lentoje. Leiskite ignoruoti šią sąlygą sekundę. Ir ši sąlyga yra tik ketina patikrinimas yra šioje padėtyje lenta lygi dabartinei skaičiaus? Jei taip, prieaugio skaičius, kad kitą padėtį pažvelgtume vienas didesnis nei padėtyje esame dabar. Štai kaip mes viršuje, kairėje turėtų būti 1. Prieaugio skaičiavimą iki 2. Pažvelkite į kitą poziciją. Ar tai 2? Jei taip, prieaugio skaičiavimą iki 3. Kitas pozicija, tai yra 3? Jei taip, prieaugio skaičiavimą 4, ir pan. Taigi, jei yra bet kokia padėtis valdyba, kuri nėra lygi mūsų skaičius, tada mes norime return false, nes, kad tai ten kai plytelių, kad yra ne teisingoje padėtyje. Taigi čia, kas yra ši sąlyga darai? Na, atminkite, kad tuščias yra turėtų eiti į apačioje dešinėje. Ir tuščiasis vert gali ne nebūtinai yra lygūs vertę kovoti, kad bus pasiektas apačioje dešinėje. Taigi, mes specialiai norite patikrinti, jei aš Lygu lygu r minus 1 ir j lygu Lygu r atėmus 1 - kuris sako, jei mes žiūrite į apatiniame dešiniajame lenta - tada mes tiesiog norite tęsti. Mes norime, kad praleisti tai ypač pasikartojančių už kilpos. Ir taip, jei mums pavyks gauti per šį įdėtos už kilpos, tai reiškia, kad nebuvo plytelių, kad buvo neteisinga pozicija. Ir mes išeiti iš kilpos ir ateiti čia, kur mes galime grįžti tiesa. Visos plytelės buvo teisingas pozicijas ir tai reiškia, kad vartotojas turi laimėjo žaidimą. Štai ir viskas. Mano vardas yra Rob Bowden, ir tai buvo 15.