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

Samankaltaiset tiedostot
1. Taustatietoa näppäimistönkuuntelusta

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

1. Miten tehdään peliin toinen maila?

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

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

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

Jypelin käyttöohjeet» Ruutukentän luominen

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

Apuja ohjelmointiin» Yleisiä virheitä

5 Näppäimistö. 5.1 Näppäimistön eventit

Alkuun HTML5 peliohjelmoinnissa

ITKP102 Ohjelmointi 1 (6 op)

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

Jypelin käyttöohjeet» Ruutukentän luominen

Harjoitus Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:

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

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

ITKP102 Ohjelmointi 1 (6 op)

Tasohyppelypeli. Piirrä grafiikat. Toteuta pelihahmon putoaminen ja alustalle jääminen:

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

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

Ohjelmointi 2 / 2010 Välikoe / 26.3

1. Mitä tehdään ensiksi?

C# Windows ohjelmointi perusopas

ITKP102 Ohjelmointi 1 (6 op)

Tietorakenteet (syksy 2013)

Metodit. Metodien määrittely. Metodin parametrit ja paluuarvo. Metodien suorittaminen eli kutsuminen. Metodien kuormittaminen

Olio-ohjelmointi Javalla

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä. Tiedonkätkentä. Aksessorit. 4.2

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2

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

Ohjelmoinnin jatkokurssi, kurssikoe

12. Javan toistorakenteet 12.1

11. Javan toistorakenteet 11.1

NUORTEN PELIOHJELMOINTI. Jyväskylän yliopisto. Kesä 2010

12. Javan toistorakenteet 12.1

11. Javan valintarakenteet 11.1

Taulukot. Jukka Harju, Jukka Juslin

Ohjelmointi 1 / 2009 syksy Tentti / 18.12

Vertailulauseet. Ehtolausekkeet. Vertailulauseet. Vertailulauseet. if-lauseke. if-lauseke. Javan perusteet 2004

Ohjelmoinnin perusteet, syksy 2006

Ohjelmoinnin peruskurssi Y1

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

14. Poikkeukset 14.1

Operaattoreiden ylikuormitus. Operaattoreiden kuormitus. Operaattoreiden kuormitus. Operaattoreista. Kuormituksesta

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

Javan perusteita. Janne Käki

UML -mallinnus Viestiyhteyskaavio EERO NOUSIAINEN

Kompositio. Mikä komposition on? Kompositio vs. yhteyssuhde Kompositio Javalla Konstruktorit set-ja get-metodit tostring-metodi Pääohjelma

Racket ohjelmointia II. Tiina Partanen 2015

ITKP102 Ohjelmointi 1 (6 op)

Taulukot. Taulukon määrittely ja käyttö. Taulukko metodin parametrina. Taulukon sisällön kopiointi toiseen taulukkoon. Taulukon lajittelu

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

11. Javan valintarakenteet 11.1

10 Lock Lock-lause

1 Tehtävän kuvaus ja analysointi

Java-kielen perusteita

Mikä yhteyssuhde on?

Listarakenne (ArrayList-luokka)

5/20: Algoritmirakenteita III

2. Lisää Java-ohjelmoinnin alkeita. Muuttuja ja viittausmuuttuja (1/4) Muuttuja ja viittausmuuttuja (2/4)

Kodu Ohjeet. Jos päivityksiä ei löydy niin ohjelma alkaa latautumaan normaalisti.

Scratch ohjeita. Perusteet

Metodien tekeminen Javalla

NUORTEN PELIOHJELMOINTI. Jyväskylän yliopisto. Kesä 2010

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti

Ohjelmoinnin perusteet Y Python

9. Periytyminen Javassa 9.1

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti

Java kahdessa tunnissa. Jyry Suvilehto

14. Poikkeukset 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.

C# olio-ohjelmointi perusopas

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

Autotallin ovi - Tehtävänanto

13. Loogiset operaatiot 13.1

NUORTEN PELIOHJELMOINTI. Jyväskylän yliopisto. Kesä 2010

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti

Alkuarvot ja tyyppimuunnokset (1/5) Alkuarvot ja tyyppimuunnokset (2/5) Alkuarvot ja tyyppimuunnokset (3/5)

Ohjelmoinnin perusteet Y Python

A TIETORAKENTEET JA ALGORITMIT

Ohjelmointi 2, välikoe

Ohjelmoinnin perusteet Y Python

