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.