using System; using Jypeli; using Jypeli.ScreenObjects; using Jypeli.Assets; public class Peli : PhysicsGame { Vector nopeusYlos = new Vector(0, 200); Vector nopeusAlas = new Vector(0, -200); PhysicsObject pallo; PhysicsObject alus1; PhysicsObject alus2; PhysicsObject vasenReuna; PhysicsObject oikeaReuna; PhysicsObject alaReuna; PhysicsObject ylaReuna; IntMeter pelaajan1Pisteet; IntMeter pelaajan2Pisteet; Animation alus1_kaasu_tekst; Animation alus2_kaasu_tekst; double resolutionX; double resolutionY; bool alus1_kaasuttaa = false; bool alus2_kaasuttaa = false; protected override void Begin() { LuoKentta(); AsetaOhjaimet(); LisaaLaskurit(); AloitaPeli(); } void LuoKentta() { alus1 = LuoAlus(1, Level.Left + 20.0, 0.0); alus1.Tag = "alus1"; alus1.Image = LoadImage("alus1"); Image[] alus_kaasu1 = LoadImages( "alus1", "alus1_kaasuttaa" ); alus1_kaasu_tekst = new Animation(alus_kaasu1); alus1_kaasu_tekst.FPS = 5; alus1.Animation = alus1_kaasu_tekst; alus2 = LuoAlus(2, Level.Right - 20.0, 0.0); alus2.Tag = "alus2"; alus2.Image = LoadImage("alus2"); Image[] alus_kaasu2 = LoadImages( "alus2", "alus2_kaasuttaa" ); alus2_kaasu_tekst = new Animation(alus_kaasu2); alus2_kaasu_tekst.FPS = 5; alus2.Animation = alus2_kaasu_tekst; alus2.Angle = Angle.StraightAngle; //TeeAjoviivaa(); resolutionX = Screen.Width; resolutionY = Screen.Height; vasenReuna = PhysicsObject.CreateStaticObject(5, resolutionX + 500); vasenReuna.IgnoresPhysicsLogics = true; vasenReuna.Color = Color.White; vasenReuna.X = -(resolutionX / 2) - 50; vasenReuna.Restitution = 1.0; vasenReuna.IsVisible = true; vasenReuna.Tag = "vasenreuna"; vasenReuna.IgnoresCollisionResponse = true; AddCollisionHandler(vasenReuna, ReunaanOsuu); Add(vasenReuna); oikeaReuna = PhysicsObject.CreateStaticObject(5, resolutionX + 500); oikeaReuna.IgnoresPhysicsLogics = true; oikeaReuna.Color = Color.White; oikeaReuna.X = (resolutionX / 2) + 50; oikeaReuna.Restitution = 1.0; oikeaReuna.IsVisible = true; oikeaReuna.Tag = "oikeareuna"; oikeaReuna.IgnoresCollisionResponse = true; AddCollisionHandler(oikeaReuna, ReunaanOsuu); Add(oikeaReuna); ylaReuna = PhysicsObject.CreateStaticObject(resolutionY + 500, 5); ylaReuna.IgnoresPhysicsLogics = true; ylaReuna.Color = Color.White; ylaReuna.Y = (resolutionY / 2) + 50; ylaReuna.Restitution = 0.0; ylaReuna.IsVisible = true; ylaReuna.Tag = "ylareuna"; ylaReuna.IgnoresCollisionResponse = true; AddCollisionHandler(ylaReuna, ReunaanOsuu); Add(ylaReuna); alaReuna = PhysicsObject.CreateStaticObject(resolutionY + 500, 5); alaReuna.IgnoresPhysicsLogics = true; alaReuna.Color = Color.White; alaReuna.Y = -(resolutionY / 2) -50; alaReuna.Restitution = 0.0; alaReuna.IsVisible = true; alaReuna.Tag = "alareuna"; alaReuna.IgnoresCollisionResponse = true; AddCollisionHandler(alaReuna, ReunaanOsuu); Add(alaReuna); Level.Background.CreateStars(1000); Camera.ZoomToLevel(); } PhysicsObject LuoAlus(int kumpi, double x, double y) { PhysicsObject alus = new PhysicsObject(30.0, 20.0); alus.Shape = Shapes.Rectangle; alus.X = x; alus.Y = y; alus.Mass = 10; alus.Restitution = 1.0; alus.CanRotate = true; alus.IgnoresCollisionResponse = false; //AddCollisionHandler(alus, AlusOsuu); Add(alus); return alus; } void LisaaLaskurit() { pelaajan1Pisteet = LuoPisteLaskuri(Screen.Left + 100.0, Screen.Top - 100.0); pelaajan2Pisteet = LuoPisteLaskuri(Screen.Right - 100.0, Screen.Top - 100.0); } IntMeter LuoPisteLaskuri(double x, double y) { IntMeter laskuri = new IntMeter(0); laskuri.MaxValue = 100; ValueDisplay naytto = new ValueDisplay(); naytto.BindTo(laskuri); naytto.X = x; naytto.Y = y; naytto.ValueColor = Color.White; Add(naytto); return laskuri; } void KasittelePallonTormays(PhysicsObject pallo, PhysicsObject kohde) { if (kohde == oikeaReuna) { pelaajan1Pisteet.Value += 1; } else if (kohde == vasenReuna) { pelaajan2Pisteet.Value += 1; } } void AloitaPeli() { } void AsetaOhjaimet() { Keyboard.Listen(Key.A, ButtonState.Down, kaannaVasen, "käännä alusta vasemmalle", alus1, 1); Keyboard.Listen(Key.A, ButtonState.Released, pysaytaPyoriminen, null, alus1, 1); Keyboard.Listen(Key.D, ButtonState.Down, kaannaOikea, "käännä alusta oikealle", alus1, 1); Keyboard.Listen(Key.D, ButtonState.Released, pysaytaPyoriminen, null, alus1, 1); Keyboard.Listen(Key.W, ButtonState.Down, kaasua, "kaasu", alus1, 1); Keyboard.Listen(Key.W, ButtonState.Released, eikaasua, null, alus1, 1); Keyboard.Listen(Key.Tab, ButtonState.Pressed, ammu, null, alus1, 1); Keyboard.Listen(Key.Left, ButtonState.Down, kaannaVasen, "käännä alusta vasemmalle", alus2, 1); Keyboard.Listen(Key.Left, ButtonState.Released, pysaytaPyoriminen, null, alus2, 1); Keyboard.Listen(Key.Right, ButtonState.Down, kaannaOikea, "käännä alusta oikealle", alus2, 1); Keyboard.Listen(Key.Right, ButtonState.Released, pysaytaPyoriminen, null, alus2, 1); Keyboard.Listen(Key.Up, ButtonState.Down, kaasua, "kaasu", alus2, 1); Keyboard.Listen(Key.Up, ButtonState.Released, eikaasua, null, alus2, 1); Keyboard.Listen(Key.RightShift, ButtonState.Pressed, ammu, null, alus2, 1); Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet"); Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, "Poistu"); ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu"); ControllerTwo.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu"); } void kaannaVasen(PhysicsObject alus, int nopeus) { alus.AngularVelocity = 4; } void kaannaOikea(PhysicsObject alus, int nopeus) { alus.AngularVelocity = -4; } void pysaytaPyoriminen(PhysicsObject alus, int nopeus) { alus.AngularVelocity = 0; } void kaasua(PhysicsObject alus, int nopeus) { Angle aluksenKulma = alus.Angle; Vector impulssi = Vector.FromLengthAndAngle(2000, aluksenKulma); double aluksenAste = aluksenKulma.Degree; alus.Push(impulssi); alus.Animation.Resume(); if (alus.Tag == "alus1") { alus1_kaasuttaa = true; } if (alus.Tag == "alus2") { alus2_kaasuttaa = true; } } void eikaasua(PhysicsObject alus, int nopeus) { alus.Animation.Stop(); if (alus.Tag == "alus1") { alus1_kaasuttaa = false; } if (alus.Tag == "alus2") { alus2_kaasuttaa = false; } } void ammu(PhysicsObject alus, int nopeus) { PhysicsObject ammus = new PhysicsObject(3, 3); ammus.Shape = Shapes.Circle; ammus.Color = Color.YellowGreen; ammus.X = alus.X; ammus.Y = alus.Y; ammus.IgnoresCollisionResponse = true; TimeSpan elinaika = new TimeSpan(20000000); ammus.MaximumLifetime = elinaika; ammus.Tag = alus.Tag; AddCollisionHandler(ammus, AmmusOsuu); Add(ammus); Angle aluksenKulma = alus.Angle; Vector impulssi = Vector.FromLengthAndAngle(500, aluksenKulma); ammus.Hit(impulssi); } void AmmusOsuu(PhysicsObject ammus, PhysicsObject kohde) { if (ammus.Tag != kohde.Tag && kohde.Tag != "ajopiste") { ammus.Destroy(); Explosion rajahdys = new Explosion(20); rajahdys.Position = ammus.Position; Add(rajahdys); if (kohde.Tag == "alus2") { pelaajan1Pisteet.Value += 1; } else if (kohde.Tag == "alus1") { pelaajan2Pisteet.Value += 1; } } } void AlusOsuu(PhysicsObject alus, PhysicsObject kohde) { } void TeeAjoviivaa() { Timer aikaLaskuri = new Timer(); // luodaan uusi ajastin, nimeltä aikaLaskuri aikaLaskuri.Interval = 0.1; // ajastukseksi 5 sekuntia aikaLaskuri.Trigger += new Timer.TriggerHandler(PudotaAjopiste); // // asetetaan tapahtuma, kun aikaLaskuri kun 5 sekuntia on kulunut. Add(aikaLaskuri); // lisätään aikaLaskuri peliin aikaLaskuri.Start(); // käynnistetään aikaLaskuri } private void PudotaAjopiste(Timer sender) { if (alus1_kaasuttaa) { PhysicsObject piste = teeAjopiste(alus1); Add(piste); } if (alus2_kaasuttaa) { PhysicsObject piste = teeAjopiste(alus2); Add(piste); } } PhysicsObject teeAjopiste(PhysicsObject alus) { PhysicsObject piste = new PhysicsObject(2, 2); piste.Shape = Shapes.Circle; piste.Color = Color.Yellow;piste.IgnoresCollisionResponse = true; piste.Tag = "ajopiste"; piste.X = alus.X; piste.Y = alus.Y; TimeSpan elinaika = new TimeSpan(20000000); piste.MaximumLifetime = elinaika; Angle aluksenKulma = alus.Angle + Angle.StraightAngle; Vector impulssi = Vector.FromLengthAndAngle(50, aluksenKulma); piste.Hit(impulssi); return piste; } void ReunaanOsuu(PhysicsObject reuna, PhysicsObject osuja) { if (reuna.Tag == "ylareuna") { osuja.Y = alaReuna.Y + 80; } if (reuna.Tag == "alareuna") { osuja.Y = ylaReuna.Y - 80; } if (reuna.Tag == "vasenreuna") { osuja.X = (oikeaReuna.X - 80); } if (reuna.Tag == "oikeareuna") { osuja.X = (vasenReuna.X + 80); } } }