Pong-peli, vaihe Koordinaatistosta. Muilla kielillä: English Suomi. Tämä on Pong-pelin tutoriaalin osa 2/7. Tämän vaiheen aikana

Samankaltaiset tiedostot
Pong-peli, vaihe Aliohjelman tekeminen. Muilla kielillä: English Suomi. Tämä on Pong-pelin tutoriaalin osa 3/7. Tämän vaiheen aikana

1. Miten tehdään peliin toinen maila?

Pong-peli, vaihe Aliohjelmakutsu laskureita varten. 2. Laskurin luominen. Muilla kielillä: English Suomi

1. Taustatietoa näppäimistönkuuntelusta

Pong-peli, vaihe Rajojen tarkistus Yläreunan tarkistus. Muilla kielillä: English Suomi

Jypelin käyttöohjeet» Ruutukentän luominen

Jypelin käyttöohjeet» Miten voin liittää törmäyksiin tapahtumia?

Jypelin käyttöohjeet» Miten lisään ohjaimet peliin

Jypelin käyttöohjeet» Ruutukentän luominen

Jypelin käyttöohjeet» Millaisia olioita on olemassa?

Harjoitus Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:

Apuja ohjelmointiin» Yleisiä virheitä

ITKP102 Ohjelmointi 1 (6 op)

Jypelin käyttöohjeet» Miten saan peliin pistelaskurin?

13. Loogiset operaatiot 13.1

ITKP102 Ohjelmointi 1 (6 op)

Peilaus pisteen ja suoran suhteen Pythonin Turtle moduulilla

Texture Tekstuuri Peliolion päälle piirrettävä kuva. Update Päivittää Päivittää jotain, esimerkiksi pelin tilannetta.

Ohjelmassa henkilön etunimi ja sukunimi luetaan kahteen muuttujaan seuraavasti:

Java-kielen perusteita

13. Loogiset operaatiot 13.1

Taulukot. Jukka Harju, Jukka Juslin

5. HelloWorld-ohjelma 5.1

Ohjeissa pyydetään toisinaan katsomaan koodia esimerkkiprojekteista (esim. Liikkuva_Tausta1). Saat esimerkkiprojektit opettajalta.

MAA7 Kurssikoe Jussi Tyni Tee B-osion konseptiin pisteytysruudukko! Kaikkiin tehtäviin välivaiheet näkyviin! Laske huolellisesti!

Ohjelmoinnin jatkokurssi, kurssikoe

ITKP102 Ohjelmointi 1 (6 op)

C:\MyTemp\ohj1\ohjdemot\k2012\demot\vastaukset\demo11\PP1\TokaPisin.cs 1 using System; 2 using System.Collections.Generic; 3 using System.

Alkuun HTML5 peliohjelmoinnissa

Ohjelmointitaito (ict1td002, 12 op) Kevät Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen

Luokka Murtoluku uudelleen. Kirjoitetaan luokka Murtoluku uudelleen niin, että murtolukujen sieventäminen on mahdollista.

TEHTÄVIEN RATKAISUT. b) 105-kiloisella puolustajalla on yhtä suuri liikemäärä, jos nopeus on kgm 712 p m 105 kg

ITKP102 Ohjelmointi 1 (6 op)

MAB3 - Harjoitustehtävien ratkaisut:

Scratch ohjeita. Perusteet

KODU. Lumijoen peruskoulu

Olion elinikä. Olion luominen. Olion tuhoutuminen. Olion tuhoutuminen. Kissa rontti = null; rontti = new Kissa();

12. Javan toistorakenteet 12.1

815338A Ohjelmointikielten periaatteet Harjoitus 5 Vastaukset

Suorat ja tasot, L6. Suuntajana. Suora xy-tasossa. Suora xyzkoordinaatistossa. Taso xyzkoordinaatistossa. Tason koordinaattimuotoinen yhtälö.

KOKO PERHEEN HAUSKA STRATEGIAPELI OHJEET

C# Windows ohjelmointi perusopas

12. Javan toistorakenteet 12.1

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. Assembly ja konekieli

Tekijä Pitkä matematiikka

14. Hyvä ohjelmointitapa 14.1

Sokkelon sisältö säilötään linkitetyille listalle ja tekstitiedostoon. Työ tehdään itsenäisesti yhden hengen ryhmissä. Ideoita voi vaihtaa koodia ei.

