Rob Bowden: Hi. Unë jam Rob, dhe unë shpresoj tuaj lojë për lojë të 15. Tani, ka katër funksione që ju duhet për të zbatuar në këtë program - init, të nxjerrë, të lëvizë, dhe fitoi. Pra, le të shohim në init. Këtu, ne shohim se gjëja e parë që jeni do të bëni është të deklarojë një ndryshore quajtur counter. Ajo do të jetë initialized të d herë d minus 1. Mos harroni se d është dimensioni e bordit tonë. Si init do të punojë është ajo që po ndodh të iterate mbi gjithë forumin dhe ne jemi duke shkuar për të filluar në të majtë të lartë. Dhe le të them vetëm ne kanë një 4 nga 4 bordit. Pra, top la ne jemi do të thonë se është 15. Dhe atëherë ne jemi vetëm do të mbështetet përmes bordeve, duke thënë: 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, etj. Pra i majtë lartë, ne presim që të jetë d herë d minus 1, e cila ne pozicionin 4 nga 4 Rasti do të jetë minus 16 1, e cila është e saktë 15. Dhe tani këtu është ku ne jemi duke shkuar për të iterate mbi gjithë forumin. Dhe ne jemi duke shkuar për të vendosur çdo pozicion në bordit të vlerës aktuale të counter tonë, dhe pastaj kundër po shkon në pakësim, në mënyrë që e ardhshme Pozita të arrijmë do të ketë counter jetë një më pak se pozicioni i mëparshëm. Pra, ne fillim kishte 15 dhe pakësim counter. Pra, atëherë ne do të caktojë 14 të pozicion tjetër, pakësim counter, dhe ne jemi duke shkuar për të caktuar 13, dhe kështu me radhë. Së fundi, ne kemi nevojë për të trajtuar atë qoshe rast ku, në qoftë se bordi ka një edhe dimension, atëherë vetëm duke bërë 15, 14, 13, 12, të gjithë mënyrë deri në 3, 2, 1, është do të na lënë me një bord pazgjedhshëm. Dhe ne duhet të bie në ujdi me 1 dhe 2. Pra, nëse d mod 2 është e barabartë me 0, kjo është se si ne jemi duke shkuar për të kontrolluar për të parë nëse kjo është edhe. Nëse d mod 2 është e barabartë me 0, atëherë në rresht d minus 1, e cila është rresht poshtme, dhe Pozicioni d minus 2, ose kolona d minus 2, ne jemi duke shkuar për të vendosur se në 2, dhe Kolona d minus 3 ne jemi duke shkuar për të vendosur në 1. Pra kjo na përmbysur ku 1 dhe 2 janë aktualisht. Së fundi, ne jemi duke shkuar për të vendosur shumë të fund e drejta e barabartë me bosh, ku blank ka qenë hash përcaktuar në majë si 0. Pra, kjo nuk ishte e nevojshme, pasi që kjo për lak do të ketë vendosur fund të drejtën për 0, që nga counter natyrisht do të arrijë 0. Por që mbështetet mbi ne duke e ditur se blank u sheshuar për të gjetur një 0. Nëse unë shkoj në këtë program dhe më vonë ndryshojë bosh në majë të 100, ajo duhet ende punë. Pra, kjo është vetëm duke u siguruar se e drejtë fund të fundit është e barabartë me të vërtetë tonë Vlera bosh. Së fundi, ne kemi dy variabla globale, kështu që unë bosh dhe j bosh, dhe ne shohim ato të deklaruara në krye. Dhe ne jemi duke shkuar për të përdorur këto dy globale variablat për të mbajtur gjurmët e Pozita e bosh, në mënyrë që ne të mos bëjmë duhet të shohim nëpër të gjithë bordit për të gjetur bosh çdo të vetme herë që ne të përpiqemi për të bërë një lëvizje. Pra, pozita e bosh gjithmonë është do të fillojë në fund të drejtën. Pra, e drejta e poshtme është dhënë nga Indekset 1 d minus 1, d minus. Pra, kjo është init. Tani ne shkojmë për të nxjerrë. Pra, barazim do të jetë i ngjashëm ku ne jemi duke shkuar për të iterate mbi gjithë forumin. Dhe ne vetëm duam të shtypura vlerën kjo është në çdo pozicion të bordit. Pra këtu, ne jemi shtypjen e vlerës që është në çdo pozicion te bordi. Dhe vini re se ne jemi duke bërë -. Dhe kjo është vetëm duke u thënë se printf pa marrë parasysh nëse është një shifër një ose numër dy shifror, ne ende duan që ajo të marrë dy kolona në shtyp jashtë, kështu që në qoftë se ne kemi dy shifra dhe një numra shifror në të njëjtin bord, tona Bordi do të vazhdojë të duken bukur dhe katrore. Pra, ne duam të bëjmë që për çdo vlerë në tabelën, përveç bosh. Pra, në qoftë se pozicioni në bord është e barabartë bosh, atëherë ne në mënyrë specifike doni të shtypura nga vetëm një nënvizuar për të përfaqësuar bosh, në vend të çfarëdo vlera e bosh në të vërtetë është. Së fundi, ne duam të shtypura nga një linjë të re. Vini re se kjo është ende brenda jashtme për lak, por jashtë brendshme për lak. Që kjo e jashtme për lak është iterating mbi të gjitha rreshtave, dhe kështu që kjo është e printf duke shkuar për të shkruar vetëm një linjë të re, kështu që ne lëvizin për të shtypura nga rreshtin tjetër. Dhe kjo është ajo për barazim. Pra, tani le të lëvizin për të lëvizur. Tani, ne të kalojë masën, tjegull se përdorues është futur në lojë - ata hyjnë në tjegull ata duan për të lëvizur - dhe ju jeni duke menduar për të kthyer një bool, kështu qoftë e vërtetë apo e rreme, në varësi të nëse ky veprim ishte në të vërtetë vlefshme - nëse do që të tjegull mund të jetë lëvizur në hapësirën e zbrazët. Pra këtu, ne të deklarojë një ndryshore lokale, tile_1 dhe tile_j, të cilat do të të jetë i ngjashëm me blank_i dhe blank_j, përveç se do të mbajnë gjurmët e pozicioni i pllakave. Tani këtu, ne jemi duke shkuar për të përdorur blank_i dhe blank_j dhe thoni të gjithë të drejtë, kështu që këtu është bosh në bord. Tani, është tjegull sipër bosh? Është pllakave të majtë bosh? A është tjegull për të drejtën e bosh? A është tjegull më poshtë bosh? Pra, nëse tjegull është në ndonjë nga ato pozicione, atëherë ne e dimë se tjegull mund të zhvendoset në vend bosh dhe bosh mund të lëvizur në ku tjegull aktualisht është. Kështu që këtu, të themi nëse bordi në pozicionin blank_i minus 1 blank_j. Pra, kjo është duke thënë është tjegull mbi bosh tanishme? Dhe nëse po, ne jemi duke shkuar për të kujtuar që është pozita e tjegull. Tjegull është në pozitë blank_i minus 1 dhe blank_j. tani së pari, ne gjithashtu kemi këtë kontroll të drejtë këtu, kështu blank_i është madhe se 0. Pse ne duam të bëjmë këtë? E pra, nëse bosh është në radhë të lartë i bordit, atëherë ne nuk duam të shikoni më lartë bosh për tjegull që prej nuk ka asgjë mbi krye rresht i bordit. Kjo është se si ju mund të përfundojnë duke u diçka si një defekti segmentimit ose programi juaj mund vetëm të punojnë në mënyra të papritura. Pra, kjo është duke u siguruar se ne nuk bëjmë shikoni në vende që nuk janë të vlefshme. Tani ne jemi duke shkuar për të bërë të njëjtën gjë për të gjitha kombinimet e tjera të mundshme. Pra këtu, ne jemi duke kërkuar poshtë bosh për të parë nëse kjo është tjegull. Dhe ne gjithashtu duhet të sigurohemi që ne jemi jo në rreshtin e poshtëm, ose ndryshe ne nuk duhet të shikoni për tjegull. Këtu, ne do të shikojmë në të majtë të bosh për të parë nëse është e tjegull. Dhe ne nuk duhet të shikojmë në të majtë në qoftë se ne jemi në kolonën pari nga e majta. Dhe këtu ne do të shikojmë të drejta e bosh, dhe ne nuk duhet të shikoni në të djathtë, nëse ne jemi në kolonën rightmost. Pra, në qoftë se asnjë nga ato gjëra ishin të vërteta, që do të thotë tjegull nuk ishte ngjitur për bosh dhe ne mund të kthimit të rreme. Ky veprim nuk ishte i vlefshëm. Por, në qoftë se një nga ata që ishin të vërteta, atëherë në këtë pikë, ne e dimë se tile_i dhe tile_j janë të barabartë tek pozicioni i pllakave. Dhe kështu, ne mund update bordit në pozicionet tile_i dhe tile_j. Ne e dimë se vlera e re do të jetë bosh dhe që blank_i pozicioni blank_j, i cili ishte origjinal blank - ne e dimë tjegull do të lëvizë atje. Vini re ne nuk të vërtetë kanë për të bërë një swap të vërtetë këtu, pasi ne e dimë vlerat që duhet të futen në ato pozita. Ne nuk kemi nevojë për një të përkohshme ndryshueshme përreth. Së fundi, ne duhet të kujtojmë se ne kanë variablave tona globale që janë të mbajtja e pozitës i bosh. Pra, ne duam të rinovuar pozicionin e bosh të jetë ku tjegull fillimisht ishte. Së fundi, ne kthim i vërtetë që nga ky veprim ishte i suksesshëm. Ne me sukses të bie në ujdi bosh me tjegull. Në rregull, kështu që ne e kaluar duhet të kontrolloni fitoi. Pra, fitoi në mënyrë të ngjashme kthen një bool ku e vërtetë është duke shkuar për të treguar se përdorues ka fituar ndeshjen. Dhe false është duke treguar se loja është ende do. Ky përdorues nuk e ka fituar. Pra, kjo do të jetë shumë e shumë të e kundërta e init, ku init, mbani mend, ne nisja e bordit 15, 14, 13, 12, kështu për të. Ndërsa fituar, ne duam të kontrolloni nëse bordi eshte 1, 2, 3, 4, 5, etj. Pra, ne do të nisja tonë luftuar në 1 që nga kjo është ajo që më së e majtë të bordit duhet të jetë. Dhe pastaj ne do të lak mbi gjithë forumin. Le të injorojë këtë kusht për një të dytë. Dhe kjo gjendje është vetëm do të kontrolloni është bordi në këtë pozitë barabartë me pikat aktuale? Nëse është kështu, rritje numërimin në mënyrë që Pozicioni tjetër ne shikojmë është një më i lartë se pozicioni ne jemi në të drejtë tani. Pra, kjo është se si ne të merrni të lartë të majtë duhet të jetë 1. Rritja numërimin në 2. Shikoni pozitën e ardhshëm. A është kjo e 2? Nëse është kështu, rritje numërimin në 3. Pozicioni Tjetra, kjo është 3? Nëse është kështu, rritje numërimin në 4, etj. Pra, nëse ka ndonjë pozitë në Bordi Udhëheqës i cili nuk ka të barabartë numërimin e tonë, atëherë ne duam të kthimit të rreme pasi që do të thotë ka disa tjegull që është jo në pozicionin e duhur. Kështu që këtu, çfarë është ky kusht duke bërë? E pra, mos harroni se është bosh menduar për të shkuar në të djathtë fund. Dhe vlera bosh nuk mund domosdoshmërisht të barabartë me vlerën e kundërshtuar që do të arrihet në fund të drejtën. Pra, ne në mënyrë specifike të dëshironi të shikoni në qoftë se i është e barabartë e barabartë d minus 1 dhe j është e barabartë me është e barabartë me d minus 1 - e cila është duke thënë se në qoftë se ne janë duke kërkuar në fund të drejtën e bord - atëherë ne vetëm duan të vazhdojnë. Ne duam të kaloni këtë të veçantë përsëritje e për lak. Dhe kështu, në qoftë se ne të arrijnë të marrin me anë të kësaj mbivendosur për lak, kjo do të thotë se nuk kishte asnjë tjegull se ishte në pozicioni i gabuar. Dhe ne pushim nga lak dhe të vijnë këtu, ku ne mund të kthehet e vërtetë. Të gjitha pllaka ishin në pozicionet e saktë dhe kjo do të thotë se përdoruesi ka fitoi ndeshjen. Dhe kjo është ajo. Emri im është Rob Bowden, dhe kjo ishte 15.