Toisessa viikkoharjoituksessa on tavoitteena tutustua JUnit:lla testaukseen Eclipse-ympäristössä.

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

Muistutus aikatauluista

7. Oliot ja viitteet 7.1

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

811120P Diskreetit rakenteet

Luokan sisällä on lista

Ohjelmoinnin perusteet Y Python

Ohjelmointityökalu Scratch

Interaktiivinen käyttöliittymä. 2008

Hiirisanomiin vastaaminen. 2007

Luento 5. Timo Savola. 28. huhtikuuta 2006

Lista luokan sisällä

Sisällys. 12. Javan toistorakenteet. Yleistä. Laskurimuuttujat

Sisällys. 9. Periytyminen Javassa. Periytymismekanismi Java-kielessä. Periytymismekanismi Java-kielessä

Ohjelmointi 2 / 2008 Välikoe / Pöytätestaa seuraava ohjelma.

Java-kielen perusteet

Transkriptio:

Muilla kielillä: English Suomi Pong-peli, vaihe 6 Tässä vaiheessa parantelemme mailojen liikuttelua ja tutustumme if-lauseeseen. 1. Rajojen tarkistus Edellisessä oppaassa laitoimme mailat liikkumaan, mutta pieni puute mailojen liikuttamiseen jäi. Nimittäin mailaa voi liikutella ylös- ja alaspäin rajattomasti! Ei ole varmaankaan hyödyllistä eikä toivottavaa, että mailat voivat mennä pelikentän ulkopuolelle. Tämän korjaamiseksi mailaa pitäisi voida liikuttaa ylöspäin vain silloin, kun se ei ole mennyt kentän yläreunan yli. Vastaavasti alaspäin liikuttaminen pitäisi olla mahdollista vain, kun maila ei ole mennyt alarajan ali. 1.1. Yläreunan tarkistus Mietitään algoritmi eli ohje, jolla saisimme mailan pysymään kentän sisäpuolella. Käsitellään ongelmaa ensin vain kentän yläreunalle ja mietitään alareunaa myöhemmin. Pitäisi lisätä ohjelmakoodiin ehto, jonka mukaan: Jos maila on yläreunan yli, niin pysäytetään maila. Muuten liikutetaan mailaa normaalisti. Tällainen tietyllä ehdolla suoritettava koodi voidaan toteuttaa ohjelmoinnissa if-lauseella. If-lause muodostuu ehdosta, ja koodiriveistä jotka suoritetaan vain jos ehto on totta. If-lauseen perässä olevien aaltosulkujen väliin kirjoitetaan ne koodirivit, jotka halutaan suorittaa vain jos annettu ehto toteutuu. Lisää seuraava if-lause AsetaNopeus-aliohjelmaan: if (maila.top > Level.Top) Pong-peli, vaihe 6 1

Mailan ja kentän yläreunojen y-koordinaatit saadaan niiden Top-ominaisuudesta. Ehdossa katsotaan, onko mailan yläreuna kentän yläreunan yläpuolella: Jos on, niin pysäytetään maila ja return-lauseella tullaan pois aliohjelmasta. Jos ei, niin if-lauseen perässä olevien aaltosulkujen välissä olevia koodirivejä ei suoriteta vaan asetetaan mailalle nopeus normaaliin tapaan. Pysähtyykö maila yläreunaan? Taitaa kyllä pysähtyä, mutta... Miksi maila ei enää liiku kun se kerran saavuttaa yläreunan? Mieti hetki, ennen kuin jatkat eteenpäin. 1.2. Toinen yritys Mailat lopettivat liikkumisen, kun ne saavuttivat kentän yläreunan. Vaikka yritämme yläreunan saavuttamisen jälkeen liikuttaa mailaa alaspäin, mailan yläreuna on yhä kentän yläreunan yläpuolella. If-lauseemme ehto siis toteutuu yhä ja maila pysäytetään. Täytyy siis lisätä vielä yksi ehto edelliseen algoritmiimme: Jos nopeuden suunta on ylöspäin ja jos maila on yläreunan yli, niin pysäytetään maila. Muuten liikutetaan mailaa normaalisti. Lisätään toinen ehto samaan if-lauseeseen AsetaNopeus-aliohjelmaan: if ((nopeus.y > 0) && (maila.top > Level.Top)) Tässä käytettiin if-lauseessa merkintää (nopeus.y > 0) && (maila.top > Level.Top). Tässä merkit && voi lukea sanana "ja". 1.1. Yläreunan tarkistus 2