Racket ohjelmointia osa 2. Tiina Partanen Lielahden koulu 2014

yleisessä muodossa x y ax by c 0. 6p

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti

7. Oliot ja viitteet 7.1

origo III neljännes D

Racket ohjelmointia II. Tiina Partanen 2015

2 Raja-arvo ja jatkuvuus

11. Javan toistorakenteet 11.1

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti

Algoritmit. Ohjelman tekemisen hahmottamisessa käytetään

5. HelloWorld-ohjelma 5.1

Approbatur 3, demo 1, ratkaisut A sanoo: Vähintään yksi meistä on retku. Tehtävänä on päätellä, mitä tyyppiä A ja B ovat.

Merkkijono on palindromi, jos se säilyy samana, vaikka sen kääntää väärinpäin.

UUSI AIKA UUDET TAIDOT Valtakunnalliset virtuaaliopetuksen päivät 2010

Metodien tekeminen Javalla

7. Näytölle tulostaminen 7.1

TAULUKON TEKEMINEN. Sisällysluettelo

11. Javan valintarakenteet 11.1

Ensikosketus ohjelmointiin

1 PÖYDÄT JA PALLOT 1. Kilpailuissa tulee käyttää Suomen Biljardiliiton hyväksymiä pöytiä ja palloja.

Kahden suoran leikkauspiste ja välinen kulma (suoraparvia)

Avaa ohjelma ja tarvittaessa Tiedosto -> Uusi kilpailutiedosto

Eye Pal Solo. Käyttöohje

Ohjelmointi 2 / 2010 Välikoe / 26.3

Olio-ohjelmointi Syntaksikokoelma

Piste ja jana koordinaatistossa

3.3 Paraabeli toisen asteen polynomifunktion kuvaajana. Toisen asteen epäyhtälö

Winter Tour 2014 Sports Coach Joukkue Scramble Open - golf simulaattorissa

Ohjelmoinnin peruskurssi Y1

XNA grafiikka laajennus opas. Paavo Räisänen. Tämän oppaan lähdekoodit ovat ladattavissa näiden sivujen Ladattavat osiossa.

Ohjelmoinnin perusteet Y Python

9. Periytyminen Javassa 9.1

Winter Tour 2014 PariScramble Open Sports Coach -golfsimulaattorissa

12 Mallit (Templates)

PRELIMINÄÄRIKOE. Pitkä Matematiikka

BlueJ ohjelman pitäisi löytyä Development valikon alta mikroluokkien koneista. Muissa koneissa BlueJ voi löytyä esim. omana ikonina työpöydältä

3 TOISEN ASTEEN POLYNOMIFUNKTIO

Matopeli C#:lla. Aram Abdulla Hassan. Ammattiopisto Tavastia. Opinnäytetyö

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti

13. Hyvä ohjelmointitapa (osa 1) 13.1

Excel syventävät harjoitukset

Ohjelmoinnin perusteet Y Python

XXIII Keski-Suomen lukiolaisten matematiikkakilpailu , tehtävien ratkaisut

Koottu lause; { ja } -merkkien väliin kirjoitetut lauseet muodostavat lohkon, jonka sisällä lauseet suoritetaan peräkkäin.

Vastaavasti, jos vektori kerrotaan positiivisella reaaliluvulla λ, niin

Ohjelmoinnin perusteet Y Python

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. Assembly ja konekieli

Kerta 2. Kerta 2 Kerta 3 Kerta 4 Kerta Toteuta Pythonilla seuraava ohjelma:

Python-ohjelmointi Harjoitus 2

Pyramidi 4 Analyyttinen geometria tehtävien ratkaisut sivu 352 Päivitetty Pyramidi 4 Luku Ensimmäinen julkaistu versio

Facebook-sivun luominen

Transkriptio:

