>> ROB BOWDEN: Szia.
Én Rob, és remélem, a játék játék 15.
Most, négy funkció szükséges hogy végre ebben a programban - init,
rajzolni, mozog, és nyert.
Nos, nézzük meg init.
>> Itt látjuk az első dolog, vagyunk fog tenni, hogy egy változót
nevű számlálót.
Meg fog inicializálni a d-szer d mínusz 1.
Ne feledje, hogy d dimenzió a mi fórumon.
Hogy init működni fog ez a helyzet kell végighaladni az egész fórumon
és fogunk kezdeni a bal felső sarokban.
>> És mondjuk, hogy Van 4 4 fórumon.
Tehát a bal felső vagyunk fog mondani 15.
És akkor mi csak áldozol a táblák, mondván 15, 14, 13,
12, 11, 10, 9, 8, 7, 6, 5, 4, és így tovább.
Tehát a bal felső sarokban, azt várjuk, hogy d-szer d mínusz 1, amely a 4-4-
ha lesz 16 mínusz 1, ami 15 helyesen.
>> És most itt van, ahol fogunk végighaladni az egész fórumon.
És meg fogjuk állítani minden pozíciót a fórumon, hogy az aktuális értéket
a számláló, majd a számláló megy hogy csökkentse, hogy a következő
pozíciót érünk megy, hogy számláló eggyel kevesebb, mint a
a korábbi álláspontját.
Így eleinte a 15. és csökkentse számláló.
Akkor megyünk hozzá a 14. a következő pozícióra, csökkentő számláló,
és mi lesz a célhoz kötött 13, és így tovább.
>> Végül, meg kell kezelni a sarokban esetben, amikor, ha a testület még
méret, akkor csak ennek 15, 14, 13, 12, egészen a 3, 2, 1, az
fog hagyni minket megoldhatatlan fórumon.
És meg kell cserélni az 1. és a 2..
Tehát, ha d mod 2 értéke 0, ez hogyan fogjuk ellenőrizni
, hogy ha ez még.
Ha d mod 2 értéke 0, majd sorban d mínusz 1, amely az alsó sorban, és
pozíció d mínusz 2, vagy a D oszlopban mínusz 2, fogunk beállítani, hogy a 2. és
oszlop d mínusz 3 vagyunk fogja meg 1-re.
Szóval, ez csak megfordult, ahol a Az 1. és a 2. jelenleg.
>> Végül, mi fogja meg az igen jobb alsó egyenlő üresen, ahol a
üres lett hash meghatározott a csúcson, mint 0-ra.
Szóval, ez nem volt feltétlenül szükséges, mivel ez a ciklus megy, hogy
állítsa be a jobb alsó 0, mivel számláló természetesen eléri a 0-ra.
De támaszkodik ránk, tudván, hogy üres volt kivonatolt találni a 0-ra.
Ha megy a program, majd üres változtatni a tetején, hogy a 100, akkor
még mindig működik.
>> Tehát ez csak ügyelve arra, hogy a jobb alsó tulajdonképpen megegyezik a
üres érték.
Végül, van két globális változót, így üres i és üres j, és látjuk,
a nyilatkozatban a tetején.
És fogjuk használni a két globális változók nyomon követni a
helyzetét üres, hogy mi nem meg kell nézni az egész
fórumon, hogy megtalálja a üres minden egyes alkalommal igyekszünk, hogy a lépés.
Tehát a helyzet az üres mindig van fog kezdeni a jobb alsó sarokban.
Tehát a jobb alsó adják d indexek mínusz 1, mínusz 1 d.
Szóval, ez init.
>> Most lépni rajzolni.
Tehát, döntetlen lesz hasonló , hova megyünk iterációkhoz
az egész fórumon.
És mi csak szeretnénk nyomtatni az érték ez minden helyzetben a fórumon.
Tehát itt, mi a nyomtatást az értéket, ami minden helyzetben a fórumon.
És észre, hogy amit csinálunk -.
És ez még csak mondja printf hogy függetlenül attól, hogy ha ez egy számjegy vagy
kétjegyű szám, még mindig szeretné, hogy vegye fel két oszlopot a nyomtatást,
hogy ha van két számot és egy számjegyű számok ugyanazt a fórumon, a
ellátás továbbra is néz ki, és szögletes.
>> Ezért akarom, hogy minden érték a fórumon, kivéve a vak.
Tehát, ha a helyzet a fórumon egyenlő az üres, akkor kifejezetten
szeretnénk kinyomtatni, csak egy aláhúzás hogy képviselje az üres, ahelyett
függetlenül az érték a üres valójában.
>> Végül szeretnénk nyomtatni egy új sort.
Vegyük észre, hogy ez még mindig benne A külső a hurok, de azon kívül
a belső for ciklus.
Mivel ez a külső for ciklus iterációjával egész sor, és így ez a printf is
fog csak nyomtatni egy új sor, ezért lépni, hogy nyomtassa ki a következő sorra.
És ez a döntetlen.
>> Szóval, most térjünk rá mozogni.
Most át mozog, a cserép, hogy a felhasználó be a játékban -, hogy
adja meg a cserép akarnak mozogni - és kéne vissza bool, így
igaz vagy hamis, attól függően, hogy ez a lépés valójában
érvényes -, hogy ez a cserép lehet beköltözött az üres hely.
>> Tehát itt, kinyilvánítjuk a helyi változó, tile_1 és tile_j, ami fog
hasonló a blank_i és blank_j, kivéve, hogy fogja nyomon követni a
helyzete a csempe.
Most itt fogunk használni blank_i és blank_j és azt mondják minden rendben, így
itt az üres a táblán.
>> Most, a cserép fölött üres?
A csempe, hogy a bal oldalon az üres?
A cserép jobbra az üres?
A cserép alatti üres?
Tehát, ha a cserép bármely olyan pozíciókat, akkor tudjuk, hogy a cserép
lehet mozgatni a fehér folt, és Az üres lehet mozgatni, ahol a
cserép jelenleg.
>> Tehát itt, azt mondják, ha fórumon pozícióban blank_i mínusz 1 blank_j.
Tehát ez azt mondja, a cserép meghaladja a jelenlegi üres?
És ha igen, megyünk emlékezni ez a helyzet a csempe.
A cserép a helyén van blank_i mínusz 1 és blank_j.
Most először, mi is ezt a csekket itt, így blank_i is
0-nál nagyobb.
>> Miért akarunk csinálni?
Nos, ha az üres van a felső sorban A testület, akkor nem akar
meg fölött üres a cserép óta nincs semmi teteje fölé
sorban a fórumon.
Így lehet, hogy a végén kapok olyasmi, mint egy szegmentációs hiba vagy
A program is csak a munka váratlan módon.
Szóval, ez is ügyelve arra, hogy mi nem meg olyan helyeken, amelyek nem érvényesek.
>> Most megyünk, hogy nem ugyanaz a dolog a minden más lehetséges kombináció.
Tehát itt, keresünk alatti üres , hogy ha ez a csempe.
És azt is, hogy megbizonyosodjon arról, mi nem az alsó sorban, vagy mást is
nem kell keresni a csempe.
Itt fogunk nézni balra Az üres, hogy ha ez a csempe.
És ne nézz balra ha mi vagyunk a bal szélső oszlopban.
És itt fogunk nézni, hogy a jobbra az üres, és nem szabad
látod a jobb, ha vagyunk a jobb szélső oszlopban.
>> Tehát, ha ezek egyike sem igaz, azt jelenti, hogy a lap nem szomszédos
az üres, és mi is vissza hamis.
A lépés nem volt érvényes.
De ha egy ilyen igaz lenne, akkor a Ezen a ponton, tudjuk, hogy tile_i és
tile_j megegyeznek a helyzete a csempe.
És így, tudjuk frissíteni a fedélzeten pozíciók tile_i és tile_j.
Tudjuk, hogy az új érték lesz az üres és hogy a helyzet blank_i
blank_j volt, ami az eredeti üres - tudjuk, hogy a lapka fog
mozog ott.
>> Figyeljük meg, hogy valójában nem kell csinálni egy valódi csere itt, hiszen tudjuk, hogy a
értékek, amelyeket meg kell beilleszteni be azokat a pozíciókat.
Nem kell egy ideiglenes változó körül.
>> Végül, meg kell emlékezni, hogy mi van a globális változók, amelyek
nyomon követése a helyzet Az üres.
Ezért szeretnénk, hogy a pozíció az az üres lenni, ahol a csempe
eredetileg volt.
Végül térjünk vissza igaz, mert a lépés sikeres volt.
Sikeresen cserélni a üres a csempe.
>> Rendben, az utolsó is ellenőrizni kell won.
Így nyert hasonlóan vissza bool, ahol igaz lesz, jelezve, hogy a
felhasználó megnyerte a játékot.
És hamis azt jelzi, hogy A játék még mindig tart.
A felhasználó még nem nyert.
Szóval, ez lesz nagyjából az ellenkezője init, ahol init,
emlékszem, hogy inicializálja a fórumon 15, 14, 13, 12, stb.
Mivel nyert, azt akarjuk, hogy ellenőrizze, hogy a tábla értéke 1, 2, 3, 4, 5, és így tovább.
>> Így fogjuk inicializálni a számláló 1, mert ez az, amit a felső
balra a táblán kell lennie.
És akkor fogunk hurok az egész fórumon.
Nézzük figyelmen kívül hagyja ezt a feltételt egy pillanatra.
És ez a feltétel csak megy, ellenőrizze a testület ebben a helyzetben
egyenlő az aktuális számít?
Ha igen, akkor lépteti a számlálót, így a következő pozícióra nézzük egy nagyobb
mint a pozíció vagyunk most.
>> Szóval így megkapjuk a a bal felső sarokban kell 1.
Lépteti a számlálót 2.
Nézd meg a következő pozícióba.
Ez 2-ben?
Ha igen, akkor lépteti a számlálót 3.
Ezután pozíció, ez a 3?
Ha igen, akkor lépteti a számlálót 4, és így tovább.
Tehát, ha van olyan helyzetben a fórumon, hogy nem egyezik meg a gróf,
akkor szeretnénk return false mivel ez azt jelenti, van néhány cserép, ami
nem a megfelelő helyzetben.
>> Tehát itt, mi ez a feltétel csinálsz?
Nos, ne feledje, hogy a vak volna menni a jobb alsó sarokban.
És az üres értékét talán nem feltétlenül azonos az értéke
ellen, hogy fog elérni A jobb alsó sarokban.
Ezért kifejezetten szeretné ellenőrizni, ha értéke egyenlő d mínusz 1 és j egyenlő
d értéke mínusz 1 -, amely azt mondja, ha keresik a jobb alsó
A fórumon -, akkor már csak szeretnénk folytatni.
Azt akarjuk, hogy hagyja ki ezt a különleges iteráció a for ciklus.
>> És így, ha sikerül átvészelni ezt egymásba ágyazott for ciklus, ami azt jelenti, hogy
nem volt cserép volt a A helytelen álláspont.
És kitörni a hurok, és gyere Itt, ahol is vissza igaz.
Minden csempe volt a megfelelő pozícióban és ez azt jelenti a felhasználó
megnyerte a játékot.
És ennyi.
A nevem Rob Bowden, és ez a 15 volt.