>> ROB BOWDEN: Hej.
Jeg er Rob, og jeg håber, din spil for spil på 15.
Nu er der fire funktioner, du har brug at gennemføre i dette program - init,
tegne, flytte, og vundet.
Så lad os se på init.
>> Her ser vi den første ting, vi er kommer til at gøre, er at erklære en variabel
kaldet tæller.
Det kommer til at blive initialiseret til d gange d minus 1.
Husk, at d er dimensionen af vores bestyrelse.
Hvordan init kommer til at arbejde, er det går at gentage over den samlede bestyrelse
og vi kommer til at starte øverst til venstre.
>> Og lad os bare sige, at vi har en 4 med 4 bord.
Så øverst til venstre vi er kommer til at sige, er 15.
Og så vil vi bare at tælle gennem bestyrelser, sagde 15, 14, 13,
12, 11, 10, 9, 8, 7, 6, 5, 4 og så videre.
Så øverst til venstre, forventer vi at være d gange d minus 1, som i 4 af 4
tilfælde vil være 16 minus 1, som er korrekt 15.
>> Og nu her er hvor vi kommer til at gentage over den samlede bestyrelse.
Og vi kommer til at sætte hver position i bestyrelsen til den aktuelle værdi af
vores tæller, og tælleren vil at formindske, så den næste
position vi når kommer til at have counter være en mindre end
den forrige plads.
Så vi havde oprindeligt 15 og formindske tæller.
Så vi kommer til at tildele 14 til den næste position, dekrement tæller,
og vi kommer til at tildelte 13, og så videre.
>> Endelig er vi nødt til at håndtere det hjørne tilfælde, hvor hvis bestyrelsen har en endnu
dimension, så bare gør 15, 14, 13, 12, hele vejen ned til 3, 2, 1, er
kommer til at efterlade os med en uløselig bord.
Og vi er nødt til at skifte 1 og 2.
Så hvis d mod 2 er lig med 0, det er hvordan vi kommer til at kontrollere
for at se, om det overhovedet er.
Hvis d mod 2 er lig med 0, så i række d minus 1, som er den nederste række, og
position d minus 2 eller kolonne d minus 2, vi kommer til at sætte det til 2, og
kolonne d minus 3 er vi kommer til at sat til 1.
Så det er bare at vende hvor 1 og 2 er i øjeblikket.
>> Endelig vil vi sætte meget nederste højre svarende til tomme, hvor
tomme er blevet hash defineret ved toppen 0.
Så det ikke var strengt nødvendigt, da denne for-løkke vil have
indstille nederst til højre til 0, idet counter vil naturligvis nå 0.
Men der er afhængig af os at vide, at blank blev hashed at finde en 0.
Hvis jeg går ind i dette program og senere ændre tomt øverst til 100, det
skal stadig arbejde.
>> Så dette er blot at sikre, at nederst til højre er faktisk lig med vores
blindværdi.
Endelig har vi to globale variabler, så blank i og blank j, og vi ser
der er erklæret i toppen.
Og vi kommer til at bruge de to globale variabler til at holde styr på det
position blank, så vi ikke nødt til at se gennem hele
bord for at finde den tomme hver eneste gang vi forsøger at foretage et træk.
Så position af emnet altid er kommer til at starte i bunden til højre.
Så nederst til højre er givet ved indekser d minus 1, d minus 1.
Så det er init.
>> Nu bevæger vi os på at tegne.
Så er uafgjort vil være ens hvor vi kommer til at gentage
over hele linjen.
Og vi ønsker blot at udskrive værdien der er i den enkelte stilling af brættet.
Så her er vi udskriver den værdi, der er i hver position af brættet.
Og bemærk, at vi gør -.
Og det er bare at fortælle printf der uanset om det er en et ciffer eller
to-cifrede nummer, vi stadig ønsker det tage op to kolonner i udskriften,
så hvis vi har to tal og ét cifrede numre i samme bord, vores
bestyrelse vil stadig se pæn og firkantet.
>> Så vi ønsker at gøre det for hver værdi i bestyrelsen, bortset fra blank.
Så hvis position i bestyrelsen lig den tomme, så vi specifikt
ønsker at udskrive blot en understregning at repræsentere den tomme, i stedet for
uanset værdien af blank faktisk er.
>> Endelig ønsker vi at udskrive en ny linje.
Bemærk at dette er stadig inde den ydre for-løkke, men uden
den indre for-løkke.
Da dette ydre for-løkke er iteration løbet af alle rækker, og så dette printf er
vil bare udskrive en ny linje, så vi gå videre til at udskrive den næste række.
Og det er det for uafgjort.
>> Så lad os nu gå videre til at flytte.
Nu passerer vi flytte flisen at Brugeren er indtastet i spillet - de
indtaste den flise, de ønsker at flytte - og du skulle returnere en bool, så
enten sand eller falsk, afhængigt af om at flytte var faktisk
gyldig - om denne flise kan være flyttede ind i tomme rum.
>> Så her erklærer vi en lokal variabel, tile_1 og tile_j, som kommer til at
svare til blank_i og blank_j, bortset fra at det kommer til at holde styr på
stilling af flisen.
Nu her, vi kommer til at bruge blank_i og blank_j og sige okay, så
her er den blank på tavlen.
>> Nu er flisen over den tomme?
Er flisen til venstre for emnet?
Er flisen til højre for emnet?
Er flisen under den blanke?
Så hvis flisen er i enhver af de positioner, så vi ved, at flisen
kan bevæges i det tomme stedet og emnet kan bevæges til hvor
flise i øjeblikket er.
>> Så her, siger vi, hvis bord position blank_i minus 1 blank_j.
Så dette siger er flisen over den aktuelle blank?
Og hvis ja, vi kommer til at huske dette er tilfældet af flisen.
Flisen er i position blank_i minus 1 og blank_j.
nu først, har vi også denne kontrol lige her, så blank_i er
større end 0.
>> Hvorfor ønsker vi at gøre det?
Tja, hvis emnet er i den øverste række af bestyrelsen, så ønsker vi ikke at
kigge over dummyen flisen siden der er intet over toppen
rækken af ​​bestyrelsen.
Dette er, hvordan du måske ende med at få noget som en segmentering fejl eller
Deres program kan bare arbejde på uventede måder.
Så er denne at sikre, at vi ikke kigge på steder, der ikke er gyldige.
>> Nu skal vi til at gøre det samme for alle andre mulige kombinationer.
Så her ser vi under den blanke at se, om det er den flise.
Og vi også nødt til at sikre, at vi er ikke på den nederste række, eller andet, vi
skal ikke lede efter flisen.
Her, vi kommer til at se til venstre for den blank for at se om det er flisen.
Og vi skal ikke se til venstre hvis vi er i kolonnen til venstre.
Og her vil vi se på højre i den tomme, og vi bør ikke
se til højre, hvis vi er i kolonnen længst til højre.
>> Så hvis ingen af ​​disse ting var sandt, det betyder, at flisen ikke var tilstødende
til den tomme, og vi kan vende tilbage falsk.
Flytningen var ikke gyldig.
Men hvis en af ​​dem var sande, så på dette punkt, ved vi, at tile_i og
tile_j er lig med stilling af flisen.
Og så kan vi opdatere bestyrelsen på positioner tile_i og tile_j.
Vi kender den nye værdi vil blive tom og at positionen blank_i
blank_j, som oprindeligt var blank - vi kender flisen kommer til at
flytte dertil.
>> Bemærk vi behøver faktisk ikke at gøre en real swap her, da vi kender
værdier, der skal indsættes i disse stillinger.
Vi har ikke brug for en midlertidig variabel omkring.
>> Endelig er vi nødt til at huske, at vi har vores globale variabler, der
holde styr på positionen af emnet.
Så vi ønsker at opdatere position den tomme at være, hvor flisen
oprindeligt var.
Endelig vil vi returnere sandt, da flytningen var vellykket.
Vi har med held skifte blank med flisen.
>> Okay, så sidste vi nødt til at tjekke vundet.
Så vandt ligeledes returnerer en bool, hvor sand vil indikere, at
brugeren har vundet spillet.
Og falsk indikerer, at spillet er stadig i gang.
Brugeren har ikke vundet.
Så er denne kommer til at være temmelig meget det modsatte af init, hvor init,
Husk, vi initialisere bestyrelsen til 15, 14, 13, 12, så videre.
Betragtninger vundet, vi ønsker at kontrollere, om bord er 1, 2, 3, 4, 5, og så videre.
>> Så vi kommer til at initialisere vores imødegå til 1, da det er hvad den øverste
venstre side af brættet skal være.
Og så vil vi løkke over hele linjen.
Lad os se bort fra denne betingelse for en anden.
Og denne betingelse er bare at check er bestyrelsen på denne position
svarende til de nuværende tæller?
Hvis ja, øg tælle så næste position vi se på, er en højere
end den position, vi er i lige nu.
>> Så det er, hvordan vi får øverst til venstre bør være 1.
Øg tælle til 2..
Kig på den næste position.
Er det 2?
Hvis ja, øg tælle til 3..
Næste position, er dette 3?
Hvis ja, øg tæller til 4, og så videre.
Så hvis der er nogen position på bord, der ikke er lig vores optælling,
så vi ønsker at vende tilbage falsk, da der betyder, at der er nogle flise, der er
ikke i den korrekte position.
>> Så her, hvad er denne betingelse gør?
Nå, huske på, at emnet er formodes at gå på nederst til højre.
Og den tomme værdi måske ikke nødvendigvis være lig med værdien af ​​den
imødegå, at der vil blive nået nederst til højre.
Så vi specifikt ønsker at kontrollere, hvis jeg lig lig d minus 1 og j ligemænd
lig d minus 1 - som siger, hvis vi kigger på nederst til højre på
bestyrelsen - så vi bare ønsker at fortsætte.
Vi ønsker at springe denne særlige iteration af for-løkken.
>> Og så, hvis vi formår at komme igennem dette indlejret for løkke, der betyder, at
der var ingen flise, der var i den forkerte position.
Og vi bryde ud af løkken og komme her, hvor vi kan returnere sandt.
Alle fliser var i den korrekte position og det betyder, at brugeren har
vandt spillet.
Og det er det.
Mit navn er Rob Bowden, og det var 15 år.