source: 2010/27/akrauhan/Wooden Warfare/FysiikkaPeli1/FysiikkaPeli1/FysiikkaPeli1/Peli.cs @ 2546

Revision 2546, 17.1 KB checked in by akrauhan, 9 years ago (diff)

kaikkee kivaa

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    ScoreList topLista = new ScoreList(10, false, 30);
12    DoubleMeter kestomittari;
13    DoubleMeter kestomittari2;
14    PhysicsObject kestopaketti;
15    PhysicsObject ukko1;
16    PhysicsObject ukko2;
17    PhysicsObject molli;
18    PhysicsObject molli2;
19    Explosion rajahdys;
20    bool PeliLoppunut = false;
21    //PhysicsObject ammus;
22    Timer pomminPudotusAjastin;
23    Timer panosAjastin;
24    Timer molliAjastin;
25    Timer pakettiAjastin;
26    Timer alustaAjastin;
27    PhysicsObject alusta;
28    AssaultRifle pyssy;
29    AssaultRifle pyssy2;
30    Image paukkulaatikko = LoadImage("paukkulaatikko");
31    Image paukkulaatikko2 = LoadImage("paukkulaatikko2");
32    Image paukkulaatikko3 = LoadImage("paukkulaatikko3");
33    Image paukkulaatikko4 = LoadImage("paukkulaatikko4");
34    Image ukonkuva = LoadImage("ukko1");
35    Image ukon2kuva = LoadImage("ukko2");
36    Image pommi1 = LoadImage("pommi");
37    Image pommi2 = LoadImage("pommi2");
38    Image pommi3 = LoadImage("pommi3");
39    Image mollikuva = LoadImage("molli");
40    Image panoslaatikkokuva = LoadImage("panoksia");
41    Image kestopaketinkuva = LoadImage("apupaketti");
42    Image taustakuva = LoadImage("taustakuva");
43    Timer aikaLaskuri;
44    public override void Begin()
45    {
46        LuoKenttä();
47        KaynnistaPomminpudotusAjastin();
48    }
49
50    void AloitaPeli()
51    {
52    ;
53        KaynnistaPomminpudotusAjastin();
54        ClearAll();
55        LuoKenttä();
56    }
57    void LuoKestolaskuri()
58    {
59        kestomittari = new DoubleMeter(100);
60        BarGauge naytto1 = new BarGauge(30, 150);
61        kestomittari.MaxValue = 100;
62        naytto1.X = 400;
63        naytto1.Y = 400;
64        naytto1.BarColor = Color.Blue;
65        naytto1.BorderColor = Color.Black;
66        naytto1.Angle = Angle.FromDegrees(90);
67        naytto1.BindTo(kestomittari);
68        Add(naytto1);
69    }
70    void LuoKestolaskuri2()
71    {
72        kestomittari2 = new DoubleMeter(100);
73        BarGauge naytto2 = new BarGauge(30, 150);
74        kestomittari2.MaxValue = 100;
75        naytto2.X = -400;
76        naytto2.Y = 400;
77        naytto2.Angle = Angle.FromDegrees(90);
78        naytto2.BindTo(kestomittari2);
79        naytto2.BorderColor = Color.Black;
80        Add(naytto2);
81    }
82    void LuoKenttä()
83    {
84        Level.CreateGround(100, 120, 20);
85        PhysicsObject maankamara = Level.CreateGround(100, 150, 20);
86        maankamara.Color = Color.Lime;
87        PhysicsObject vasenLaita = Level.CreateLeftBorder();
88        vasenLaita.CollisionIgnoreGroup = 2;
89        PhysicsObject oikeaLaita = Level.CreateRightBorder();
90        oikeaLaita.CollisionIgnoreGroup = 2;
91        Level.Background.Image = taustakuva;
92        Level.Background.FitToLevel();     
93        Camera.ZoomToLevel();
94        //Camera.ZoomFactor = 0.5;
95        MessageDisplay.Add("Panosten määrä:");
96        MessageDisplay.X = 550;
97        MessageDisplay.Y = 200;
98        Gravity = new Vector(0.0, -800);
99        LuoUkko1(200, -100, 100, 0.3);
100        LuoUkko2(-200, -100, 100, 0.3);
101        LuoKestolaskuri();
102        LuoKestolaskuri2();
103        PanosLaskuri();
104        PanosLaskuri2();
105        LuoAikaLaskuri();
106
107        if (DataStorage.Exists("pisteet.xml"))
108        topLista = DataStorage.Load<ScoreList>(topLista, "pisteet.txt");
109    }
110    void TopLista()
111    {
112        HighScoreWindow topIkkuna = new HighScoreWindow(
113                             "Parhaat pisteet",
114                             "Onneksi olkoon, pääsit listalle pisteillä %p! Syötä nimesi:",
115                             topLista, aikaLaskuri.CurrentTime);
116        topIkkuna.Closed += TallennaPisteet;
117        Add(topIkkuna);
118
119    }
120    void TallennaPisteet(Window sender)
121    {
122        DataStorage.Save<ScoreList>(topLista, "pisteet.txt");
123    }
124    void KaynnistaPomminpudotusAjastin()
125    {
126        pomminPudotusAjastin = new Timer();
127        pomminPudotusAjastin.Interval = 1;
128        pomminPudotusAjastin.Timeout += Pommeja;
129        pomminPudotusAjastin.Start();
130        panosAjastin = new Timer();
131        panosAjastin.Interval = 10;
132        panosAjastin.Timeout += Panoksia;
133        panosAjastin.Start();
134        molliAjastin = new Timer();
135        molliAjastin.Interval = 3;
136        molliAjastin.Timeout += LuoMolli;
137        molliAjastin.Timeout += LuoMolli2;
138        molliAjastin.Start();
139        pakettiAjastin = new Timer();
140        pakettiAjastin.Interval = 30;
141        pakettiAjastin.Timeout += Poweruppeja;
142        pakettiAjastin.Start();
143        alustaAjastin = new Timer();
144        alustaAjastin.Interval = 5;
145        alustaAjastin.Timeout += Alusta;
146        alustaAjastin.Start();
147    }
148    void LuoAikaLaskuri()
149    {
150        aikaLaskuri = new Timer();
151        aikaLaskuri.Start();
152
153        Label aikaNaytto = new Label();
154        aikaNaytto.TextColor = Color.White;
155        aikaNaytto.DecimalPlaces = 2;
156        aikaNaytto.BindTo(aikaLaskuri.SecondCounter);
157        aikaNaytto.Y = 400;
158        aikaNaytto.Font = Font.DefaultLargeBold;
159        aikaNaytto.Color = Color.Green;
160        aikaNaytto.BorderColor = Color.Black;
161        Add(aikaNaytto);
162    }
163    void Alusta()
164    {
165       
166        alusta = new PhysicsObject(100, 20);
167        alusta.Push (new Vector(8000000000, 0));
168        alusta.X = -700;
169        alusta.Y = RandomGen.NextDouble(-170, 0);
170        alusta.IgnoresGravity = true;
171        alusta.Mass = 1000000;
172        alusta.IgnoresExplosions = true;
173        alusta.CollisionIgnoreGroup = 2;
174        alusta.IgnoresPhysicsLogics = true; 
175        //alusta.IgnoresCollisionResponse = true;
176        alusta.IgnoresExplosions = true;
177        alusta.Color = Color.Brown;
178        Add(alusta);
179    }
180    void Poweruppeja()
181    {
182        kestopaketti = new PhysicsObject(40, 15);
183        kestopaketti.X = RandomGen.NextDouble(-400, 400);
184        kestopaketti.Y = 500;
185        kestopaketti.Color = Color.Red;
186        kestopaketti.Velocity = new Vector(0, -100);
187        kestopaketti.CollisionIgnoreGroup = 1;
188        AddCollisionHandler(kestopaketti, LisaaKestoa);
189        kestopaketti.Image = kestopaketinkuva;
190        Add(kestopaketti, 1);
191    }
192    void Panoksia()
193    {
194        PhysicsObject laatikko = new PhysicsObject(50, 20);
195        laatikko.X = RandomGen.NextDouble(-300, 300);
196        laatikko.Y = 500;
197        laatikko.Color = Color.Brown;
198        laatikko.Velocity = new Vector(0, -100);
199        laatikko.CollisionIgnoreGroup = 1;
200        laatikko.Image = panoslaatikkokuva;
201        AddCollisionHandler(laatikko, PanostenSaanti);
202        Add(laatikko, 1);
203    }
204    void Pommeja()
205    {
206        Add(LuoPommi(20, 40, new Vector(0, -200), "heikko", pommi1));
207        Add(LuoPommi(30, 50, new Vector(0, -50), "normaali", pommi2));
208        Add(LuoPommi(50, 70, new Vector(0, -30), "vahva", pommi3));
209        if (aikaLaskuri.CurrentTime >= 30)
210        {
211            pomminPudotusAjastin.Interval = 0.5;
212        }
213        if (aikaLaskuri.CurrentTime >= 60)
214        {
215            pomminPudotusAjastin.Interval = 0.2;
216        }
217    }
218    void LuoUkko1(double x, double y, double z, double v)
219    {
220        ukko1 = new PhysicsObject(50, 50);
221        ukko1.Shape = Shape.Rectangle;
222        Add(ukko1);
223        ukko1.X = x;
224        ukko1.Y = y;
225        ukko1.Mass = z;
226        ukko1.Restitution = v;
227        ukko1.CanRotate = false;
228        ukko1.Shape = Shape.Circle;
229        ukko1.Image = ukonkuva;
230       
231        pyssy = new AssaultRifle(60, 10);
232        ukko1.Add(pyssy);
233        pyssy.Ammo.Value = 20;
234        pyssy.Angle = Angle.FromDegrees(180);
235        PhysicsObject ammus = pyssy.Shoot();
236        //AddCollisionHandler( ammus, AmmusOsui );
237        pyssy.ProjectileCollision += AmmusOsui;
238        pyssy.Image = paukkulaatikko;
239
240        Image[] ampujanKuvat = LoadImages("paukkulaatikko", "paukkulaatikko2");
241        ampujanKuvat = Image.Mirror(ampujanKuvat);
242        pyssy.Animation = new Animation(ampujanKuvat);
243
244        Keyboard.Listen(Key.Left, ButtonState.Down, LiikuVasemmalle, "Vasemmalle");
245        Keyboard.Listen(Key.Right, ButtonState.Down, LiikuOikealle, "Oikealle");
246        Keyboard.Listen(Key.Up, ButtonState.Down, Kulma, "Tähtää ylös");
247        Keyboard.Listen(Key.Down, ButtonState.Down, Kulma2, "Tähtää alas");
248        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, "Poistu");
249        Keyboard.Listen(Key.RightControl, ButtonState.Down, Ammu, "Ammu");
250        Keyboard.Listen(Key.F2, ButtonState.Pressed, AloitaPeli, "Aloita alusta");
251        Keyboard.Listen(Key.NumPad0, ButtonState.Pressed, Hyppaa, "Hyppää");
252    }
253    void LuoUkko2(double x, double y, double z, double v)
254    {
255        ukko2 = new PhysicsObject(50, 50);
256        ukko2.Shape = Shape.Rectangle;
257        Add(ukko2);
258        ukko2.X = x;
259        ukko2.Y = y;
260        ukko2.Mass = z;
261        ukko2.Restitution = v;
262        ukko2.CanRotate = false;
263        ukko2.Shape = Shape.Circle;
264        pyssy2 = new AssaultRifle(60, 10);
265        ukko2.Add(pyssy2);
266        pyssy2.Ammo.Value = 20;
267
268        pyssy2.Image = paukkulaatikko;
269        ukko2.Image = ukon2kuva;
270
271        pyssy2.ProjectileCollision += AmmusOsui2;
272        PhysicsObject ammus = pyssy2.Shoot();
273
274        Image[] ampujanKuvat2 = LoadImages("paukkulaatikko3", "paukkulaatikko4");
275        ampujanKuvat2 = Image.Mirror(ampujanKuvat2);
276        pyssy2.Animation = new Animation(ampujanKuvat2);
277
278        Keyboard.Listen(Key.A, ButtonState.Down, LiikuVasemmalle2, "Vasemmalle");
279        Keyboard.Listen(Key.D, ButtonState.Down, LiikuOikealle2, "Oikealle");
280        Keyboard.Listen(Key.W, ButtonState.Down, Kulma3, "Tähtää ylös");
281        Keyboard.Listen(Key.S, ButtonState.Down, Kulma4, "Tähtää alas");
282        Keyboard.Listen(Key.LeftAlt, ButtonState.Down, Ammu2, "Ammu");
283        Keyboard.Listen(Key.LeftControl, ButtonState.Pressed, Hyppaa2, "Hyppää");
284    }
285    void PanosLaskuri()
286    {
287        Label ammusnaytto = new Label();
288        ammusnaytto.X = 350;
289        ammusnaytto.Y = 300;
290        ammusnaytto.TextColor = Color.Blue;
291        ammusnaytto.BindTo(pyssy.Ammo);
292        Add(ammusnaytto);
293    }
294    void PanosLaskuri2()
295    {
296        Label ammusnaytto2 = new Label();
297        ammusnaytto2.X = -350;
298        ammusnaytto2.Y = 300;
299        ammusnaytto2.TextColor = Color.Red;
300        ammusnaytto2.BindTo(pyssy2.Ammo);
301        Add(ammusnaytto2);
302    }
303    void Hyppaa()
304    {
305        if (ukko1.Y <= -200)
306        {
307            ukko1.Hit(new Vector(0, 40000));
308        }
309    }
310    void Hyppaa2()
311    {
312        if (ukko2.Y <= -200)
313        {
314            ukko2.Hit(new Vector(0, 40000));
315        }
316    }
317    void Ammu()
318    {
319        pyssy.Shoot();
320        if (pyssy.Ammo.Value >= 1)
321        {
322        pyssy.Animation.Start(1);
323        }
324    }
325    void Ammu2()
326    {
327        pyssy2.Shoot();
328        if (pyssy2.Ammo.Value >= 1)
329        {
330            pyssy2.Animation.Start(1);
331        }
332    }
333    void Kulma()
334    {
335        pyssy.Angle += Angle.FromDegrees(-5);
336    }
337    void Kulma2()
338    {
339        pyssy.Angle += Angle.FromDegrees(5);
340    }
341    void Kulma3()
342    {
343        pyssy2.Angle += Angle.FromDegrees(5);
344    }
345    void Kulma4()
346    {
347        pyssy2.Angle += Angle.FromDegrees(-5);
348    }
349    void LuoMolli()
350    {
351        molli = new PhysicsObject(50, 10);
352        molli.X = RandomGen.NextDouble(-400, 400);
353        molli.Y = 500;
354        FollowerBrain seuraajanaivot = new FollowerBrain();
355        molli.Image = mollikuva;
356        seuraajanaivot.Target = ukko1;
357        molli.Brain = seuraajanaivot;
358        seuraajanaivot.Speed = 200;
359        molli.CollisionIgnoreGroup = 1;
360        AddCollisionHandler(molli, MollinTormays);
361        if (ukko1.IsDestroyed == true)
362        {
363            seuraajanaivot.Target = ukko2;
364        }
365        Add(molli);
366    }
367    void LuoMolli2()
368    {
369        molli2 = new PhysicsObject(50, 10);
370        molli2.X = RandomGen.NextDouble(-400, 400);
371        molli2.Y = 500;
372        FollowerBrain seuraajanaivot = new FollowerBrain();
373        seuraajanaivot.Target = ukko2;
374        molli2.Brain = seuraajanaivot;
375        seuraajanaivot.Speed = 200;
376        molli2.CollisionIgnoreGroup = 1;
377        AddCollisionHandler(molli2, MollinTormays);
378        molli2.Image = mollikuva;
379        if (ukko2.IsDestroyed == true)
380        {
381            seuraajanaivot.Target = ukko1;
382        }
383        Add(molli2);
384    }
385    void LiikuVasemmalle()
386    {
387        ukko1.Hit(new Vector(-1000, 0));
388        if (ukko1.X <= -450)
389        {
390            ukko1.Hit(new Vector(5000, 1000));
391        }
392
393
394    }
395    void LiikuOikealle()
396    {
397        ukko1.Hit(new Vector(1000, 0));
398        if (ukko1.X >= 450)
399        {
400            ukko1.Hit(new Vector(-5000, 1000));
401        }
402    }
403    void LiikuVasemmalle2()
404    {
405        ukko2.Hit(new Vector(-1000, 0));
406        if (ukko2.X <= -450)
407        {
408            ukko2.Hit(new Vector(5000, 1000));
409        }
410    }
411    void LiikuOikealle2()
412    {
413        ukko2.Hit(new Vector(1000, 0));
414        if (ukko2.X >= 450)
415        {
416            ukko2.Hit(new Vector(-5000, 1000));
417        }
418    }
419    void KasitteleTormays(PhysicsObject pommi, PhysicsObject kohde)
420    {
421        if (kohde == ukko1)
422        {                     
423            if (pommi.Tag == "heikko")
424            {
425                kestomittari.Value -= 10;
426            }
427            if (pommi.Tag == "normaali")
428            {
429                kestomittari.Value -= 20;
430            }
431            if (pommi.Tag == "vahva")
432            {
433                kestomittari.Value -=40;
434            }
435        }
436        if (kohde == ukko2)
437        {           
438            if (pommi.Tag == "heikko")
439            {
440                kestomittari2.Value -= 10;
441            }
442            if (pommi.Tag == "normaali")
443            {
444                kestomittari2.Value -= 20;
445            }
446            if (pommi.Tag == "vahva")
447            {
448                kestomittari2.Value -= 40;
449            }
450        }
451        if (kestomittari.Value <=1  && ukko1.IsDestroyed == false)
452        {
453            ukko1.Destroy();
454            rajahdys = new Explosion(500);
455            rajahdys.Position = ukko1.Position;
456            rajahdys.Color = Color.DarkBlue;
457            Add(rajahdys);
458
459        }
460        if (kestomittari2.Value <= 1 && ukko2.IsDestroyed == false)
461        {
462            ukko2.Destroy();
463            rajahdys = new Explosion(500);
464            rajahdys.Position = ukko2.Position;
465            rajahdys.Color = Color.DarkRed;
466            Add(rajahdys);
467           
468
469        }
470        if (ukko1.IsDestroyed && ukko2.IsDestroyed && PeliLoppunut == false)
471        {
472            pomminPudotusAjastin.Stop();
473            molliAjastin.Stop();
474            panosAjastin.Stop();
475            aikaLaskuri.Stop();
476            TopLista();
477            PeliLoppunut = true;
478        }
479        pommi.Destroy();
480        Explosion rajahdys2 = new Explosion(50);
481        rajahdys2.Position = pommi.Position;
482        rajahdys2.Speed = 100.0;
483        Add(rajahdys2);
484    }
485    void MollinTormays(PhysicsObject molli, PhysicsObject kohde)
486    {
487
488        if (kohde == ukko1)
489        {
490            kestomittari.Value -= 5;
491        }
492        if (kohde == ukko2)
493        {
494            kestomittari2.Value -= 5;
495        }
496        molli.Destroy();
497
498
499    }
500    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
501    {
502        ammus.Destroy();
503
504        if (kohde == ukko2)
505        {
506            kestomittari2.Value -= 5;
507        }
508
509    }
510    void AmmusOsui2(PhysicsObject ammus, PhysicsObject kohde)
511    {
512        ammus.Destroy();
513        if (kohde == ukko1)
514        {
515            kestomittari.Value -= 5;
516        }
517    }
518    void PanostenSaanti(PhysicsObject laatikko, PhysicsObject kohde)
519    {       
520        if (kohde == ukko1)
521        {
522            pyssy.Ammo.Value += 15;
523            laatikko.Destroy();
524        }
525        if (kohde == ukko2)
526        {
527            pyssy2.Ammo.Value += 15;
528            laatikko.Destroy();
529        }
530    }
531    void LisaaKestoa(PhysicsObject kestopaketti, PhysicsObject kohde)
532    {
533   
534       
535        if (kohde == ukko1)
536        {
537            kestomittari.Value += 40;
538            kestopaketti.Destroy();
539
540
541        }
542        if (kohde == ukko2)
543        {
544            kestomittari2.Value += 40;
545            kestopaketti.Destroy();
546        }
547    }
548    PhysicsObject LuoPommi(double leveys, double korkeus, Vector nopeus, string vahvuus, Image kuva)
549    {
550        PhysicsObject pommi = new PhysicsObject(leveys, korkeus);
551        AddCollisionHandler(pommi, KasitteleTormays);
552        double x = RandomGen.NextDouble(Level.Left, Level.Right);
553        double y = 600.0;
554        pommi.Color = Color.Black;
555        pommi.X = x;
556        pommi.Y = y;
557        pommi.Velocity = nopeus;
558        pommi.IgnoresGravity = true;
559        pommi.Tag = vahvuus;
560        pommi.IgnoresExplosions = true;
561        pommi.CollisionIgnoreGroup = 1;
562        pommi.Image = kuva;
563        return pommi;
564    }
565}
Note: See TracBrowser for help on using the repository browser.