>> ROB BOWDEN: Hei.
Jeg er Rob.
Lurer på hvordan å gjennomføre dette spillet?
Vel, la oss bryte ut de ansatte løsning.
>> Så, la oss først ta ned til init funksjoner som vi fortalte deg til
gjennomføre første.
Første vi vil ta en titt på det er init padle.
Greit, så husk at vi vil at padle å være nøyaktig sentrert i
x-aksen.
Så vi må finne ut der som bør gå.
>> På grunn av bredden av brettet - hvilken er også hash definert opp toppen -
vi trenger å trekke ut padle bredde og dele på to, slik at
midten av åren er i midten av brettet.
Husk at den x-koordinaten gjelder øverste venstre hjørne av åren,
og så dette er akkurat der vi ønsker den skal være.
Den y-koordinat spiller ingen rolle så mye fordi vi kan plassere
den hvor vi vil.
Så vi Instantiating padle, setter vi fargen svart, satt vi fylle til True
så det er en fylt i rektangel, og vi deretter legge den til vinduet og retur
padle.
Og det er det for initialisering padle.
>> Det kommer til å være lik for init resultattavle.
Så vi kommer til å initialisere etiketten, vi kommer til å sette farge på
lys grå - du kan velge hva du ønsker - vi kommer til å sette skriften til
sans serif 48 -
kan også velge hva du vil -
vi vil legge det til vinduet.
Nå er dette lengst bak er egentlig ikke nødvendig, det er bare i tilfelle noe
annet skjer for å overlappe etiketten.
Så når vi bruker Detect Kollisjon, Detect Kollisjon vil oppdage den andre
ting før den oppdager etiketten.
Men det burde ikke påvirke oss i dette programmet.
>> Endelig har vi denne Oppdater Scoreboard funksjon som vi skrev.
Så la oss ta en titt på det.
Nå, her ser vi noe som er nesten identisk med hva
vi så i label.c.
Så vi har en etikett -
et tegn buffer på 12 tegn, som er akkurat nok til å håndtere alle
heltall, negativ eller positiv.
Så bruker vi sprintf å kopiere peker inn som buffer.
Så er dette inneholder en streng som representerer antall poeng.
>> Til slutt satt vi etiketten til strengen.
Og da trenger vi å sentrere etiketten i tilfelle har vi gått fra ni til 10
peker og vi har flyttet det.
Så vi beregne x-og y-koordinater av etiketten som skal
får bredden og høyden av vinduet.
Selv om vi kunne også bare bruke konstanter Bredde og Høyde hash
definert opp toppen.
Vi får også bredden og høyden av etiketten og dividere
at ved 2 til sentrum.
Og så bruker vi Angi posisjon for å faktisk sette den i den posisjonen.
Så det er det for init resultattavle.
>> OK.
Så init ballen kommer til å være svært lik til init padleåre også.
Vi ser her at vi bruker newgoval for å instantiate en ny ball.
Og her er vi ved hjelp av to ganger radius som bredden av ballen, og 2
ganger den radius som den høyden på ballen.
Nå, også for newgoval, x og y-koordinat at vi passerer i går
å referere til den øverst til venstre på ball, som faktisk er
utenfor ballen selv.
Så for å få ballen akkurat sentrert i styret, må vi passere
bredde dividert med 2 for midten, og deretter trekke ut radius å presse
selve sentrum av ballen i midten av brettet.
Og vi gjør akkurat det samme for Y-aksen, med unntak av å bruke
høyde i stedet for bredden.
>> Så som plasserer ballen i midten.
Og dette instantiates ballen, sette farge til svart, fyll i ballen,
så til slutt legge den til vindu og returnere den.
Og det er det for initialisering ballen.
>> Så nå la oss ta en titt på init klosser som er litt mer
komplisert, men det er ganske lik init padle.
Nå, først må vi finne ut bredden av hver murstein.
Husk at vi har en konstant kalt samtaler som spesifiserer
antall kolonner med murstein som vi har.
Så vi kommer til å bestemme bredden av en enkelt mur ved å ta bredden
av hele brettet, å subtrahere ut størrelsen av vår gap -
som er hash definert opp toppen og henviser til antall piksler som
bør være mellom hver mursten -
og så skal vi ha et totalt gap ganger kaller tomme piksler i en
enkelt rad.
Og det vil også referere til noen blank piksler til venstre og høyre for
høyre kolonne murstein kolonne og venstre.
>> Så trekker ut de tomme piksler etterlater oss med et antall piksler som
murstein faktisk bruker.
Og da vi deler av samtaler for å få antall piksler per murstein.
Så her vi definerer en matrise som bare spesifiserer fargene vi ønsker for hver
rad med murstein.
Hvis vi hadde flere rader med murstein enn farger som vi angitt, vil vi se
at vi vil bare sløyfe tilbake rundt og bruke rødt igjen, og deretter oransje og
gult og så videre.
>> Så, som p-set spec hint, er vi kommer til løkken over alle radene og
kolonner av mursteinene.
Men før vi løkken over kolonnene, vi ser her at vi spesifiserer
y-posisjonen av hver murstein i den aktuelle raden.
Vi kan også bevege dette inn i den andre for loop, men da ville vi bare være
gjør beregningen om og om igjen igjen når vi ikke trenger det.
>> Så y-posisjonen av murstein går være margin, som er hash
definert opp toppen og bare refererer til mellomrommet mellom toppen av brettet og
starten av alle mursteinene.
Og vi kommer til å legge til at rad at vi er på ganger høyden av en
individuelle murstein pluss gapet som er mellom hver murstein.
Dette gjør også en vertikal gap mellom hver murstein.
Så det gir oss y-koordinat av murstein.
>> Så her kommer vi til å beregne x-koordinat av murstein.
Nå har vi gap delt på to siden, husker før, jeg sa at på
venstre side av brettet, skal vi å legge igjen en liten plass.
Så gap dividert med 2, er at plassen.
Og så skal vi legge til at kolonnen at vi er på tider bredden pluss
gap, hvor bredden er mye plass at en enkelt mur tar opp og
deretter gap er rommet mellom hver murstein.
Så som beregner x-koordinaten av murstein.
>> Nå trenger vi bare på å bruke den murstein gitt at x-og y-koordinat
ved hjelp av bredde som vi beregnes for hvert murstein, og pause høyde som er
hash definert opp toppen.
Vi setter fargen på murstein.
Legg merke til at vi bruker vår farger array og vi passerer i raden som var
på mod num farger som kommer til å gjøre oss vikle tilbake rundt til rødt hvis vi
har flere rader enn farger.
Til slutt vil vi fylle i murstein farge og legge den til vinduet.
>> Og det er det.
Så, det er det for alle våre initialisering metoder.
Nå trenger vi å se på at mens løkke som du måtte fylle i.
Så her ser vi at dette er vår mens loop som kommer til å fortsette inntil
spillet er over, noe som betyr enten vi går tom for liv eller
vi kjører ut av murstein.
>> Så første vi må er et Vent på Klikk.
Så spillet venter for oss å faktisk Klikk før ballen begynner å bevege seg.
Og så skal vi å minske liv.
Så hvis vi hadde tre liv, nå er vi ned til to liv, bruker vi vår
tredje levetid.
Vi kommer til å sentrere ballen.
Så nå, dette er egentlig ikke kommer til å hjelpe oss på den aller første livet vi spiller
ettersom ballen er allerede kommer til å har vært sentrert fra når vi
instansiert det.
Men vi ser når vi ender opp med å miste den livet og sløyfe tilbake rundt, så vi er
kommer til å ønske å recenter ballen fra bunnen av brettet tilbake til
midten.
>> Så nå her trenger vi å generere x hastighet omgangen.
Og, som per spec, bruker vi d rand 48 for å generere noen tilfeldige tall
for å angi hastigheten.
Vi legger en til at siden vi bare vil hastigheten i størrelsesorden ett
til to i stedet for null til en.
Til slutt bruker vi d rand 48 igjen i For å avgjøre om ballen
kommer til å flytte til venstre eller rett til å starte.
>> Så d rand 48 returnerer et tilfeldig tall mellom null og en, og så ved å spørre
hvis det er mindre enn 0,5, har vi en 50 50 muligheten for å bytte hastigheten av
ballen for å være negativ.
Til slutt satt vi den vertikale hastighet på ballen å bare være noen konstant.
Vi velger tre.
Og nå har vi en annen sløyfe.
>> Så dette indre løkken er kommer til å fortsette.
Legg merke til her, mens murstein er større enn null -
så hvis vi går tom for stein, vi har vant kampen, og vi kan
bryte ut av denne sløyfen -
og alle Get y Ball mindre enn høyde minus to ganger radius.
Så hva dette er erkjennelsen er hvis ball tilfeldigvis gå forbi padle, i
hvilket tilfelle du har mistet et liv.
>> Ser inne i dette for loop vi har den sjekker for en mus hendelsen.
Derfor, hvis det er en mus arrangement, at betyr at vi ønsker å sjekke for å
se om musen ble flyttet, og dersom mus ble flyttet, vi ønsker å ha det
padle holde tritt med musen.
Så, for å gjøre det, regner vi det nye stilling av åren, som kommer
å ta posisjonen til musen - som griper posisjon ved hjelp av
hendelse som vi ble vedtatt -
og deretter skal vi trekke ut paddle bredde dividert med 2, slik at
padle opphold sentrert på musen i stedet for venstre side av padle
bor sentrert.
>> Så nå ønsker vi også å være sikker på at vi ikke gå over til venstre eller høyre
side av brettet.
Og så her er vi bare sjekke om padle ville være av venstre side av
styret, bare stokk den til venstre side.
Og her er vi sjekke om padle vil være over den høyre side av
bord, bare holde det på den høyre siden.
Og til slutt, vi faktisk satt plasseringen av padle.
>> Nå, hvis det ikke var en musebevegelse, det betyr at vi kommer til å
ønsker å flytte ballen.
Og så vi allerede har x og y hastighet av ballen
og så flytter vi det.
Men nå ønsker vi å oppdage et par ting.
Så her er vi oppdage hvis vi treffer enten venstre eller høyre side av
styret, vil vi ballen til å sprette.
Og så, i så fall setter vi x hastighet til negative x hastighet.
>> Hvis ballen treffer toppen av brettet, Da ønsker vi også ballen sprette.
Men nå ønsker vi å endre y hastighet.
Legg merke til at vi ikke har en forutsetning for ballen treffer bunnen av
styret siden det allerede var fanget opp her i denne stund loop.
>> Til slutt ønsker vi å påvise noen kollisjoner der hvis ballen hit
enten padle eller murstein, vi ønsker å gjøre noen spesielle tilfelle ting.
Så hvis det var en kollisjon, der case objekter vil ikke være null, da,
hvis objektet treffer racketen, ville vi bare ønsker å sprette ballen.
Og her, også, vi angi plasseringen av ballen like over padle.
Legg merke til at vi tar den x stilling ballen og bare gjenbruk av det.
Men her vi får den y posisjon av padle og flytte ballen
ovenfor padle.
>> Dette er et spesielt tilfelle, slik at ballen ikke treffer padle og deretter,
før det er i stand til å bevege seg utenfor padle, en annen sløyfe går rundt og
den tror den er fortsatt på panelet og så y hastighet blir satt tilbake til
negativ og deretter ballen bare slags av pinner spretter på padle.
Så, hvis vi ikke treffer racketen, da vi også ønsker å sjekke
hvis vi treffer murstein.
Og så dette er hvordan vi kan sjekke for å se om vi treffer en murstein.
>> Vi trenger å se etter dette fordi vi kan har faktisk truffet etiketten og vi
ønsker ikke å fjerne etiketten.
Så hvis vi treffer en murstein, kan vi fjerne det murstein fra vinduet, minsk
vår telling av mursteinene, øke vår antall poeng, og nå trenger vi å
oppdatere resultattavle som er nøyaktig det samme som vi så før da vi så
init resultattavle.
Men nå er vi bare oppdaterer resultattavle siden vi har endret
antall poeng.
Og det bør nå vise at vi traff en mer pause.
>> Og til slutt, hvis vi treffer en murstein vi ønsker også å sprette.
Så til slutt, vi pause bare slik at Ballen går ikke superrask og vi
faktisk kan slå det med vår padle.
Og det er ganske mye det.
Så nå ville vi sløyfe tilbake til toppen av dette mens løkke og fortsetter til
enten vi mister et liv eller vi kjører ut av murstein.
>> Hva skjer hvis vi mister et liv?
Så får vi kommer til å gå ut av dette mens loop, og vi vil se vilje sløyfe sikkerhetskopiere
til toppen av den ytre, mens sløyfen.
I så fall, skal vi Utfør dette satt opp igjen.
Og dette satt opp kommer til å ha oss vente for et klikk, dekrementere vår nummer
av liv, recenter ballen, omberegne en x-og y-hastighet, og
deretter gjenoppta spillet.
>> Og så, som vil fortsette inntil enten murstein ender opp med å bli mindre enn
eller lik null -
i hvilket tilfelle vi vant kampen -
eller bor er mindre enn null, i hvilket sak vi har tapt spillet.
Så, når det er tilfelle, kan vi bryte ut av at mens loop, og vi kommer her
hvor vi kommer til å vente på klikk før går ut av spillet, slik at
Spillet gjør ikke bare umiddelbart tett på oss.
Og til slutt vil vi lukke vindu og det er det.
Mitt navn er Rob, og dette var Breakout.