Muilla kielillä: English Suomi Pong-peli, vaihe 2 Tämä on Pong-pelin tutoriaalin osa 2/7. Tämän vaiheen aikana Laitetaan pallo liikkeelle Tehdään kentälle reunat Vaihdetaan kentän taustaväri Zoomataan kamera näyttämään koko kenttä kerralla 1. Koordinaatistosta Pelikentällä kulkee koordinaatisto, jonka avulla olioita voi sijoitella eri puolille kenttää. Koordinaatiston keskipiste on pelikentän keskipisteessä. Edellisessä vaiheessa emme asettaneet pallolle koordinaatteja, joten sen paikaksi tuli oletuksena kentän keskipiste (origo eli piste jonka sekä x- että y-koordinaatti on nolla). Seuraava kuva esittää pallon x-koordinaatin idean. Kun x-koordinaatti on nolla, pallo on leveyssuunnassa keskellä pelikenttää. Jos taas x:n arvo on -200, pallon sijainti on leveyssuunnassa vasemmalle päin origosta. y-koordinaatin idea on sama, se vain kertoo paikan korkeussuunnassa. Peliolioiden x- ja y-koordinaatit voi asettaa muuttamalla fysiikkaobjektin X- ja Y-ominaisuuksia: pallo.x = -200.0; pallo.y = 0.0; Lisää edelliset rivit koodiin pallon luonnin jälkeen. Kokeile erilaisilla X:n ja Y:n arvoilla mihin pallo sijoittuu ruudulla. (paina F5) 1. Koordinaatistosta 1

2. Vektoreista Pelin tekemisessä tarvitaan vektoreita. Vektori on otus, joka sisältää sekä x- että y-koordinaatin. Voisimme kuvata vektoria vaikkapa merkinnällä (10, 20). Ensimmäinen luku on x-koordinaatti ja jälkimmäinen y-koordinaatti. Vektorilla voidaan kuvata esimerkiksi olion paikkaa koordinaatistossa tai kappaleen paikan muutosta suhteessa johonkin aikaisempaan paikkaan. Esimerkiksi vektori (100, 50) kuvaisi x-koordinaatin muutosta 100 yksikköä oikealle ja y-koordinaatin muutosta 50 yksikköä ylöspäin. Seuraavassa kuvassa on havainnollistettu edellä kuvattua vektoria. Vektoreita kuvataan yleensä nuolella. Koska vektorin x-arvo on 100, kuvassa nuolen pituus vaakasuunnassa on 100 yksikköä. Vastaavasti nuolen korkeus pystysuunnassa on 50 yksikköä. Jos palloa siirretään vektorin mukaisesti, se liikkuu nuolen osoittamaan suuntaan. 3. Pallon laittaminen liikkeelle Laitetaan seuraavaksi pallo liikkumaan. Koska käytössämme on fysiikkamoottori, se käy helposti. Fysiikkaobjektin voi tökätä liikkeelle kutsumalla sen Hit-aliohjelmaa. Sille annetaan parametrina vektori, joka kertoo mihin suuntaan ja kuinka kovaa pallo lähtee. Lisää seuraavat rivit koodiin sen jälkeen, kun pallo on lisätty peliin (eli Add-kutsun jälkeen): Vector impulssi = new Vector(500.0, 0.0); pallo.hit(impulssi); Mitä isompia arvoja annat vektorille, sitä kovempaa pallo lähtee. Kokeile tehdä vektori erilaisilla x- ja y-arvoilla ja katso mihin suuntaan pallo lähtee. Miten laittaisit pallon liikkumaan yläviistoon? 4. Reunan lisääminen Kun pallo on saatu liikkeelle, karkaa se ennen pitkää ruudusta ulos. Lisätään pelialueeseen reunat nähdäksemme miten pallo pomppii. Lisää seuraava aliohjelmakutsu (aliohjelmista kerrotaan tarkemmin seuraavassa vaiheessa) koodiin sen jälkeen, kun pallo on luotu ja lisätty peliin. Level.CreateBorders(); Kun nyt ajat peliä, pelikentässä pitäisi olla reunat, joihin pallo myös törmää. Miksi pallo törmää, vaikka emme ole törmäystä mitenkään ohjelmoineet? Siksi, että koska projektia luodessamme teimme fysiikkapelin. Fysiikkapelin (PhysicsGame) fysiikkamoottori laskee pallon liikkeitä meidän puolestamme. 4. Reunan lisääminen 2

