>> ROB BOWDEN: Hej.
Jag är Rob.
Undrar hur man ska genomföra det här spelet?
Nåväl, låt oss bryta ut personalen lösning.
>> Så, låt oss först gå ner till init funktioner som vi berättat att
genomföra först.
Först ska vi ta en titt på det är init paddla.
Okej, så kom ihåg att vi vill ha det paddla vara exakt centrerad i
x-axeln.
Så vi måste ta reda på där det ska gå.
>> Med tanke på bredden i styrelsen - som är också hash definieras upp topp -
Vi måste dra ut paddeln bredden och dividera med två, så att den
centrum av skoveln är i mitten av brädet.
Kom ihåg att x-koordinaten hänför sig till det övre vänstra hörnet av paddeln,
och så det här är precis där Vi vill att det ska vara.
Y-koordinaten spelar ingen roll så mycket att vi kan placera
det var vi vill.
Så vi instansiera paddeln, vi satt färgen svart, vi satt fyll till True
så det är en ifylld rektangel, och vi sedan lägga till den i fönstret och retur
paddeln.
Och det är det för att initiera paddeln.
>> Det kommer att vara liknande för init resultattavlan.
Så vi kommer att initiera etiketten, vi kommer att ställa in färgen på
ljusgrå - du kan välja vad du vill - vi kommer att ställa in teckensnittet till
sans serif 48 -
kan också välja vad du vill -
vi ska lägga till den i fönstret.
Nu är detta längst bak är inte riktigt behövs, det är bara i fall något
annat händer för att överlappa etiketten.
Sedan när vi använder Detect Kollision, Identifiera Kollision kommer att upptäcka andra
sak innan den upptäcker etiketten.
Men som egentligen inte borde påverka oss i detta program.
>> Slutligen har vi den här resultattavlan Update funktion som vi skrev.
Så låt oss ta en titt på det.
Nu, här ser vi något som är nästan identisk med vad som
vi såg i label.c.
Så vi har en etikett -
en karaktär buffert av 12 tecken, vilket är precis tillräckligt för att hantera alla
heltal, negativ eller positiv.
Då använder vi sprintf att kopiera pekar i denna buffert.
Så är det här innehåller en sträng som representerar antalet poäng.
>> Slutligen, vi satt etiketten till den strängen.
Och då behöver vi för att centrera etiketten ifall vi har gått från nio till 10
Parlamentet och vi har skiftat det.
Så vi beräkna x-och y-koordinater av etiketten som kommer
få bredd och höjden av fönstret.
Även om, kan vi också använda det Konstant Bredd och höjd hash
definieras där uppe.
Vi får också den bredd och höjd Etikettens och dividera
att genom att 2 till centrum.
Och då använder vi Set plats att faktiskt lägga den på den platsen.
Så det är det för init resultattavlan.
>> OK.
Så init bollen kommer att vara mycket lika att init paddlar också.
Vi ser här att vi använder newgoval för att instansiera en ny boll.
Och här vi använder 2 gånger radie som bredden på bollen, och två
gånger radien som den höjden på bollen.
Nu även för newgoval, x-och y-koordinat som vi passerar i går
att hänvisa till upp till vänster i boll, som faktiskt är
utanför kulan själv.
Så för att få bollen exakt centrerad i styrelsen, måste vi passera
bredd delat med 2 för centrum, och sedan subtrahera ut radien för att driva
faktiskt centrum av bollen i mitten av brädet.
Och vi gör exakt samma sak för y-axeln, med undantag av att
höjd i stället för bredden.
>> Så som placerar bollen i mitten.
Och detta instansierar bollen, ställ in färg till svart, fyll i bollen,
sedan slutligen lägga till det i fönster och lämna tillbaka den.
Och det är det för att initiera bollen.
>> Så nu ska vi ta en titt på init tegel vilket är något mer
komplicerat, men det är ganska liknar init paddla.
Nu, först måste vi ta reda på bredden på varje tegelsten.
Kom ihåg att vi har en konstant som kallas samtal som specificerar
antalet kolumner av tegel att vi har.
Så, ska vi bestämma bredden av en enda tegelsten genom att bredden
av hela styrelsen, subtrahera ut storleken på vår gap -
som hash definierad upp topp och hänvisar till det antal bildpunkter som
ska vara mellan varje tegelsten -
och så kommer vi att ha totalt gap gånger kallar tomma bildpunkter i en
enda rad.
Och det kommer också att hänvisa till några tom pixlar till vänster och höger om
den vänstra kolumnen och höger kolumn tegel.
>> Så dra ut de tomma pixlar lämnar oss med ett antal pixlar som
tegel faktiskt använder.
Och så delar vi med samtal för att få antalet pixlar per tegel.
Så här definierar vi en array som bara specificerar de färger vi vill ha för varje
raden av tegel.
Om vi ​​hade fler rader av tegelstenar än färger som vi specificerade, vi får se
att vi ska bara slinga tillbaka runt och använda rött igen, och sedan orange och
gult och så vidare.
>> Så, eftersom p-set spec tips, vi är gå till en slinga över alla rader och
kolonner av tegelstenarna.
Men innan vi slinga över kolumnerna, vi se här att vi specificerar
y-läget för varje tegelsten i just den raden.
Vi kunde också flytta denna till den andra för slinga, men då skulle vi bara vara
gör beräkningen om och om igen när vi inte behöver.
>> Så y-positionen av tegel kommer vara marginal, vilket är hash
definierat upp topp och bara hänvisar till utrymme mellan toppen av styrelsen och
starten av alla blocken.
Och vi kommer att lägga till att raden att vi är på gånger höjden av en
individuell tegel plus gapet som är mellan varje tegelsten.
Så detta är också en vertikal Gapet mellan varje tegelsten.
Så det ger oss y-koordinat av tegel.
>> Så här ska vi beräkna x-koordinat för tegel.
Nu har vi gap delat med 2 sedan, minns tidigare, sa jag att i
vänstra sidan av kortet, vi ska att lämna ett litet utrymme.
Så gap delat med 2 är det utrymmet.
Och sedan ska vi lägga till att kolumnen att vi är på tider bredd plus
gap, där bredden är mängden utrymme att en enda tegelsten tar upp och
då gapet är utrymmet mellan varje tegelsten.
Så som beräknar x-koordinat av tegel.
>> Nu behöver vi bara att instansiera tegel med tanke på att x-och y-koordinat
med hjälp av bredd som vi beräknas för varje tegel och brotthöjd som är
hash definieras där uppe.
Vi sätter färg på tegel.
Lägg märke till att vi använder våra färger array och vi passerar i rad som var
på mod num färger som kommer att göra oss linda tillbaka runt till rött om vi
har fler rader än färger.
Slutligen kommer vi att fylla i tegel färg och lägg till den i fönstret.
>> Och det är det.
Så, det är det för alla våra initieringsmetoder.
Nu måste vi titta på att medan loop som du var tvungen att fylla i.
Så här ser vi att det här är vår stund loop som kommer att fortsätta tills
spelet är över, vilka antingen medel vi får slut på liv eller
Vi kör i sten.
>> Så första vi måste är en Vänta klicka.
Så spelet väntar oss att faktiskt klicka innan bollen börjar röra sig.
Och sedan ska vi För att minska liv.
Så om vi hade tre liv, nu är vi ner till två liv, vi använder våra
tredje liv.
Vi kommer att centrera bollen.
Så nu, det är egentligen inte kommer att hjälpa oss på den allra första livet vi spelar
eftersom bollen redan kommer att har centrerat från när vi
instansieras det.
Men vi ser när vi till slut förlora liv och loop tillbaka runt, då är vi
kommer att vilja centrera bollen från botten av styrelsen tillbaka till
mitten.
>> Så, nu här måste vi skapa x-hastigheten hos bollen.
Och, enligt spec, vi använder d rand 48 för att generera några slumptal
för att ange hastigheten.
Vi lägger till en till att eftersom vi bara intresserad av hastigheten inom intervallet en
till två i stället för noll till ett.
Slutligen använder vi d rand 48 igen För att avgöra om bollen
kommer att flytta till vänster eller rätten att starta.
>> Så d rand 48 returnerar ett slumptal mellan noll och ett, och så genom att fråga
om det är mindre än 0,5, har vi en 50 50 chans att byta hastighet
bollen att vara negativ.
Slutligen sätter vi den vertikala hastigheten av bollen för att bara vara någon konstant.
Vi väljer tre.
Och nu har vi en annan slinga.
>> Så denna inre slingan är kommer att fortsätta.
Lägg märke till här, medan tegel är större än noll -
så om vi kör i sten, vi har vann matchen och vi kan
bryta sig ur denna loop -
och alla få y boll mindre än höjden minus 2 gånger radie.
Så vad detta är att erkänna är om bollen råkar gå förbi paddla, i
då du har förlorat ett liv.
>> Söker inuti denna för slinga vi har den kontroll av en mus händelse.
Och så, om det finns en mus händelse, som betyder att vi vill kontrollera att
se om musen flyttades, och om musen flyttades, vi vill ha
paddla hänga med musen.
Så, för att göra det, vi beräknar nya positionen av skoveln, som kommer
att få positionen för mus - som griper tag i läge med hjälp av
händelse som vi passerade -
och sedan ska vi dra ut paddel bredd dividerat med 2, så
paddla vistelser centrerad på musen i stället för den vänstra sidan av paddeln
vistas centrerad.
>> Så nu vill vi också vara säkra på att vi inte går över till vänster eller höger
sidan av brädet.
Och så här vi bara kontrollera om paddla skulle vara utanför den vänstra sidan av
styrelsen, bara hålla den till vänster sida.
Och här är vi kollar om paddeln skulle vara över den högra sidan av
styrelse, bara hålla det till den högra sidan.
Och slutligen, vi faktiskt ställa placeringen av paddeln.
>> Nu, om det inte fanns en mus rörelse, det betyder att vi kommer att
vill flytta bollen.
Och så har vi redan de x och y hastigheten hos bollen
och så vi flyttar den.
Men nu vill vi att upptäcka ett par saker.
Så här är vi upptäcka om vi drabbas antingen vänster eller höger sida av
ombord, vi vill att bollen att studsa.
Och så, i så fall, vi satt x hastigheten till negativ x hastighet.
>> Om bollen träffade toppen av styrelsen, då vi också vill ha bollen studsa.
Men nu vill vi ändra y hastighet.
Lägg märke till att vi inte har ett tillstånd för kulan slår mot botten av
styrelsen sedan som redan erövrat upp här i while-slinga.
>> Slutligen vill vi detektera några kollisioner där om bollen hit
antingen paddeln eller tegel, vill vi att göra några speciella fall saker.
Så om det var en kollision, där fall objekt kommer inte vara null, då,
Om föremålet träffade paddla, vi skulle bara vill studsa bollen.
Och här, också, vi satt på plats av bollen till strax ovanför paddeln.
Lägg märke till att vi tar x position bollen och bara återanvända det.
Men här vi får y-positionen av paddeln och flytta bollen
ovanför paddeln.
>> Detta är ett specialfall, så att bollen inte slå paddeln och sedan,
innan det är möjlighet att flytta från paddeln, en annan slinga går runt och
den tycker det är fortfarande på panelen och så y hastigheten blir inställd till
negativ och sedan bollen bara typ av pinnar studsande på paddeln.
Så, om vi inte slå paddeln, då vill vi också att kontrollera
Om vi ​​slår tegel.
Och så detta är hur vi kan kontrollera för att se om vi träffar en tegelsten.
>> Vi måste kontrollera för detta eftersom vi kan har faktiskt drabbat etiketten och vi
vill inte ta bort etiketten.
Så om vi träffar en tegelsten, kan vi ta bort det tegel från fönstret, minsknings
vår räkning av tegelstenarna, öka vår antal poäng, och nu måste vi
uppdatera resultattavlan som är exakt samma som vi såg tidigare när vi såg
init resultattavlan.
Men nu är vi bara uppdatera resultattavlan eftersom vi har ändrat
antal punkter.
Och det skall nu visa att Vi träffar en mer rast.
>> Och slutligen, om vi träffar en tegelsten Vi vill också att studsa.
Så till sist, vi pausar bara så att den bollen inte rör sig supersnabbt och vi
kan faktiskt slå i vår paddel.
Och det är ganska mycket det.
Så nu skulle vi slinga tillbaka till toppen av denna while-slinga och fortsätter tills
antingen vi förlorar ett liv eller Vi kör i sten.
>> Vad händer om vi förlorar ett liv?
Sen ska vi avsluta denna stund slinga, och vi får se kommer slinga säkerhetskopiera
till toppen av det yttre while-slinga.
I vilket fall kommer vi att utföra detta ställa upp igen.
Och detta inrättas kommer att få oss att vänta för ett klick, dekrementera vårt nummer
av liv, centrera bollen, räkna en x-och y-hastighet, och
sedan återuppta spelet.
>> Och så, som kommer att fortsätta tills antingen tegel slutar upp att vara mindre än
eller lika med noll -
i vilket fall vi vann matchen -
eller liv är mindre än noll, där fall har vi förlorade matchen.
Så, när så är fallet, vi bryta ut av att medan slinga, och vi når här
där vi ska vänta på klick innan den lämnar spel, så att
spel inte bara omedelbart stänger på oss.
Och slutligen ska vi stänga fönster och det är det.
Mitt namn är Rob, och detta var Breakout.