source: 2011/23/mikmatla/pinkiponki/FysiikkaPeli1/FysiikkaPeli1/Peli.cs @ 1730

Revision 1730, 6.4 KB checked in by joaamaka, 8 years ago (diff)

Toinen Huijaus nappi, osumisesta menettää pisteitä ja mahdollisuus lisätä palloja kesken pelin (uusista palloista ei (vielä) menetä pisteitä)

Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9public class Peli : PhysicsGame
10{
11    List<Label> ValikonKohdat;
12
13    Vector nopeusYlos = new Vector(0.0, 400.0);
14    Vector nopeusAlas = new Vector(0.0, -400.0);
15
16    PhysicsObject pallo;
17
18    PhysicsObject maila1;
19    PhysicsObject maila2;
20
21    IntMeter pelaaja1pisteet;
22    IntMeter pelaaja2pisteet;
23
24    PhysicsObject vasenReuna;
25    PhysicsObject oikeaReuna;
26
27    public override void Begin()
28    {
29        Valikko();
30    }
31
32    void Valikko()
33    {
34        ClearAll();
35        Level.BackgroundColor = Color.DarkGreen;
36        ValikonKohdat = new List<Label>();
37
38        Label kohta1 = new Label("Aloita uus peli");
39        kohta1.Position = new Vector(0, 50);
40        ValikonKohdat.Add(kohta1);
41
42        Label kohta2 = new Label("Lopeta");
43        kohta2.Position = new Vector(0, -30);
44        ValikonKohdat.Add(kohta2);
45
46        foreach (Label Valikonkohta in ValikonKohdat)
47            Add(Valikonkohta);
48
49        Mouse.ListenOn(kohta1, MouseButton.Left, ButtonState.Pressed, Aloota, null);
50        Mouse.ListenOn(kohta2, MouseButton.Left, ButtonState.Pressed, Lopeta, null);
51
52        Mouse.IsCursorVisible = true;
53        Mouse.ListenMovement(1.0, ValikossaLiikkuminen, null);
54        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Lopeta, "");
55    }
56
57    void ValikossaLiikkuminen(AnalogState hiirenTila)
58    {
59        foreach (Label kohta in ValikonKohdat)
60        {
61            if (Mouse.IsCursorOn(kohta))
62            {
63                kohta.TextColor = Color.YellowGreen;
64            }
65            else
66            {
67                kohta.TextColor = Color.Wheat;
68            }
69        }
70    }
71
72    void Aloota()
73    {
74        ClearAll();
75        LuoKentta();
76        LisaaLaskurit();
77        AsetaOhjaimet();
78        AloitaPeli();
79    }
80
81    void Lopeta()
82    {
83        Exit();
84    }
85
86    void LisaaLaskurit()
87    {
88        pelaaja1pisteet = LuoPisteLaskuri(Screen.Left + 100.0, Screen.Top - 100.0);
89        pelaaja2pisteet = LuoPisteLaskuri(Screen.Right - 100.0, Screen.Top - 100.0);
90    }
91
92    IntMeter LuoPisteLaskuri(double x, double y)
93    {
94        IntMeter laskuri = new IntMeter(10);
95        laskuri.MaxValue = 998;
96        Label naytto = new Label();
97        naytto.BindTo(laskuri);
98        naytto.Y = y;
99        naytto.X = x;
100        naytto.TextColor = Color.White;
101        naytto.BorderColor = Level.BackgroundColor;
102        naytto.Color = Level.BackgroundColor;
103        Add (naytto);
104        return laskuri;
105    }
106
107    PhysicsObject LuoPallo()
108    {
109        pallo = new PhysicsObject(50.0, 60.0);
110        pallo.Shape = Shape.Circle;
111        pallo.Color = Color.Gray;
112        pallo.X = 0;
113        pallo.Y = 0;
114        pallo.Restitution = 1.0;
115        Add(pallo);
116        return pallo;
117    }
118
119    void LuaPallo()
120    {
121        LuoPallo();
122    }
123
124    void LuoKentta()
125    {
126        pallo = LuoPallo();
127
128        maila1 = LuoMaila(Level.Left + 20.0, 0.0);
129        maila2 = LuoMaila(Level.Right - 20.0, 0.0);
130
131        vasenReuna = Level.CreateLeftBorder();
132        vasenReuna.Restitution = 1.0;
133        vasenReuna.IsVisible = false;
134        oikeaReuna = Level.CreateRightBorder();
135        oikeaReuna.Restitution = 1.0;
136        oikeaReuna.IsVisible = false;
137        PhysicsObject ylaReuna = Level.CreateTopBorder();
138        ylaReuna.Restitution = 1.0;
139        ylaReuna.IsVisible = false;
140        PhysicsObject alaReuna = Level.CreateBottomBorder();
141        alaReuna.Restitution = 1.0;
142        alaReuna.IsVisible = false;
143
144        AddCollisionHandler(pallo, KasittelePallonTormays);
145
146        Camera.ZoomToLevel();
147    }
148
149    void KasittelePallonTormays(PhysicsObject pallo, PhysicsObject kohde)
150    {
151        if (kohde == vasenReuna)
152        {
153            pelaaja1pisteet.Value -= 1;
154        }
155        else if (kohde == oikeaReuna)
156        {
157            pelaaja2pisteet.Value -= 1;
158        }
159    }
160
161    void AloitaPeli()
162    {
163        Vector impulssi = new Vector(-200.0, -200.0);
164        pallo.Hit(impulssi);
165    }
166
167    PhysicsObject LuoMaila(double x, double y)
168    {
169        PhysicsObject maila = PhysicsObject.CreateStaticObject(25.0, 150.0);
170        maila.Shape = Shape.Rectangle;
171        maila.Color = Color.Black;
172        maila.X = x;
173        maila.Y = y;
174        maila.Restitution = 1.0;
175        Add(maila);
176        return maila;
177    }
178
179    void AsetaOhjaimet()
180    {
181        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Valikko, "Valikkoon");
182        Keyboard.Listen(Key.C, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
183        Keyboard.Listen(Key.Space, ButtonState.Pressed, Release, "Liikuta palloa");
184
185        Keyboard.Listen(Key.P, ButtonState.Down, Huijaus1, "");
186        Keyboard.Listen(Key.Q, ButtonState.Down, Huijaus2, "");
187        Keyboard.Listen(Key.B, ButtonState.Released, LuaPallo, "Uusi pallo");
188
189        Keyboard.Listen(Key.W, ButtonState.Down, AsetaNopeus, "1 ylös", maila1, nopeusYlos);
190        Keyboard.Listen(Key.W, ButtonState.Released, AsetaNopeus, null, maila1, Vector.Zero);
191        Keyboard.Listen(Key.S, ButtonState.Down, AsetaNopeus, "1 alas", maila1, nopeusAlas);
192        Keyboard.Listen(Key.S, ButtonState.Released, AsetaNopeus, null, maila1, Vector.Zero);
193
194        Keyboard.Listen(Key.Up, ButtonState.Down, AsetaNopeus, "2 ylös", maila2, nopeusYlos);
195        Keyboard.Listen(Key.Up, ButtonState.Released, AsetaNopeus, null, maila2, Vector.Zero);
196        Keyboard.Listen(Key.Down, ButtonState.Down, AsetaNopeus, "2 alas", maila2, nopeusAlas);
197        Keyboard.Listen(Key.Down, ButtonState.Released, AsetaNopeus, null, maila2, Vector.Zero);
198    }
199
200    void Huijaus1()
201    {
202        pelaaja2pisteet.Value += 1;
203    }
204
205    void Huijaus2()
206    {
207        pelaaja1pisteet.Value += 2;
208    }
209
210    void Release()
211    {
212        pallo.Velocity = new Vector(-400, 200);
213    }
214
215    void AsetaNopeus(PhysicsObject maila, Vector nopeus)
216    {
217        if( (nopeus.Y > 0) && (maila.Top > Level.Top))
218        {
219            maila.Velocity = Vector.Zero;
220            return;
221        }
222
223        if( (nopeus.Y < 0) && (maila.Bottom < Level.Bottom))
224        {
225            maila.Velocity = Vector.Zero;
226            return;
227        }
228        maila.Velocity = nopeus;
229    }
230}
Note: See TracBrowser for help on using the repository browser.