source: 2014/30/ToukoA/Pong/FysiikkaPeli1/FysiikkaPeli1/FysiikkaPeli1.cs @ 5543

Revision 5543, 6.8 KB checked in by toolala, 6 years ago (diff)
Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9public class FysiikkaPeli1 : PhysicsGame
10{
11    Vector nopeusYlos = new Vector(0, 750);
12    Vector nopeusAlas = new Vector(0, -750);
13
14    PhysicsObject pallo;
15    PhysicsObject maila1;
16    PhysicsObject maila2;
17    PhysicsObject vasenReuna;
18    PhysicsObject oikeaReuna;
19    PhysicsObject aariVasenReuna;
20    PhysicsObject aariOikeaReuna;
21
22    IntMeter pelaajan1Pisteet;
23    IntMeter pelaajan2Pisteet;
24    public override void Begin()
25    {
26        LuoKentta();
27        LuoPallo();
28        AsetaOhjaimet();
29        LisaaLaskurit();
30        AloitaPeli();
31    }
32    void LuoKentta()
33    {
34        maila1 = LuoMaila(Level.Left + 20.0, 0.0);
35        maila2 = LuoMaila(Level.Right - 20.0, 0.0);
36
37        //Äärimmäinen vasen reuna
38        aariVasenReuna = Level.CreateLeftBorder();
39        aariVasenReuna.X = -700.0;
40        aariVasenReuna.Restitution = 2.0;
41        aariVasenReuna.IsVisible = true;
42        //Äärimmäinen oikea reuna
43        aariOikeaReuna = Level.CreateRightBorder();
44        aariOikeaReuna.X = 700.0;
45        aariOikeaReuna.Restitution = 2.0;
46        aariOikeaReuna.IsVisible = true;
47        //Vasen reuna
48        vasenReuna = Level.CreateLeftBorder();
49        vasenReuna.Y = 100;
50        vasenReuna.Restitution = 1.0;
51        vasenReuna.IsVisible = true;
52        Level.Background.Color = Color.Gold;
53        //Oikea reuna
54        oikeaReuna = Level.CreateRightBorder();
55        oikeaReuna.Y = -100;
56        oikeaReuna.Restitution = 1.0;
57        oikeaReuna.IsVisible = true;
58        Level.Background.Color = Color.Gold;
59        Camera.ZoomToLevel();
60        //Alareuna
61        PhysicsObject alaReuna = Level.CreateBottomBorder();
62        alaReuna.Restitution = 1.0;
63        alaReuna.IsVisible = false;
64        Level.Background.Color = Color.Blue;
65        //Yläreuna
66        PhysicsObject ylaReuna = Level.CreateTopBorder();
67        ylaReuna.Restitution = 1.0;
68        ylaReuna.IsVisible = false;
69        Level.Background.Color = Color.Blue;
70    }
71    void AloitaPeli()
72    {
73        //Pallon liikkumisjutut
74        Vector impulssi = new Vector(500.0, 0.0);
75        pallo.Hit(impulssi);
76    }
77    PhysicsObject LuoMaila(double x, double y)
78    {
79        PhysicsObject maila = PhysicsObject.CreateStaticObject(20.0, 100.0);
80        maila.Shape = Shape.Rectangle;
81        maila.X = x;
82        maila.Y = y;
83        maila.Restitution = 1.0;
84        Add(maila);
85        return maila;
86    }
87    void AsetaOhjaimet()
88    {
89        //Pelin lopettaminen
90        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
91        //Mailan1 liikuttaminen
92        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
93        Keyboard.Listen(Key.W, ButtonState.Down, AsetaNopeus, "Pelaaja 1: Liikuta mailaa ylös", maila1, nopeusYlos);
94        Keyboard.Listen(Key.W, ButtonState.Released, AsetaNopeus, null, maila1, Vector.Zero);
95        Keyboard.Listen(Key.S, ButtonState.Down, AsetaNopeus, "Pelaaja 2: Liikuta mailaa alas", maila1, nopeusAlas);
96        Keyboard.Listen(Key.S, ButtonState.Released, AsetaNopeus, null, maila1, Vector.Zero);
97       
98        //Mailan2 liikuttaminen
99        Keyboard.Listen(Key.Up, ButtonState.Down, AsetaNopeus, "Pelaaja 2: Liikuta mailaa ylös", maila2, nopeusYlos);
100        Keyboard.Listen(Key.Up, ButtonState.Released, AsetaNopeus, null, maila2, Vector.Zero);
101        Keyboard.Listen(Key.Down, ButtonState.Down, AsetaNopeus, "Pelaaja 2: Liikuta mailaa alas", maila2, nopeusAlas);
102        Keyboard.Listen(Key.Down, ButtonState.Released, AsetaNopeus, null, maila2, Vector.Zero);
103
104        //Ohjeet
105        //Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControls, "Näytä ohjeet");
106    }
107    void AsetaNopeus(PhysicsObject maila, Vector nopeus)
108    {
109        if ((nopeus.Y > 0) && (maila.Top > Level.Top))
110        {
111            maila.Velocity = Vector.Zero;
112            return;
113        }
114        if ((nopeus.Y < 0) && (maila.Bottom < Level.Bottom))
115        {
116            maila.Velocity = Vector.Zero;
117            return;
118        }
119        maila.Velocity = nopeus;
120    }
121    void LisaaLaskurit()
122    {
123        pelaajan1Pisteet = LuoPisteLaskuri(Screen.Left + 100.0, Screen.Top - 100.0);
124        pelaajan2Pisteet = LuoPisteLaskuri(Screen.Right - 100.0, Screen.Top - 100.0);
125    }
126    IntMeter LuoPisteLaskuri(double x, double y)
127    {
128        IntMeter laskuri = new IntMeter(0);
129        laskuri.MaxValue = 50;
130
131        Label naytto = new Label();
132        naytto.BindTo(laskuri);
133        naytto.X = x;
134        naytto.Y = y;
135        naytto.TextColor = Color.Green;
136        naytto.BorderColor = Level.Background.Color;
137        naytto.Color = Level.Background.Color;
138        Add(naytto);
139
140
141        return laskuri;
142    }
143    void KasittelePallonTormays(PhysicsObject pallo, PhysicsObject kohde)
144    {
145        if ((kohde.Y < 0) && (kohde.Bottom < Level.Bottom))
146        {
147            kohde.Velocity = Vector.Zero;
148        }
149        if ((kohde.Y > 0) && (kohde.Top > Level.Top))
150        {
151            kohde.Velocity = Vector.Zero;
152        }
153        if (kohde == aariOikeaReuna)
154        {
155            //Tuhoaa pallon ja luo sen uudestaan
156            pallo.Destroy();
157            maila1.Destroy();
158            maila2.Destroy();
159            LuoPallo();
160            AloitaPeli();
161        }
162        if (kohde == aariVasenReuna)
163        {
164            //Tuhoaa pallon ja luo sen uudestaan
165            pallo.Destroy();
166            maila1.Destroy();
167            maila2.Destroy();
168            LuoKentta();
169            LuoPallo();
170            AsetaOhjaimet();         
171            AloitaPeli();
172        }
173        if (kohde == oikeaReuna)
174        {
175            pelaajan1Pisteet.Value += 1;
176        }
177        if (kohde == vasenReuna)
178        {
179            pelaajan2Pisteet.Value += 1;
180        }
181
182        if (kohde == aariOikeaReuna)
183        {
184            pelaajan1Pisteet.Value += 10;
185        }
186
187        if (kohde == aariVasenReuna)
188        {
189            pelaajan2Pisteet.Value += 10;
190        }
191    }
192    void LuoPallo()
193    {
194        //Itse pallo
195
196        pallo = new PhysicsObject(50.0, 50.0);
197        pallo.Shape = Shape.Circle;
198        pallo.X = -200;
199        pallo.Y = 0.0;
200        pallo.Restitution = 10.0;
201        Add(pallo);
202        AddCollisionHandler(pallo, KasittelePallonTormays);
203    }
204    const double PALLON_MIN_NOPEUS = 600;
205
206    protected override void Update(Time time)
207    {
208        if (pallo != null && Math.Abs(pallo.Velocity.X) < PALLON_MIN_NOPEUS)
209        {
210            pallo.Velocity = new Vector(pallo.Velocity.X * 1.1, pallo.Velocity.Y);
211        }
212        base.Update(time);
213    }
214}
Note: See TracBrowser for help on using the repository browser.