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.