Ehdon voisi nyt lukea: "Nopeuden y-koordinaatti on suurempi kuin nolla JA mailan yläreunan y-koordinaatti on suurempi kuin kentän yläreunan y-koordinaatti". Täältä lisätietoa ehtolauseisiin liittyen. 2. Alareunan tarkistus Nyt kun mailan liikuttelu ylöspäin on kunnossa, tee sama alaspäin liikuttamiselle. Nyt vastaavasti tarkistetaan, onko suunta alaspäin ja onko mailan alareunan y-koordinaatti pienempi kuin kentän alareunan y-koordinaatti. AsetaNopeus näyttää muutosten jälkeen tältä: if ((nopeus.y < 0) && (maila.bottom < Level.Bottom)) if ((nopeus.y > 0) && (maila.top > Level.Top)) 3. XBox-ohjainten lisääminen (valinnainen) Jos haluat, voit lisätä ohjauksen XBox-360-ohjaimille seuraavasti. Muuten voit hypätä tutoriaalin seuraavaan vaiheeseen. XBox-ohjainten napit voidaan asettaa helposti käyttämällä samantapaista Listen-aliohjelmaa kuin näppäimistön nappien asettamisessa. Ainoa ero on, että tällä kertaa ei kutsuta Keyboard.Listen-aliohjelmaa vaan ControllerX.Listen-aliohjelmaa. (X:n paikalle ohjaimen numero: One, Two, Three tai Four), esimerkiksi ControllerOne.Listen kutsuu ohjainta, joka on asetettu ykkösohjaimeksi. ControllerOne.Listen ottaa ensimmäisenä parametrina XBox-ohjaimen napin, jota halutaan kuunnella, esimerkiksi Button.X tarkoittaa ohjaimen X-nappia. Tässä tapauksessa voidaan käyttää samaa AsetaNopeus-aliohjelmaa myös XBox-ohjaimille. Lisää XBox-ohjainten asetus samaan AsetaOhjaimet-aliohjelmaan: d AsetaOhjaimet() Keyboard.Listen( Key.A, ButtonState.Down, AsetaNopeus, "Pelaaja 1: Liikuta mailaa ylös", maila1, nopeusylos ) Keyboard.Listen( Key.A, ButtonState.Released, AsetaNopeus, null, maila1, Vector.Zero ); Keyboard.Listen( Key.Z, ButtonState.Down, AsetaNopeus, "Pelaaja 1: Liikuta mailaa alas", maila1, nopeusalas ) 1.2. Toinen yritys 3