5. Vauhdin säilyttäminen törmäyksissä Pelissämme on pieni puute: pallon vauhti hidastuu aina kun se törmää seinään. Fysiikkaoliolla on onneksi x- ja y-koordinaattien lisäksi monia muita ominaisuuksia. Yksi niistä on Restitution, vapaasti suomennettuna kimmoisuus. Kimmoisuudelle voi antaa lukuarvoja väliltä 0.0-1.0. Mitä lähempänä ykköstä arvo on, sitä enemmän olion vauhdista säilyy törmäyksessä. Esimerkiksi superpallon kimmoisuusarvo olisi lähellä ykköstä, kun taas kokoon rutistetun paperin kimmoisuus olisi lähempänä nollaa, sehän ei pomppaa korkealle vaikka sellaisen paiskaisi miten kovaa lattialle. Asetetaan pallon Restitution-ominaisuuden arvoksi 1.0. Kirjoita tämä rivi uudelle riville esimerkiksi pallon koordinaattien asettamisen jälkeen: pallo.restitution = 1.0; Koska törmäyksessä on aina kaksi osapuolta, täytyy myös törmäyksen kohteen kimmoisuus asettaa vastaavasti. Pelikentän reunoille tämä tehdään käyttämällä CreateBorders-aliohjelmasta versiota, joka ottaa vastaan parametreja. Ensimmäinen parametri on kimmoisuus, mikä pallollekin asetettiin, ja toinen parametri kertoo, tehdäänkö reunoista näkyvät vai ei. Sen tyyppi on totuusarvo bool, joten sillä on kaksi mahdollista arvoa: true eli tosi (eli "kyllä") false eli epätosi (eli "ei") Koska reunat jäävät myöhemmin ruudun ulkopuolelle, toisen parametrin arvolla ei ole tässä niin väliä. Olkoon sen arvo vaikkapa false. Etsi koodistasi rivi Level.CreateBorders(); ja muuta se seuraavanlaiseksi. Level.CreateBorders(1.0, false); 6. Kentän taustavärin vaihtaminen?alkuperäisen Pong-pelin taustaväri oli musta eikä vaaleansininen. Korjataan puute lisäämällä edellisen rivin jälkeen seuraava rivi, joka asettaa kentälle uuden taustavärin. Level.Background.Color = Color.Black; Miten asettaisit taustavärin vihreäksi? 6. Kentän taustavärin vaihtaminen 3

Muista tallentaa työsi välillä. 7. Kameran kohdistaminen Asetetaan vielä lopuksi kamera näyttämään koko kenttää. Pelikentässämme on aina mukana kamera, johon viitataan sanalla Camera. Kameraa voi vaikkapa zoomata lähemmäksi tai kauemmaksi kentästä. Kohdistetaan kamera kuitenkin nyt siten, että se näyttää aina koko kentän kerralla. Se tapahtuu lisäämällä seuraava rivi: Camera.ZoomToLevel(); 8. Lopputulos Edellä tehtyjen lisäysten jälkeen koodin tulisi näyttää suunnilleen tältä: using System; using System.Collections.Generic; using System.Linq; using System.Text; using Jypeli; using Jypeli.Assets; using Jypeli.Controls; using Jypeli.Effects; using Jypeli.Widgets; public class Pong : PhysicsGame { public override void Begin() { PhysicsObject pallo = new PhysicsObject(40.0, 40.0); pallo.shape = Shape.Circle; pallo.x = -200.0; pallo.y = 0.0; pallo.restitution = 1.0; Add(pallo); Level.CreateBorders(1.0, false); Level.BackgroundColor = Color.Black; Camera.ZoomToLevel(); Vector impulssi = new Vector(500.0, 0.0); pallo.hit(impulssi); } } Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli"); Huomaa, että C#-kieli ei ole kovin tarkka "tyhjien" merkkien, kuten välilyöntien tai tyhjien rivien, suhteen. Ohjelman toiminnan kannalta ei siis ole väliä, vaikka koodissasi on tyhjiä rivejä, tai tuleeko sulkumerkin jälkeen välilyönti. Voit kirjoittaa tyhjiä rivejä koodiin, jos se helpottaa sinulla koodin lukemista. Myöskään joidenkin lauseiden (eli koodirivien) järjestys ei ole kovin oleellinen. Ei esimerkiksi ole väliä asetatko pallolle ensin koordinaatit vai kimmoisuuden. Toisaalta taas pallo täytyy luoda ennen kimmoisuuden 8. Lopputulos 4

asettamista, sillä kimmoisuuden asettamiseen tarvitaan fysiikkaolio. Huomaa myös, että valmiissa koodissa voi olla joitakin using-alkuisia rivejä, joita koodissasi ei ole tai päinvastoin. Tämäkään ei välttämättä haittaa. Jos koodistasi puuttuu jokin using-lause, siitä tulee selkeä virhe. 8. Lopputulos 5