source: 2010/31/vinekova/Battle Of Tanks/Tankkipeli1/Battle Of Tanks/Peli.cs @ 1674

Revision 1674, 13.2 KB checked in by vinekova, 10 years ago (diff)
Line 
1using System;
2using Jypeli;
3using Jypeli.Widgets;
4using Jypeli.Assets;
5using Jypeli.Effects;
6using System.Collections.Generic;
7
8
9public class Tankkipeli : PhysicsGame
10{
11    PhysicsObject vasenReuna;
12    PhysicsObject alaReuna;
13    IntMeter kenttaLaskuri;
14    Tank tankki1;
15    Tank tankki2;
16    List<Label> valikonKohdat;
17    const int ruudunLeveys = 50;
18    const int ruudunKorkeus = 50;
19    DoubleMeter voimaMittari1;
20    DoubleMeter voimaMittari2;
21    //DoubleMeter voimamittari3;
22    //DoubleMeter voimaMittari4;
23    IntMeter pisteLaskuri1;
24    IntMeter pisteLaskuri2;
25    Double PutkenKaantonopeus = 2.7;
26    Double TankinAjovoima = 9000000000.0;
27
28
29    protected override void Begin()
30    {
31        Camera.ZoomToLevel();
32        IsFullScreen = false;
33        Valikko();
34        LuoVoimamittarit();
35        LuoVoimamittarit2();
36        //LuoVoimamittarit3();
37        //LuoVoimamittarit4();
38    }
39
40    void Valikko()
41    {
42        ClearAll();
43        valikonKohdat = new List<Label>();
44
45        MediaPlayer.Play("taustamusiikki");
46
47        /*Label kohta1 = new Label("Aloita yksinpeli");
48        kohta1.Position = new Vector(0, 40);
49        valikonKohdat.Add(kohta1);
50        */
51        Label kohta2 = new Label("Aloita kaksinpeli");
52        kohta2.Position = new Vector(0, -40);
53        valikonKohdat.Add(kohta2);
54
55        Label kohta3 = new Label("Lopeta peli");
56        kohta3.Position = new Vector(0, -120);
57        valikonKohdat.Add(kohta3);
58
59        foreach (Label valikonKohta in valikonKohdat)
60        {
61            Add(valikonKohta);
62        }
63
64        //Mouse.ListenOn(kohta2, MouseButton.Left, ButtonState.Pressed, AloitaYksinPeli, null);
65        Mouse.ListenOn(kohta2, MouseButton.Left, ButtonState.Pressed, AloitaKaksinPeli, null);
66        Mouse.ListenOn(kohta3, MouseButton.Left, ButtonState.Pressed, Lopeta, null);
67
68
69        Mouse.IsCursorVisible = true;
70        Mouse.ListenMovement(1.0, ValikossaLiikkuminen, null);
71        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Lopeta, "");
72    }
73
74    void ValikossaLiikkuminen(AnalogState hiirenTila)
75    {
76        foreach (Label kohta in valikonKohdat)
77        {
78            if (Mouse.IsCursorOn(kohta))
79            {
80                kohta.TextColor = Color.Red;
81            }
82            else
83            {
84                kohta.TextColor = Color.White;
85            }
86
87        }
88    }
89
90    void AloitaKaksinPeli()
91    {
92        ClearAll();
93        LuoVoimamittarit();
94        LuoVoimamittarit2();
95        //LuoVoimamittarit3();
96        //LuoVoimamittarit4();
97        SeuraavaKentta(1);
98        AsetaOhjaimet();
99    }
100
101    void LuoVoimamittarit()
102    {
103        voimaMittari1 = new DoubleMeter(0);
104        voimaMittari1.MaxValue = 150;
105        BarGauge voimaPalkki1 = new BarGauge(20, 150);
106        voimaPalkki1.BindTo(voimaMittari1);
107        Add(voimaPalkki1);
108
109        voimaPalkki1.X = (0.8 * Screen.LeftSafe);
110        voimaPalkki1.Y = (0.9 * Screen.TopSafe);
111        voimaPalkki1.BarColor = Color.Green;
112        voimaPalkki1.BorderColor = Color.White;
113        voimaPalkki1.Angle = Angle.Degrees(90);
114
115        Label tekstikentta = new Label("Voima");
116        Add(tekstikentta);
117        tekstikentta.X = Screen.Right - 85;
118        tekstikentta.Y = Screen.Top - 80;
119        tekstikentta.Color = Color.Green;
120        tekstikentta.TextColor = Color.Red;
121        tekstikentta.BorderColor = Color.Black;
122    }
123
124    void LuoVoimamittarit2()
125    {
126
127        voimaMittari2 = new DoubleMeter(0);
128        voimaMittari2.MaxValue = 150;
129        BarGauge voimaPalkki2 = new BarGauge(20, 150);
130        voimaPalkki2.BindTo(voimaMittari2);
131        Add(voimaPalkki2);
132
133        voimaPalkki2.X = (0.8 * Screen.RightSafe);
134        voimaPalkki2.Y = (0.9 * Screen.TopSafe);
135        voimaPalkki2.BarColor = Color.Green;
136        voimaPalkki2.BorderColor = Color.White;
137        voimaPalkki2.Angle = Angle.Degrees(90);
138
139        Label tekstikentta = new Label("Voima");
140        Add(tekstikentta);
141        tekstikentta.X = Screen.Right + 85;
142        tekstikentta.Y = Screen.Top - 80;
143        tekstikentta.Color = Color.Green;
144        tekstikentta.TextColor = Color.Red;
145        tekstikentta.BorderColor = Color.Black;
146    }
147
148    /*void LuoVoimamittarit3()
149    {
150        voimamittari3 = new DoubleMeter(0);
151        voimamittari3.MaxValue = 100;
152        BarGauge voimaPalkki3 = new BarGauge(20, 150);
153        voimaPalkki3.BindTo(voimaMittari1);
154        Add(voimaPalkki3);
155
156        voimaPalkki3.X = (0.7 * Screen.LeftSafe);
157        voimaPalkki3.Y = (0.7 * Screen.TopSafe);
158        voimaPalkki3.BarColor = Color.Green;
159        voimaPalkki3.BorderColor = Color.White;
160        voimaPalkki3.Angle = Angle.Degrees(90);
161
162        Label tekstikentta2 = new Label("ElämäPisteet");
163        Add(tekstikentta2);
164        tekstikentta2.X = Screen.Right - 70;
165        tekstikentta2.Y = Screen.Top - 70;
166        tekstikentta2.Color = Color.Green;
167        tekstikentta2.TextColor = Color.Red;
168        tekstikentta2.BorderColor = Color.Black;
169     }
170
171     void LuoVoimamittarit4()
172     {
173         voimaMittari4 = new DoubleMeter(0);
174         voimaMittari4.MaxValue = 100;
175         BarGauge voimaPalkki4 = new BarGauge(20, 150);
176         voimaPalkki4.BindTo(voimaMittari4);
177         Add(voimaPalkki4);
178
179         voimaPalkki4.X = (0.7 * Screen.RightSafe);
180         voimaPalkki4.Y = (0.7 * Screen.TopSafe);
181         voimaPalkki4.BarColor = Color.Green;
182         voimaPalkki4.BorderColor = Color.White;
183         voimaPalkki4.Angle = Angle.Degrees(90);
184
185         Label tekstikentta3 = new Label("ElämäPisteet");
186         Add(tekstikentta3);
187         tekstikentta3.X = Screen.Right - 70;
188         tekstikentta3.Y = Screen.Top - 70;
189         tekstikentta3.Color = Color.Green;
190         tekstikentta3.TextColor = Color.Red;
191         tekstikentta3.BorderColor = Color.Black;
192     }*/
193
194    void SeuraavaKentta(int kentanNro)
195    {
196        ClearAll();
197
198        kenttaLaskuri = new IntMeter(kentanNro);
199
200        vasenReuna = Level.CreateLeftBorder();
201        Level.CreateRightBorder();
202        alaReuna = Level.CreateBottomBorder();
203        Level.CreateTopBorder();
204
205        if (kenttaLaskuri.Value == 1) LuoKentta1();
206        else if (kenttaLaskuri.Value == 2) LuoKentta2();
207        else if (kenttaLaskuri.Value == 3) LuoKentta3();
208        else if (kenttaLaskuri.Value > 3) Exit();
209
210        Gravity = new Vector(1.0, -750);
211        LuoTankit();
212        Camera.ZoomToLevel();
213    }
214
215    void LuoKentta1()
216    {
217        Gravity = new Vector(50.0, 100.0);
218        LuoLaskurit();
219        Level.CreateGround(5, 150, 5);
220    }
221
222    void LuoKentta2()
223    {
224
225        Gravity = new Vector(0.0, 10.0);
226        LuoLaskurit();
227        Level.CreateGround(5, 150, 5);
228
229    }
230
231    void LuoKentta3()
232    {
233
234        Gravity = new Vector(10.0, 0.0);
235        LuoLaskurit();
236        Level.CreateGround(5, 150, 5);
237
238    }
239
240    void Lopeta()
241    {
242        Exit();
243    }
244
245    void LuoTankit()
246    {
247        tankki1 = new Tank(50, 25);
248        tankki1.Y = Level.Bottom + 160;
249        tankki1.X -= 200;
250        tankki1.AngularDamping = 1.0;
251        Add(tankki1);
252
253        tankki1.Cannon.Power.Value = 5000;
254        tankki1.Cannon.CannonBallCollision = KuulaOsuu;
255        tankki1.Cannon.Ammo.Value = 9999;
256
257        tankki2 = new Tank(50, 25);
258        tankki2.Y = Level.Bottom + 160;
259        tankki2.X += 200;
260        tankki2.AngularDamping = 1.0;
261       
262        Add(tankki2);
263
264        tankki2.Cannon.Angle += Angle.Degrees(180);
265        tankki2.Cannon.Power.Value = 5000;
266        tankki2.Cannon.CannonBallCollision = KuulaOsuu;
267        tankki2.Cannon.Ammo.Value = 9999;
268    }
269
270    void AsetaOhjaimet()
271    {
272        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Valikko, "Palaa valikkoon");
273        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
274        Keyboard.Listen(Key.A, ButtonState.Down, Aja, "Liiku vasemmalle", tankki1, TankinAjovoima);
275        Keyboard.Listen(Key.D, ButtonState.Down, Aja, "Liiku oikealle", tankki1, -TankinAjovoima);
276        Keyboard.Listen(Key.W, ButtonState.Down, KaannaPutkea, "Käännä putkea vastapäivään", tankki1, Angle.Degrees(PutkenKaantonopeus));
277        Keyboard.Listen(Key.S, ButtonState.Down, KaannaPutkea, "Käännä putkea myötäpäivään", tankki1, Angle.Degrees(-PutkenKaantonopeus));
278        Keyboard.Listen(Key.LeftControl, ButtonState.Down, Lataus, null, tankki1, voimaMittari1);
279        Keyboard.Listen(Key.LeftControl, ButtonState.Released, Laukaus, "Ammu", tankki1, voimaMittari1);
280
281        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Aja, "Liiku vasemmalle", tankki1, TankinAjovoima);
282        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Aja, "Liiku oikealle", tankki1, -TankinAjovoima);
283        ControllerOne.Listen(Button.DPadUp, ButtonState.Down, KaannaPutkea, "Käännä putkea vastapäivään", tankki1, Angle.Degrees(PutkenKaantonopeus));
284        ControllerOne.Listen(Button.DPadDown, ButtonState.Down, KaannaPutkea, "Käännä putkea myötäpäivään", tankki1, Angle.Degrees(-PutkenKaantonopeus));
285        ControllerOne.Listen(Button.A, ButtonState.Released, Laukaus, "Ammu", tankki1, voimaMittari1);
286
287        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Valikko, "Palaa valikkoon");
288        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
289        Keyboard.Listen(Key.Left, ButtonState.Down, Aja, "Liiku vasemmalle", tankki2, TankinAjovoima);
290        Keyboard.Listen(Key.Right, ButtonState.Down, Aja, "Liiku oikealle", tankki2, -TankinAjovoima);
291        Keyboard.Listen(Key.Up, ButtonState.Down, KaannaPutkea, "Käännä putkea vastapäivään", tankki2, Angle.Degrees(PutkenKaantonopeus));
292        Keyboard.Listen(Key.Down, ButtonState.Down, KaannaPutkea, "Käännä putkea myötäpäivään", tankki2, Angle.Degrees(-PutkenKaantonopeus));
293        Keyboard.Listen(Key.RightControl, ButtonState.Down, Lataus, null, tankki2, voimaMittari2);
294        Keyboard.Listen(Key.RightControl, ButtonState.Released, Laukaus, "Ammu", tankki2, voimaMittari2);
295
296        ControllerTwo.Listen(Button.DPadLeft, ButtonState.Down, Aja, "Liiku vasemmalle", tankki2, TankinAjovoima);
297        ControllerTwo.Listen(Button.DPadRight, ButtonState.Down, Aja, "Liiku oikealle", tankki2, -TankinAjovoima);
298        ControllerTwo.Listen(Button.DPadUp, ButtonState.Down, KaannaPutkea, "Käännä putkea vastapäivään", tankki2, Angle.Degrees(PutkenKaantonopeus));
299        ControllerTwo.Listen(Button.DPadDown, ButtonState.Down, KaannaPutkea, "Käännä putkea myötäpäivään", tankki2, Angle.Degrees(-PutkenKaantonopeus));
300        ControllerTwo.Listen(Button.A, ButtonState.Released, Laukaus, "Ammu", tankki2, voimaMittari2);   
301    }
302
303    void LiikutaPelaajaa(Vector vektori, PhysicsObject pelaaja)
304    {
305        pelaaja.Push(vektori);
306    }
307   
308    void Lataus(Tank t, DoubleMeter mittari)
309    {
310        mittari.Value++;
311    }
312
313    void Aja(Tank t, double vaanto)
314    {
315        t.Accelerate(vaanto);
316    }
317    void KaannaPutkea(Tank t, Angle kaanto)
318    {
319        t.Cannon.Angle += kaanto;
320    }
321
322    void KuulaOsuu(PhysicsObject kuula, PhysicsObject toinen)
323    {
324        if (toinen == tankki1)
325        {
326            pisteLaskuri1.Value++;
327        }
328        else
329            if (toinen == tankki2)
330            {
331                pisteLaskuri2.Value++;
332            }
333
334        kuula.Destroy();
335        Explosion rajahdys = new Explosion(70 - 0);
336        rajahdys.Position = kuula.Position;
337        rajahdys.Speed = 800.0;
338        rajahdys.Force = 200;
339        Add(rajahdys);
340    }
341
342
343    void LuoLaskurit()
344    {
345        pisteLaskuri1 = new IntMeter(0);
346        pisteLaskuri1.MaxValue = 10;
347        pisteLaskuri1.UpperLimit += laskuriYlarajassa;
348
349        Label pisteNaytto = new Label();
350        pisteNaytto.X = Screen.Right - 200;
351        pisteNaytto.Y = Screen.Top - 100;
352        pisteNaytto.TextColor = Color.Red;
353
354        pisteNaytto.BindTo(pisteLaskuri1);
355        Add(pisteNaytto);
356
357        Label tekstikentta2 = new Label("Voima");
358        Add(tekstikentta2);
359        tekstikentta2.X = Screen.Left + 85;
360        tekstikentta2.Y = Screen.Top - 80;
361        tekstikentta2.Color = Color.Green;
362        tekstikentta2.TextColor = Color.Red;
363        tekstikentta2.BorderColor = Color.Black;
364
365        pisteLaskuri2 = new IntMeter(0);
366        pisteLaskuri2 = new IntMeter(0);
367        pisteLaskuri2.MaxValue = 10;
368        pisteLaskuri2.UpperLimit += laskuriYlarajassa2;
369
370        Label pisteNaytto2 = new Label();
371        pisteNaytto2.X = Screen.Left + 200;
372        pisteNaytto2.Y = Screen.Top - 100;
373        pisteNaytto2.TextColor = Color.Red;
374
375        pisteNaytto2.BindTo(pisteLaskuri2);
376        Add(pisteNaytto2);
377    }
378
379    void laskuriYlarajassa(int arvo)
380    {
381        Valikko();
382        MessageDisplay.TextColor = Color.Black;
383        MessageDisplay.Add("Pelaaja2 voitti pelin.");
384    }
385
386    void laskuriYlarajassa2(int arvo)
387    {
388        Valikko();
389        MessageDisplay.TextColor = Color.Black;
390        MessageDisplay.Add("Pelaaja1 voitti pelin.");
391    }
392
393    void Laukaus(Tank tankki, DoubleMeter mittari)
394    {
395        tankki.Cannon.Power.Value = mittari.Value*1000;
396        tankki.Cannon.Use();
397        mittari.Value = +0;
398    }
399}
Note: See TracBrowser for help on using the repository browser.