Keyboard.Listen( Key.Z, ButtonState.Released, AsetaNopeus, null, maila1, Vector.Zero ); Keyboard.Listen( Key.Up, ButtonState.Down, AsetaNopeus, "Pelaaja 2: Liikuta mailaa ylös", maila2, nopeusylos Keyboard.Listen( Key.Up, ButtonState.Released, AsetaNopeus, null, maila2, Vector.Zero ); Keyboard.Listen( Key.Down, ButtonState.Down, AsetaNopeus, "Pelaaja 2: Liikuta mailaa alas", maila2, nopeusala Keyboard.Listen( Key.Down, ButtonState.Released, AsetaNopeus, null, maila2, Vector.Zero ); Keyboard.Listen( Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet" ); Keyboard.Listen( Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli" ); ControllerOne.Listen( Button.DPadUp, ButtonState.Down, AsetaNopeus, "Liikuta mailaa ylös", maila1, nopeusylos ControllerOne.Listen( Button.DPadUp, ButtonState.Released, AsetaNopeus, null, maila1, Vector.Zero ); ControllerOne.Listen( Button.DPadDown, ButtonState.Down, AsetaNopeus, "Liikuta mailaa alas", maila1, nopeusal ControllerOne.Listen( Button.DPadDown, ButtonState.Released, AsetaNopeus, null, maila1, Vector.Zero ); ControllerTwo.Listen( Button.DPadUp, ButtonState.Down, AsetaNopeus, "Liikuta mailaa ylös", maila2, nopeusylos ControllerTwo.Listen( Button.DPadUp, ButtonState.Released, AsetaNopeus, null, maila2, Vector.Zero ); ControllerTwo.Listen( Button.DPadDown, ButtonState.Down, AsetaNopeus, "Liikuta mailaa alas", maila2, nopeusal ControllerTwo.Listen( Button.DPadDown, ButtonState.Released, AsetaNopeus, null, maila2, Vector.Zero ); ControllerOne.Listen( Button.Back, ButtonState.Pressed, ConfirmExit, "Lopeta peli" ); ControllerTwo.Listen( Button.Back, ButtonState.Pressed, ConfirmExit, "Lopeta peli" ); 4. Lopputulos Tähän asti pelimme näyttää tältä. ing System; ing System.Collections.Generic; ing System.Linq; ing System.Text; ing Jypeli; ing Jypeli.Assets; ing Jypeli.Controls; ing Jypeli.Effects; ing Jypeli.Widgets; blic class Pong : PhysicsGame Vector nopeusylos = new Vector(0, 200); Vector nopeusalas = new Vector(0, -200); PhysicsObject pallo; PhysicsObject maila1; PhysicsObject maila2; public override void Begin() LuoKentta(); AsetaOhjaimet(); AloitaPeli(); void LuoKentta() pallo = new PhysicsObject(40.0, 40.0); pallo.shape = Shape.Circle; pallo.x = -200.0; 3. XBox-ohjainten lisääminen (valinnainen) 4

pallo.y = 0.0; pallo.restitution = 1.0; Add(pallo); maila1 = LuoMaila(Level.Left + 20.0, 0.0); maila2 = LuoMaila(Level.Right - 20.0, 0.0); Level.CreateBorders(1.0, false); Level.BackgroundColor = Color.Black; Camera.ZoomToLevel(); PhysicsObject LuoMaila(double x, double y) PhysicsObject maila = PhysicsObject.CreateStaticObject(20.0, 100.0); maila.shape = Shape.Rectangle; maila.x = x; maila.y = y; maila.restitution = 1.0; Add(maila); return maila; void AloitaPeli() Vector impulssi = new Vector(500.0, 0.0); pallo.hit(impulssi); void AsetaOhjaimet() Keyboard.Listen(Key.A, ButtonState.Down, AsetaNopeus, "Pelaaja 1: Liikuta mailaa ylös", maila1, nopeusyl Keyboard.Listen(Key.A, ButtonState.Released, AsetaNopeus, null, maila1, Vector.Zero); Keyboard.Listen(Key.Z, ButtonState.Down, AsetaNopeus, "Pelaaja 1: Liikuta mailaa alas", maila1, nopeusal Keyboard.Listen(Key.Z, ButtonState.Released, AsetaNopeus, null, maila1, Vector.Zero); Keyboard.Listen(Key.Up, ButtonState.Down, AsetaNopeus, "Pelaaja 2: Liikuta mailaa ylös", maila2, nopeusy Keyboard.Listen(Key.Up, ButtonState.Released, AsetaNopeus, null, maila2, Vector.Zero); Keyboard.Listen(Key.Down, ButtonState.Down, AsetaNopeus, "Pelaaja 2: Liikuta mailaa alas", maila2, nopeu Keyboard.Listen(Key.Down, ButtonState.Released, AsetaNopeus, null, maila2, Vector.Zero); Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet"); Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli"); ControllerOne.Listen(Button.DPadUp, ButtonState.Down, AsetaNopeus, "Liikuta mailaa ylös", maila1, nopeus ControllerOne.Listen(Button.DPadUp, ButtonState.Released, AsetaNopeus, null, maila1, Vector.Zero); ControllerOne.Listen(Button.DPadDown, ButtonState.Down, AsetaNopeus, "Liikuta mailaa alas", maila1, nope ControllerOne.Listen(Button.DPadDown, ButtonState.Released, AsetaNopeus, null, maila1, Vector.Zero); ControllerTwo.Listen(Button.DPadUp, ButtonState.Down, AsetaNopeus, "Liikuta mailaa ylös", maila2, nopeus ControllerTwo.Listen(Button.DPadUp, ButtonState.Released, AsetaNopeus, null, maila2, Vector.Zero); ControllerTwo.Listen(Button.DPadDown, ButtonState.Down, AsetaNopeus, "Liikuta mailaa alas", maila2, nope ControllerTwo.Listen(Button.DPadDown, ButtonState.Released, AsetaNopeus, null, maila2, Vector.Zero); ControllerOne.Listen(Button.Back, ButtonState.Pressed, ConfirmExit, "Lopeta peli"); ControllerTwo.Listen(Button.Back, ButtonState.Pressed, ConfirmExit, "Lopeta peli"); if ((nopeus.y < 0) && (maila.bottom < Level.Bottom)) 4. Lopputulos 5

if ((nopeus.y > 0) && (maila.top > Level.Top)) 4. Lopputulos 6