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

Revision 1730, 6.4 KB checked in by joaamaka, 11 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.