>> ROB BOWDEN: Hej.
Jeg er Rob.
Spekulerer hvordan man gennemfører dette spil?
Nå, lad os bryde ud personalet løsning.
>> Så lad os først hoved ned til init funktioner, som vi fortalte dig at
gennemføre først.
Først den ene, vi vil tage et kig på det er init pagaj.
Okay, så husk, at vi ønsker padle til at blive præcis centreret i
x-aksen.
Så vi er nødt til at regne ud hvor der skal gå.
>> I betragtning af bredden af ​​bestyrelsen - som også hash defineres op top -
vi nødt til at trække ud pagajen bredde og dividere med 2, således at
midten af ​​skovlen er i midten af ​​brættet.
Husk, at x-koordinat henviser til øverste venstre hjørne af pagaj,
og så dette er præcis, hvor vi ønsker det skal være.
Y-koordinaten ligegyldigt så meget, fordi vi kan placere
det, uanset hvor vi ønsker.
Så vi instantiere pagajen, sætter vi farven sort, vi har sat fyld til True
så det er en udfyldt firkant, og vi derefter føje den til vinduet og afkast
pagajen.
Og det er det for initialisering pagajen.
>> Det kommer til at være ens for init resultattavle.
Så vi kommer til at initialisere etiketten, vi kommer til at indstille farven til
lysegrå - du kan hente, hvad du ønsker - vi kommer til at indstille skriftstørrelsen til
sans serif 48 -
kunne også vælge hvad du vil -
vi vil tilføje det til vinduet.
Nu er dette bagest er egentlig ikke nødvendigt, det er bare i tilfælde af noget
ellers sker overlapper etiketten.
Så når vi bruger Detect Kollision, Detect Collision vil detektere den anden
ting, før den opdager etiketten.
Men der virkelig ikke bør påvirke os i dette program.
>> Endelig har vi denne opdatering resultattavle funktion, som vi skrev.
Så lad os tage et kig på det.
Nu, her ser vi noget, der er næsten identisk med det
vi så i label.c.
Så vi har en etiket -
en karakter buffer på 12 tegn, der er lige nok til at håndtere enhver
heltal, negativ eller positiv.
Så vi bruger sprintf at kopiere peger i denne buffer.
Så er dette indeholder en streng, der repræsenterer antallet af punkter.
>> Endelig har vi sat etiketten denne streng.
Og så er vi nødt til at centrere etiketten hvis vi er gået fra ni til 10
peger og vi har flyttet den.
Så vi beregne x-og y-koordinaterne af etiketten, der vil
få bredde og højde af vinduet.
Selv kunne vi også bare bruge den konstanter bredde og højde hash
defineret op øverst.
Vi får også den bredde og højde af etiketten og dividere
at ved 2 til centret.
Og så bruger vi Indsæt position til rent faktisk at sætte det i denne placering.
Så det er det for init resultattavle.
>> OK.
Så init bolden kommer til at være meget ens at init padler så godt.
Vi ser her, at vi bruger newgoval for at instantiere en ny bold.
Og her bruger vi 2 gange radius som bredden af ​​bolden, og 2
gange radius som højden af ​​bolden.
Nu også for newgoval x-og y-koordinat, at vi passerer i går
at henvise til den øverste venstre side af kugle, som faktisk er
uden bolden selv.
Så for at få bolden præcist centreret i bestyrelsen, er vi nødt til at passere
bredde divideret med 2 for midten, og derefter trække ud radius for at skubbe
det faktiske center for den bold ind midten af ​​brættet.
Og vi gør præcis det samme til y-aksen, bortset fra anvendelse
højde i stedet for bredden.
>> Så der placerer bolden i midten.
Og dette instantierer bolden, skal du indstille farve til sort, udfylde bolden,
så endelig føje den til vinduet og returnere den.
Og det er det for initialisering bolden.
>> Så lad os nu tage et kig på init mursten, som er lidt mere
kompliceret, men det er temmelig svarende til init pagaj.
Nu, vi først nødt til at finde ud af bredden af ​​hver mursten.
Husk, at vi har en konstant kaldet opkald, som specificerer
Antallet af kolonner af mursten , vi har.
Så vi kommer til at bestemme bredden af en enkelt mursten ved at tage bredden
af hele brættet, subtraktion ud af størrelsen af ​​vores hul -
som hash defineret op øverst og henviser til antallet af pixels, der
skal være mellem hver mursten -
og så vi kommer til at have en samlet gap tider kalder tomme pixels i et
enkelt række.
Og der vil også henvise til nogle tomme pixels til venstre og højre for
venstre kolonne og højre kolonne mursten.
>> Så trække ud disse tomme pixels efterlader os med et antal pixels,
mursten rent faktisk bruger.
Og så skal vi dividere med opfordringer til at få antallet af pixels per mursten.
Så her er vi definere et array, der bare angiver de farver, vi ønsker for hver
række mursten.
Hvis vi havde flere rækker af mursten end farver, som vi specificerede, vil vi se
at vi bare løkke tilbage omkring og bruger rød igen og derefter orange og
gul og så videre.
>> Så, som p-sæt spec hints, er vi vil sløjfe over alle rækker, og
kolonner af mursten.
Men før vi løkken over kolonnerne, vi se her, at vi er med angivelse af
y position for hver mursten i den pågældende række.
Vi kunne også flytte denne i den anden for-løkke, men så ville vi bare være
gøre beregningen igen og igen igen, når vi ikke behøver at.
>> Så y position mursten går være margin, som er hash
defineret op øverst og blot refererer til plads mellem toppen af ​​brættet og
starten af ​​alle de mursten.
Og vi kommer til at føje til, at rækken at vi er på gange højden af ​​en
individuel mursten plus kløften der er mellem hver mursten.
Så dette er også en lodret kløften mellem de enkelte mursten.
Så det giver os y-koordinat af mursten.
>> Så her vi kommer til at beregne x-koordinaten for mursten.
Nu har vi hul divideret med 2, da, huske før, sagde jeg, at der ved
venstre side af brættet, vil vi at efterlade en lille plads.
Så hul divideret med 2 er, at rummet.
Og så er vi tilføjer til, at kolonnen at vi er på tider bredde plus
hul, hvor bredden er den mængde plads at en enkelt mursten fylder og
så kløften er den plads mellem hver mursten.
Så beregner x-koordinat af mursten.
>> Nu er vi bare nødt til at instantiere mursten, idet x-og y-koordinat
hjælp bredde, vi beregnet for hver mursten, og pause højde, som er
hash defineres op øverst.
Vi sætter farven på mursten.
Bemærk vi bruger vores farver array og vi passerer i den række, der var
på mod num farver, som vil gøre os wrap tilbage rundt til rød, hvis vi
har flere rækker end farver.
Endelig vil vi udfylde mursten farve og føje det til vinduet.
>> Og det er det.
Så det er det for alle vores initialisering metoder.
Nu er vi nødt til at se på, at mens løkke, som du havde fylde i.
Så her ser vi, at det er vores, mens løkke, der vil fortsætte, indtil
spillet er slut, som enten midler vi løber tør for liv eller
vi løber tør for mursten.
>> Så første ting, vi har er en Vent Click.
Så spillet venter os faktisk klik før bolden begynder at bevæge sig.
Og så vil vi at formindske liv.
Så hvis vi havde tre liv, nu er vi ned til to liv, bruger vi vores
tredje liv.
Vi kommer til at centrere bolden.
Så nu, er dette ikke rigtig kommer til at hjælpe os på den allerførste liv vi spiller
idet bolden allerede kommer til at er blevet centreret fra når vi
instantieres det.
Men vi ser, når vi ender med at miste den liv og løkke tilbage omkring, så er vi
vil ønsker at centrere bolden fra bunden af ​​brættet tilbage til
midten.
>> Så, nu her er vi nødt til at generere x hastigheden af ​​bolden.
Og, som pr spec bruger vi d rand 48 at generere nogle tilfældige tal
til at angive hastighed.
Vi tilføjer en til, at da vi bare vil hastigheden i området fra en
til to i stedet for nul til én.
Endelig bruger vi d rand 48 igen i For at afgøre, om bolden
kommer til at flytte til venstre eller retten til at starte.
>> Så d rand 48 returnerer et tilfældigt tal mellem nul og én, og så ved at spørge
hvis der er mindre end 0,5, har vi en 50 50 mulighed for at skifte hastighed
bolden til at være negativ.
Endelig sætter vi den vertikale hastighed bolden til bare at være nogle konstant.
Vi vælger tre.
Og nu har vi en anden løkke.
>> Så denne indre løkke er vil fortsætte.
Bemærk her, mens teglsten er større end nul -
så hvis vi løber tør for mursten, vi har vandt spillet, og vi kan
bryde ud af denne løkke -
og alle får y Ball mindre end højden minus 2 gange radius.
Så hvad det er at anerkende, er, hvis den bold sker for at gå forbi pagaj, i
hvilket tilfælde du har mistet et liv.
>> Leder inde i denne for-løkke, vi har den kontrol for en mus begivenhed.
Og så, hvis der er en mus begivenhed, at betyder, at vi ønsker at kontrollere
se om musen blev flyttet, og hvis mus blev flyttet, vi ønsker at have det
padle holde op med musen.
Så for at gøre det, beregner vi den nye position pagaj, som vil
at fange den holdning af musen - som griber position ved hjælp af
tilfælde af, at vi var gået -
og så vil vi trække ud padle bredde divideret med 2, så
padle ophold centreret på musen i stedet for den venstre side af pagaj
opholder centreret.
>> Så nu er vi også ønsker at være sikker på, at vi ikke går over i venstre side eller højre
side af brættet.
Og så her vi bare kontrollere, om padle ville være slukket i venstre side af
bestyrelsen, bare holde det til venstre side.
Og her er vi tjekker, om pagajen ville være over den højre side af
bord, bare holde det til den højre side.
Og endelig, vi faktisk indstillet placeringen af ​​pagaj.
>> Nu, hvis der ikke var en mus bevægelse, det betyder, at vi kommer til at
ønsker at flytte bolden.
Og så har vi allerede den x og y hastigheden af ​​bolden
og så vi flytter den.
Men nu vil vi til at opdage et par ting.
Så her er vi detektere hvis vi rammer enten venstre eller højre side af
bord, vi vil have bolden til at hoppe.
Og så, i dette tilfælde, vi har sat x hastighed negativ x hastighed.
>> Hvis bolden ramte toppen af ​​brættet, så ønsker vi også bolden hoppe.
Men nu er vi ønsker at ændre y hastighed.
Bemærk vi har ikke en betingelse for bolden rammer bunden af
bord, da der allerede var taget til fange heroppe i dette, mens løkke.
>> Endelig ønsker vi at opdage nogle kollisioner, hvor, hvis bolden hit
enten padle eller mursten, vi ønsker at gøre nogle særlige tilfælde ting.
Så hvis der var en kollision, hvor case objekter vil ikke være nul, så
hvis objektet ramte padle, vi ville blot ønsker at hoppe bolden.
Og her også, vi indstille placeringen af bolden til lige over pagajen.
Bemærk vi tager x position bolden og bare genbruge det.
Men her vi får y position af pagaj og flytte bolden
over pagaj.
>> Dette er et særligt tilfælde, så bolden ikke rammer pagaj og derefter
før det er i stand til at flytte væk fra pagajen, en anden løkke går rundt og
det mener det er stadig på panelet og så y hastighed bliver sat tilbage til
negativ og derefter bolden lige slags af pinde hoppe på pagajen.
Så hvis vi ikke ramte battet så vi også ønsker at kontrollere
hvis vi ramte mursten.
Og så dette er, hvordan vi kan kontrollere at se, om vi ramte en mursten.
>> Vi er nødt til at tjekke for dette, fordi vi kan har faktisk ramt etiketten og vi
ikke ønsker at fjerne etiketten.
Så hvis vi ramte en mursten, kan vi fjerne det mursten fra vinduet, decrement
vores optælling af mursten, forøge vores antal point, og nu er vi nødt til at
opdatere resultattavlen, som er præcis det samme som vi så før, da vi så
init resultattavle.
Men nu er vi bare opdatere resultattavle da vi har ændret
antal point.
Og det skal nu vise, at vi ramte en mere pause.
>> Og endelig, hvis vi ramte en mursten vi ønsker også at hoppe.
Så til sidst, pause vi lige så Bolden bevæger sig ikke super hurtig og vi
kan faktisk ramte den med vores pagaj.
Og det er temmelig meget det.
Så nu ville vi løkke tilbage til toppen af dette, mens løkke og fortsætter indtil
enten vi mister et liv eller vi løber tør for mursten.
>> Hvad sker der, hvis vi mister et liv?
Så vi kommer til at afslutte dette, mens loop, og vi vil se vilje loop sikkerhedskopiere
til toppen af ​​den ydre, mens løkken.
I så fald vil vi udføre denne sat op igen.
Og denne opsætning vil have os til at vente for et klik, formindske vores nummer
af liv, centrerer bolden genberegne en x-og y-hastighed og
derefter genoptage spillet.
>> Og så vil denne fortsætte indtil enten mursten ender er mindre end
eller lig med nul -
i hvilket tilfælde vi vundet spillet -
eller liv er mindre end nul, i hvilket Hvis vi skulle have tabt spillet.
Så når det er tilfældet, kan vi bryde ud af, at mens loop, og vi nå her
hvor vi kommer til at vente på klik før du afslutter spillet, så det
spil gør ikke bare det samme tæt på os.
Og endelig vil vi lukke vindue og det er det.
Mit navn er Rob, og dette var Breakout.