source: 2010/24/arhetaka/FysiikkaPeli1/FysiikkaPeli1/Peli.cs @ 10335

Revision 989, 34.6 KB checked in by arhetaka, 9 years ago (diff)

peli melki valmis.

Line 
1using System;
2using Jypeli;
3using Jypeli.ScreenObjects;
4using Jypeli.Assets;
5
6public class Peli : PhysicsGame
7{     
8    PhysicsObject alus1;
9    PhysicsObject alus2;
10
11    PhysicsObject vasenReuna;
12    PhysicsObject oikeaReuna;
13    PhysicsObject alaReuna;
14    PhysicsObject ylaReuna;
15
16    ImageDisplay alus1PerusAse;
17    ImageDisplay alus2PerusAse;
18
19    ImageDisplay alus1SpecialAse;
20    ImageDisplay alus2SpecialAse;
21
22    int siirtymaLaidassa = 80;
23    int reunanetaisyysruudusta = 100;
24
25    IntMeter p1Pisteet;
26    IntMeter p2Pisteet;
27
28    BarGauge p1special;
29    BarGauge p2special;
30   
31    DoubleMeter p1specialTeho;
32    DoubleMeter p2specialTeho;
33
34    BarGauge p1health;
35    BarGauge p2health;
36
37    DoubleMeter p1healthmittari;
38    DoubleMeter p2healthmittari;
39
40    Double specialLifeTime = 1.5;
41    Boolean p1specialkentalla = false;
42    Boolean p2specialkentalla = false;
43    Timer p1specialTimer;
44    Timer p2specialTimer;
45    int specialNopeus = 500;
46    double p1special_reload_speed = 0.5;
47    double p2special_reload_speed = 0.5;
48   
49    int p1kaanto_nopeus = 2;
50    int p2kaanto_nopeus = 2;
51
52    int alus1nopeus = 2000;
53    int alus2nopeus = 2000;
54
55    Animation alus1_kaasu_tekst;
56    Animation alus2_kaasu_tekst;
57    Animation alus1_idle_tekst;
58    Animation alus2_idle_tekst;
59
60    Animation lisaase_anim;
61    Animation perusase_anim;
62
63    Animation special_animation;
64
65    double resolutionX;
66    double resolutionY;
67
68    Timer UpdateTimer;
69    double updateInterval = 0.1;
70       
71    bool alus1_kaasuttaa = false;
72    bool alus2_kaasuttaa = false;
73
74    bool lisaaseita = true;
75
76    int perusAmmusKoko = 4;
77    int AlustenHealth = 10;
78    double alustenIlmanvastus = 0.999;
79
80    int partikkelit = 50;
81
82    Timer reSpawnTimer1;
83    Timer reSpawnTimer2;
84    int respawntimer = 3;
85
86    Color p1Color = Color.Red;
87    Color p2Color = Color.Blue;
88
89    int p1perusammus_maara = 1;
90    int p2perusammus_maara = 1;
91
92    protected override void Begin()
93    {
94        AloitaPeli();       
95    }
96    void AloitaPeli()
97    {
98        ClearAll();
99        NollaaMuuttujat();
100       
101        LuoKentta();
102        AsetaOhjaimet();
103        LisaaLaskurit();
104    }
105    void NollaaMuuttujat()
106    {
107        p1special_reload_speed = 0.5;
108        p2special_reload_speed = 0.5;
109
110        p1kaanto_nopeus = 2;
111        p2kaanto_nopeus = 2;
112
113        alus1nopeus = 1000;
114        alus2nopeus = 1000;
115
116        alus1_kaasuttaa = false;
117        alus2_kaasuttaa = false;
118        p1specialkentalla = false;
119        p2specialkentalla = false;
120    }
121    void LuoKentta()
122    {
123        resolutionX = Screen.Width;
124        resolutionY = Screen.Height;
125
126        reSpawnTimer1 = new Timer();
127        reSpawnTimer1.Interval = respawntimer;
128        reSpawnTimer1.Trigger += new Timer.TriggerHandler(ReSpawnp1); 
129       
130        reSpawnTimer2 = new Timer();
131        reSpawnTimer2.Interval = respawntimer;
132        reSpawnTimer2.Trigger += new Timer.TriggerHandler(ReSpawnp2); 
133       
134        Add(reSpawnTimer1);
135        Add(reSpawnTimer2);
136
137        TeeGalaksi();
138        TeeAsteroidi(0,0,5, 200);       
139        TeeAlukset(true, true);       
140        UpDate(); //tekee ajopisteet ja tutkii ovatko alukset vielä kentällä
141        TeeSpecial(); //tekee special aseet ja lisää kuuntelijat
142        TeeHealth();       
143        TeeAseidenKuvat();
144        Level.Background.CreateStars(3000);
145       
146        TeeReunat();
147        Camera.ZoomToLevel();
148        MessageDisplay.X = 0;
149        MessageDisplay.TextColor = Color.White;
150
151    }
152    void TeeGalaksi()
153    {
154        PhysicsObject galaksi = new PhysicsObject(700, 700);
155        galaksi.Image = LoadImage("galaksi");
156        galaksi.IgnoresExplosions = true;
157        galaksi.IgnoresCollisionResponse = true;
158        galaksi.IgnoresPhysicsLogics = true;
159        galaksi.IgnoresGravity = true;
160        galaksi.Tag = "galaksi";
161        galaksi.AngularVelocity = -0.2;
162        Add(galaksi);
163    }
164    void TeeAsteroidi(double x, double y, int lukumaara, double maxkoko)
165    {
166        for (int i = 0; i < lukumaara; i++)
167        {
168           
169            double koko = RandomGen.NextDouble(maxkoko/2, maxkoko);
170            if (koko > 30)
171            {
172                PhysicsObject asteroidi = new PhysicsObject(koko, koko);
173                asteroidi.Shape = Shapes.Circle;
174                asteroidi.Image = LoadImage("asteroidi");
175                asteroidi.Mass = koko * 5;
176                asteroidi.IgnoresExplosions = false;
177                asteroidi.IgnoresCollisionResponse = false;
178                asteroidi.IgnoresPhysicsLogics = false;
179                asteroidi.IgnoresGravity = false;
180                Vector suunta = Vector.FromLengthAndAngle(RandomGen.NextDouble(0, koko * 20), RandomGen.NextAngle());
181                asteroidi.X = x;// +suunta.X / 10;
182                asteroidi.Y = y;// +suunta.Y / 10;
183                asteroidi.Hit(suunta);
184                asteroidi.Tag = "asteroidi9";
185                asteroidi.AngularVelocity = RandomGen.NextDouble(-1, 1);
186                AddCollisionHandler(asteroidi, AsteroidiOsuu);
187                Add(asteroidi);
188            }
189            else if (lisaaseita && koko > 20)
190            {
191                PhysicsObject lisaase = new PhysicsObject(koko, koko);
192                lisaase.Color = Color.White;
193                lisaase.Tag = "lisaase";
194                lisaase.Mass = koko;
195                lisaase.Image = LoadImage("lisaase1");
196                Image[] lisaaseimaget = LoadImages(
197                   "lisaase1",
198                   "lisaase2",
199                   "lisaase3",
200                   "lisaase4"
201                   );
202                lisaase_anim = new Animation(lisaaseimaget);
203                lisaase_anim.FPS = 1;
204                lisaase.Animation = lisaase_anim;
205                lisaase.Animation.Start();
206                Vector suunta = Vector.FromLengthAndAngle(RandomGen.NextDouble(0, koko * 20), RandomGen.NextAngle());
207                lisaase.Hit(suunta);
208                lisaase.X = x;
209                lisaase.Y = y;
210                lisaase.AngularVelocity = RandomGen.NextDouble(-3, 3);
211                Add(lisaase);
212            }
213        }
214    }
215    void TeeAlukset(bool p1, bool p2)
216    {
217        if (p1)
218        {
219            alus1 = LuoAlus(1, Level.Left + 20.0, 0.0);
220            alus1.Tag = "alus1";
221            alus1.Image = LoadImage("alus12");
222            alus1.Color = p1Color;
223           // AddCollisionHandler(alus1, AlusOsuu);
224
225            Image[] alus1idle = LoadImages(
226               "alus12",
227               "alus121",
228               "alus122"
229               );
230            alus1_idle_tekst = new Animation(alus1idle);
231            alus1_idle_tekst.FPS = 1.5;
232            alus1.Animation = alus1_idle_tekst;
233            alus1.Animation.Start();
234
235            Image[] alus_kaasu1 = LoadImages(
236                "alus12",
237                "alus12_kaasuttaa"
238                );
239            alus1_kaasu_tekst = new Animation(alus_kaasu1);
240            alus1_kaasu_tekst.FPS = 10;
241            alus1.LinearDamping = alustenIlmanvastus;
242
243           
244        }
245        if (p2)
246        {
247            alus2 = LuoAlus(2, Level.Right - 20.0, 0.0);
248            alus2.Tag = "alus2";
249            alus2.Image = LoadImage("alus22");
250            alus2.Color = p2Color;
251      //      AddCollisionHandler(alus2, AlusOsuu);
252
253            Image[] alus2idle = LoadImages(
254               "alus22",
255               "alus221",
256               "alus222"
257               );
258            alus2_idle_tekst = new Animation(alus2idle);
259            alus2_idle_tekst.FPS = 1.5;
260            alus2.Animation = alus2_idle_tekst;
261            alus2.Animation.Start();
262
263
264            Image[] alus_kaasu2 = LoadImages(
265                "alus22",
266                "alus22_kaasuttaa"
267                );
268            alus2_kaasu_tekst = new Animation(alus_kaasu2);
269            alus2_kaasu_tekst.FPS = 10;
270
271            alus2.Angle = Angle.StraightAngle;
272            alus2.LinearDamping = alustenIlmanvastus;
273        }
274    }
275    void TeeReunat()
276    {
277
278        vasenReuna = PhysicsObject.CreateStaticObject(5, resolutionX + 500);
279        vasenReuna.IgnoresPhysicsLogics = true;
280        vasenReuna.Color = Color.White;
281        vasenReuna.X = -(resolutionX / 2) - reunanetaisyysruudusta;
282        vasenReuna.Restitution = 1.0;
283        vasenReuna.IsVisible = true;
284        vasenReuna.Tag = "vasenreuna";
285        vasenReuna.IgnoresCollisionResponse = true;
286        AddCollisionHandler(vasenReuna, ReunaanOsuu);
287        Add(vasenReuna);
288
289        oikeaReuna = PhysicsObject.CreateStaticObject(5, resolutionX + 500);
290        oikeaReuna.IgnoresPhysicsLogics = true;
291        oikeaReuna.Color = Color.White;
292        oikeaReuna.X = (resolutionX / 2) + reunanetaisyysruudusta;
293        oikeaReuna.Restitution = 1.0;
294        oikeaReuna.IsVisible = true;
295        oikeaReuna.Tag = "oikeareuna";
296        oikeaReuna.IgnoresCollisionResponse = true;
297        AddCollisionHandler(oikeaReuna, ReunaanOsuu);
298        Add(oikeaReuna);
299
300        ylaReuna = PhysicsObject.CreateStaticObject(resolutionY + 500, 5);
301        ylaReuna.IgnoresPhysicsLogics = true;
302        ylaReuna.Color = Color.White;
303        ylaReuna.Y = (resolutionY / 2) + reunanetaisyysruudusta;
304        ylaReuna.Restitution = 0.0;
305        ylaReuna.IsVisible = true;
306        ylaReuna.Tag = "ylareuna";
307        ylaReuna.IgnoresCollisionResponse = true;
308        AddCollisionHandler(ylaReuna, ReunaanOsuu);
309        Add(ylaReuna);
310
311        alaReuna = PhysicsObject.CreateStaticObject(resolutionY + 500, 5);
312        alaReuna.IgnoresPhysicsLogics = true;
313        alaReuna.Color = Color.White;
314        alaReuna.Y = -(resolutionY / 2) - reunanetaisyysruudusta;
315        alaReuna.Restitution = 0.0;
316        alaReuna.IsVisible = true;
317        alaReuna.Tag = "alareuna";
318        alaReuna.IgnoresCollisionResponse = true;
319        AddCollisionHandler(alaReuna, ReunaanOsuu);
320        Add(alaReuna);
321    }
322    void TeeAseidenKuvat()
323    {
324        alus1PerusAse = new ImageDisplay();
325        TeeAsenaytto(alus1PerusAse, Screen.Left + 50, Screen.Top - 50);       
326        alus1PerusAse.Image = LoadImage("plasma");
327        Image[] alus_perus = LoadImages(
328              "plasma",
329              "plasma2"             
330              );
331        perusase_anim = new Animation(alus_perus);
332        alus1PerusAse.Animation = perusase_anim;
333        alus1PerusAse.Animation.FPS = 15;
334        alus1PerusAse.Animation.Start();
335
336        Add(alus1PerusAse);
337
338        alus2PerusAse = new ImageDisplay();
339        TeeAsenaytto(alus2PerusAse, Screen.Right - 50, Screen.Top - 50);
340        alus2PerusAse.Image = LoadImage("plasma");
341        alus2PerusAse.Animation = perusase_anim;
342        alus2PerusAse.Animation.FPS = 15;
343        alus2PerusAse.Animation.Start();
344        Add(alus2PerusAse);
345
346        Image[] alus_special = LoadImages(
347         "special2",
348         "special22",
349         "special23"
350         );
351        special_animation = new Animation(alus_special);
352
353        alus1SpecialAse = new ImageDisplay();
354        TeeAsenaytto(alus1SpecialAse, Screen.Left + 100, Screen.Top - 50);       
355        alus1SpecialAse.Image = LoadImage("special2");
356        alus1SpecialAse.Animation = special_animation;
357        alus1SpecialAse.Animation.FPS = 4;
358        alus1SpecialAse.Animation.Start();
359        Add(alus1SpecialAse);
360
361        alus2SpecialAse = new ImageDisplay();
362        TeeAsenaytto(alus2SpecialAse, Screen.Right - 100, Screen.Top - 50);
363        alus2SpecialAse.Image = LoadImage("special2");
364        alus2SpecialAse.Animation = special_animation;
365        alus2SpecialAse.Animation.FPS = 4;
366        alus2SpecialAse.Animation.Start();
367
368        Add(alus2SpecialAse);
369    }
370    void TeeAsenaytto(ImageDisplay naytto, double x, double y)
371    {       
372        naytto.AutoSize = false;
373        naytto.Width = 40;
374        naytto.Height = 40;
375        naytto.X = x;
376        naytto.Y = y;       
377    }
378
379
380    PhysicsObject LuoAlus(int kumpi, double x, double y)
381    {
382        PhysicsObject alus = new PhysicsObject(60.0, 45.0);
383        alus.Shape = Shapes.Rectangle;
384        alus.X = x;
385        alus.Y = y;
386        alus.Mass = 10;
387        alus.Restitution = 1.0;
388        alus.CanRotate = true;
389        alus.IgnoresCollisionResponse = false;
390        AddCollisionHandler(alus, AlusOsuu);
391        Add(alus);
392        return alus;
393    }
394    void LisaaLaskurit()
395    {
396        p1Pisteet = LuoPisteLaskuri(Screen.Left + 75.0, Screen.Top - 250.0, p1Color);
397        p2Pisteet = LuoPisteLaskuri(Screen.Right - 75.0, Screen.Top - 250.0, p2Color);
398    }
399    IntMeter LuoPisteLaskuri(double x, double y, Color vari)
400    {
401        IntMeter laskuri = new IntMeter(0);
402        laskuri.MaxValue = AlustenHealth;
403        ValueDisplay naytto = new ValueDisplay();
404        naytto.BindTo(laskuri);
405        naytto.X = x;
406        naytto.Y = y;
407        naytto.ValueColor = vari;       
408        Add(naytto);
409        return laskuri;
410    }
411    void AsetaOhjaimet()
412    {
413
414        Keyboard.Listen(Key.A, ButtonState.Down, KaannaVasen, "käännä alusta vasemmalle", alus1,  1);
415        Keyboard.Listen(Key.A, ButtonState.Released, PysaytaPyoriminen, null, alus1, 1);
416        Keyboard.Listen(Key.D, ButtonState.Down, KaannaOikea, "käännä alusta oikealle", alus1, 1);
417        Keyboard.Listen(Key.D, ButtonState.Released, PysaytaPyoriminen, null, alus1, 1);
418        Keyboard.Listen(Key.W, ButtonState.Down, Kaasua, "kaasu", alus1, 1);
419        Keyboard.Listen(Key.W, ButtonState.Released, Eikaasua, null, alus1, 1);
420        Keyboard.Listen(Key.Tab, ButtonState.Pressed, Ammu, null, alus1, 1);
421
422        Keyboard.Listen(Key.Left, ButtonState.Down, KaannaVasen, "käännä alusta vasemmalle", alus2, 1);
423        Keyboard.Listen(Key.Left, ButtonState.Released, PysaytaPyoriminen, null, alus2, 1);
424        Keyboard.Listen(Key.Right, ButtonState.Down, KaannaOikea, "käännä alusta oikealle", alus2, 1);
425        Keyboard.Listen(Key.Right, ButtonState.Released, PysaytaPyoriminen, null, alus2, 1);
426        Keyboard.Listen(Key.Up, ButtonState.Down, Kaasua, "kaasu", alus2, 1);
427        Keyboard.Listen(Key.Up, ButtonState.Released, Eikaasua, null, alus2, 1);
428        Keyboard.Listen(Key.RightShift, ButtonState.Pressed, Ammu, null, alus2, 1);
429
430        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
431        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, "Poistu");
432        Keyboard.Listen(Key.F2, ButtonState.Pressed, AloitaPeli, "uusi peli");       
433    }   
434    void KaannaVasen(PhysicsObject alus, int nopeus)
435    {
436        if (alus.Tag == "alus1")
437        {
438            alus.AngularVelocity = p1kaanto_nopeus;
439        }
440        else if (alus.Tag == "alus2")
441        {
442            alus.AngularVelocity = p2kaanto_nopeus;
443        }
444    }
445    void KaannaOikea(PhysicsObject alus, int nopeus)
446    {
447        if (alus.Tag == "alus1")
448        {
449            alus.AngularVelocity = -p1kaanto_nopeus;
450        }
451        else if (alus.Tag == "alus2")
452        {
453            alus.AngularVelocity = -p2kaanto_nopeus;
454        }
455    }   
456    void PysaytaPyoriminen(PhysicsObject alus, int nopeus)
457    {
458        alus.AngularVelocity = 0;
459    }
460    void Kaasua(PhysicsObject alus, int nopeus)
461    {
462        Angle aluksenKulma = alus.Angle;
463        Vector impulssi;
464        if (alus.Tag == "alus1")
465        {
466         impulssi = Vector.FromLengthAndAngle(alus1nopeus, aluksenKulma);       
467        }
468        else
469        {
470             impulssi = Vector.FromLengthAndAngle(alus2nopeus, aluksenKulma);
471        }
472        double aluksenAste = aluksenKulma.Degree;   
473        alus.Push(impulssi);       
474        alus.Animation.Resume();
475        if (alus.Tag == "alus1")
476        {
477            alus1_kaasuttaa = true;
478            alus1.Animation = alus1_kaasu_tekst;
479
480        }
481        if (alus.Tag == "alus2")
482        {
483            alus2_kaasuttaa = true;
484            alus2.Animation = alus2_kaasu_tekst;
485        }
486
487    }
488    void Eikaasua(PhysicsObject alus, int nopeus)
489    {
490        alus.Animation.Stop();
491        if (alus.Tag == "alus1")
492        {
493            alus1_kaasuttaa = false;
494            alus1.Animation = alus1_idle_tekst;
495
496        }
497        if (alus.Tag == "alus2")
498        {
499            alus2_kaasuttaa = false;
500            alus2.Animation = alus2_idle_tekst;
501        }
502    }
503    void Ammu(PhysicsObject alus, int nopeus)
504    {
505        PhysicsObject ammus = new PhysicsObject(perusAmmusKoko, perusAmmusKoko);
506        ammus.Shape = Shapes.Circle;
507        ammus.Color = Color.YellowGreen;
508        ammus.X = alus.X;
509        ammus.Y = alus.Y;
510        ammus.Mass = 5;
511        ammus.IgnoresCollisionResponse = true;
512        ammus.IgnoresExplosions = true;
513        TimeSpan elinaika = new TimeSpan(15000000);
514        ammus.MaximumLifetime = elinaika;
515        ammus.Tag = alus.Tag + "ammus";
516        AddCollisionHandler(ammus, AmmusOsuu);
517        Add(ammus);
518        Angle aluksenKulma = alus.Angle;
519        Vector impulssi = Vector.FromLengthAndAngle(2500, aluksenKulma);
520        ammus.Hit(impulssi);
521    }
522    void AmmusOsuu(PhysicsObject ammus, PhysicsObject kohde)
523    {
524        if (kohde.Tag != "galaksi")
525        {
526            string ampuja = ammus.Tag.ToString();
527            string uhri = kohde.Tag.ToString();
528
529           
530            if (ampuja[4] != uhri[4] && kohde.Tag != "ajopiste")
531            {
532                string special = ammus.Tag.ToString();
533                if (special[5] == 's') //jos special
534                {
535                    if (special[4] == '2')
536                    {
537                        Rajaytap2Special(p2specialTimer);
538                    }
539                    else if (special[4] == '1')
540                    {
541                        Rajaytap1Special(p1specialTimer);
542                    }             
543                }
544                else
545                {
546                    Explosion rajahdys;
547                    rajahdys = new Explosion(40);
548                    rajahdys.Position = ammus.Position;
549                    Add(rajahdys);                   
550                }
551                if (uhri[1] == 's')
552                {
553                    double asteroidinenergia = char.GetNumericValue(uhri[9]);
554                    if (special[5] == 's')
555                    {
556                        asteroidinenergia -= (int)(ammus.Width / 3);
557                    }
558                    else
559                    {
560                        asteroidinenergia--;
561                    }
562                    if (asteroidinenergia <= 0)
563                    {
564                        TeeAsteroidi(kohde.X, kohde.Y, 3, (kohde.Width / 2));
565                        kohde.Destroy();
566                    }
567                    else
568                    {
569                        string uhrinuusitag = "asteroidi";
570                        string uusienergia = asteroidinenergia.ToString();
571                        uhrinuusitag = uhrinuusitag + uusienergia[0];
572                        kohde.Tag = uhrinuusitag;
573                    }
574
575                }
576
577                if (kohde.Tag == "alus2")
578                {
579                    p2healthmittari.Value -= (int)(ammus.Width / 3);
580                }
581                else if (kohde.Tag == "alus1")
582                {
583                    p1healthmittari.Value -= (int)(ammus.Width / 3);
584                }
585                ammus.Destroy();
586            }
587        }
588    }
589    void AlusOsuu(PhysicsObject alus, PhysicsObject kohde)
590    {
591        if (kohde.Tag.ToString().Length > 8)
592        {
593            string kohdestr = kohde.Tag.ToString();
594            if (alus.Tag == "alus2" && kohdestr[8] == 'i')
595            {
596                p2healthmittari.Value -= 1;
597            }
598            else if (alus.Tag == "alus1" && kohdestr[8] == 'i')
599            {
600                p1healthmittari.Value -= 1;
601            }
602        }
603        if (kohde.Tag == "lisaase")
604        {
605            int mikaase = RandomGen.NextInt(4);
606            if (mikaase == 0)
607            {
608                if (alus.Tag == "alus1")
609                {
610                    p1special_reload_speed += 0.5;
611                    MessageDisplay.TextColor = p1Color;
612                    MessageDisplay.Add("Pelaaja 1 special latausnopeus +");
613                }
614                if (alus.Tag == "alus2")
615                {
616                    p2special_reload_speed += 0.5;
617                    MessageDisplay.TextColor = p2Color;
618                    MessageDisplay.Add("Pelaaja 2 special latausnopeus +");
619                }
620            }
621            if (mikaase == 1)
622            {
623                if (alus.Tag == "alus1")
624                {
625                    p1healthmittari.Value += AlustenHealth / 2;
626                    MessageDisplay.TextColor = p1Color;
627                    MessageDisplay.Add("Pelaaja 1 health +");
628                }
629                if (alus.Tag == "alus2")
630                {
631                    p2healthmittari.Value += AlustenHealth / 2;
632                    MessageDisplay.TextColor = p2Color;
633                    MessageDisplay.Add("Pelaaja 2 health +");
634                }
635            }
636            if (mikaase == 2)
637            {
638                if (alus.Tag == "alus1")
639                {
640                    alus1nopeus += 1000;
641                    MessageDisplay.TextColor = p1Color;
642                    MessageDisplay.Add("Pelaaja 1 nopeus +");
643                }
644                if (alus.Tag == "alus2")
645                {
646                    alus2nopeus += 1000;
647                    MessageDisplay.TextColor = p2Color;
648                    MessageDisplay.Add("Pelaaja 2 nopeus +");
649                }
650            }
651            if (mikaase == 3)
652            {
653                if (alus.Tag == "alus1")
654                {
655                    p1kaanto_nopeus += 1;
656                    MessageDisplay.TextColor = p1Color;
657                    MessageDisplay.Add("Pelaaja 1 kääntönopeus +");
658                }
659                if (alus.Tag == "alus2")
660                {
661                    p2kaanto_nopeus += 1;
662                    MessageDisplay.TextColor = p2Color;
663                    MessageDisplay.Add("Pelaaja 2 kääntönopeus +");
664                }
665            }
666            kohde.Destroy();
667        }
668    }
669    void UpDate()
670    {
671        UpdateTimer = new Timer();                     // luodaan uusi ajastin, nimeltä aikaLaskuri
672        UpdateTimer.Interval = updateInterval;                      // ajastukseksi 5 sekuntia
673        UpdateTimer.Trigger += new Timer.TriggerHandler(Paivitys);  //   // asetetaan tapahtuma, kun aikaLaskuri kun 5 sekuntia on kulunut.
674        Add(UpdateTimer);                       // lisätään aikaLaskuri peliin
675        UpdateTimer.Start();                           // käynnistetään aikaLaskuri     
676    }
677    private void Paivitys(Timer sender)
678    {
679        //ovatko alukset kentällä
680        if (alus1.X < (vasenReuna.X - 50))
681        {
682            alus1.X = oikeaReuna.X - siirtymaLaidassa;
683        }
684        if (alus2.X < (vasenReuna.X - 50))
685        {
686            alus2.X = oikeaReuna.X - siirtymaLaidassa;
687        }
688        if (alus1.X > (oikeaReuna.X + 50))
689        {
690            alus1.X = vasenReuna.X + siirtymaLaidassa;
691        }
692        if (alus2.X > (oikeaReuna.X + 50))
693        {
694            alus2.X = vasenReuna.X + siirtymaLaidassa;
695        }
696        if (alus1.Y > (ylaReuna.Y + 50))
697        {
698            alus1.Y = alaReuna.Y + siirtymaLaidassa;
699        }
700        if (alus2.Y > (ylaReuna.Y + 50))
701        {
702            alus2.Y = alaReuna.Y + siirtymaLaidassa;
703        }
704        if (alus1.Y < (alaReuna.Y - 50))
705        {
706            alus1.Y = ylaReuna.Y - siirtymaLaidassa;
707        }
708        if (alus2.Y < (alaReuna.Y - 50))
709        {
710            alus1.Y = ylaReuna.Y - siirtymaLaidassa;
711        }
712
713
714        if (alus1_kaasuttaa) //ajopisteen teko
715        {
716            PhysicsObject piste = teeAjopiste(alus1);
717            Add(piste);
718        }
719        if (alus2_kaasuttaa) //ajopisteen teko
720        {
721            PhysicsObject piste = teeAjopiste(alus2);
722            Add(piste);
723        }
724    }
725    PhysicsObject teeAjopiste(PhysicsObject alus)
726    {
727        PhysicsObject piste = new PhysicsObject(2, 2);
728        piste.Shape = Shapes.Circle;
729        piste.Color = Color.Yellow;
730        piste.IgnoresCollisionResponse = true;
731        piste.Tag = "ajopiste";
732        piste.X = alus.X;
733        piste.Y = alus.Y;
734        TimeSpan elinaika = new TimeSpan(20000000);
735        piste.MaximumLifetime = elinaika;
736        Angle aluksenKulma = alus.Angle + Angle.StraightAngle;
737        Vector impulssi = Vector.FromLengthAndAngle(50, aluksenKulma);
738        piste.Hit(impulssi);
739        return piste;
740    }
741    void ReunaanOsuu(PhysicsObject reuna, PhysicsObject osuja)
742    {
743        string asteroidiko = osuja.Tag.ToString();
744        if (asteroidiko[1] != 's') 
745        {
746            if (reuna.Tag == "ylareuna")
747            {
748                osuja.Y = alaReuna.Y + siirtymaLaidassa;
749            }
750
751            if (reuna.Tag == "alareuna")
752            {
753                osuja.Y = ylaReuna.Y - siirtymaLaidassa;
754            }
755            if (reuna.Tag == "vasenreuna")
756            {
757                osuja.X = (oikeaReuna.X - siirtymaLaidassa);
758            }
759
760            if (reuna.Tag == "oikeareuna")
761            {
762                osuja.X = (vasenReuna.X + siirtymaLaidassa);
763            }
764        }
765    }
766    void TeeHealth()
767    {
768        p1health = new BarGauge();
769        p1health.Max = AlustenHealth;       
770        p1healthmittari = new DoubleMeter(AlustenHealth);
771        p1healthmittari.MaxValue = AlustenHealth;
772        p1healthmittari.MinValue = 0;
773        p1healthmittari.LowerLimit += Voitto;
774        p1health.BindTo(p1healthmittari);
775        p1health.Width = 40;
776        p1health.ValueColor = p1Color;
777        p1health.X = Screen.Left + 50;
778        p1health.Y = Screen.Top - 150;       
779        Add(p1health);
780
781        p2health = new BarGauge();
782        p2health.Max = AlustenHealth;
783        p2healthmittari = new DoubleMeter(AlustenHealth);
784        p2healthmittari.MaxValue = AlustenHealth;
785        p2healthmittari.MinValue = 0;
786        p2healthmittari.LowerLimit += Voitto;
787        p2health.BindTo(p2healthmittari);
788        p2health.Width = 40;
789        p2health.ValueColor = p2Color;
790        p2health.X = Screen.Right - 50;
791        p2health.Y = Screen.Top - 150;
792        Add(p2health);
793    }
794    void TeeSpecial()
795    {
796        p1specialTimer = new Timer();       
797        p2specialTimer = new Timer();
798
799        Add(p1specialTimer);
800        Add(p2specialTimer);
801       
802        LisaaSpecialOhjaimet();
803        LisaaSpecialMittarit();
804    }
805    void LisaaSpecialOhjaimet()
806    {       
807        Keyboard.Listen(Key.LeftShift, ButtonState.Down, LataaSpecial, "Special lataus", alus1, 1);
808        Keyboard.Listen(Key.LeftShift, ButtonState.Released, LaukaiseSpecial, "laukaise special", alus1, 1);
809        Keyboard.Listen(Key.RightControl, ButtonState.Down, LataaSpecial, "Special lataus", alus2, 1);
810        Keyboard.Listen(Key.RightControl, ButtonState.Released, LaukaiseSpecial, "laukaise special", alus2, 1);
811    }
812    void LisaaSpecialMittarit()
813    {
814        p1specialTeho = new DoubleMeter(perusAmmusKoko + 1);
815        p1specialTeho.MaxValue = 100;
816
817        p2specialTeho = new DoubleMeter(perusAmmusKoko + 1);
818        p2specialTeho.MaxValue = 100;
819       
820        p1special = new BarGauge();
821        p1special.Max = 100;
822        p1special.ValueColor = p1Color;
823        p1special.BindTo(p1specialTeho);
824        p1special.X = Screen.Left + 100;
825        p1special.Y = Screen.Top - 150;
826        p1special.Width = 40;
827        Add(p1special);
828
829        p2special = new BarGauge();
830        p2special.Max = 100;
831        p2special.ValueColor = p2Color;
832        p2special.BindTo(p2specialTeho);
833        p2special.X = Screen.Right - 100;
834        p2special.Y = Screen.Top - 150;
835        p2special.Width = 40;
836        Add(p2special);
837    }   
838    void LataaSpecial(PhysicsObject alus, int nopeus)
839    {
840        if (alus.Tag == "alus1" && !p1specialkentalla)
841        {
842            p1specialTeho.Value += p1special_reload_speed;
843        }
844        if (alus.Tag == "alus2" && !p2specialkentalla)
845        {
846            p2specialTeho.Value += p2special_reload_speed;
847        }
848
849    }
850    void LaukaiseSpecial(PhysicsObject alus, int nopeus)
851    {
852        if (alus.Tag == "alus1" && !p1specialkentalla)
853        {
854            PhysicsObject ammus = new PhysicsObject((p1specialTeho / 3), (p1specialTeho / 3));
855            ammus.Shape = Shapes.Circle;
856            ammus.Color = p1Color;
857            ammus.X = alus.X;
858            ammus.Y = alus.Y;
859            ammus.IgnoresCollisionResponse = true;           
860            ammus.Tag = alus.Tag + "special";
861            AddCollisionHandler(ammus, AmmusOsuu);
862            ammus.Image = LoadImage("special2");
863            ammus.CanRotate = true;
864            ammus.AngularVelocity = 3;
865            Add(ammus);
866            Angle aluksenKulma = alus.Angle;
867            Vector impulssi = Vector.FromLengthAndAngle(specialNopeus, aluksenKulma);
868            ammus.Hit(impulssi);
869            p1specialkentalla = true;
870            p1specialTimer.Tag = ammus;
871            p1specialTimer.Interval = specialLifeTime;
872            p1specialTimer.Trigger += new Timer.TriggerHandler(Rajaytap1Special);
873            p1specialTimer.Start();
874            p1specialTeho.Value = 1;
875        }
876        if (alus.Tag == "alus2" && !p2specialkentalla)
877        {
878            PhysicsObject ammus = new PhysicsObject((p2specialTeho / 2), (p2specialTeho / 2));
879            ammus.Shape = Shapes.Circle;
880            ammus.Color = p2Color;
881            ammus.X = alus.X;
882            ammus.Y = alus.Y;
883            ammus.IgnoresCollisionResponse = true;
884            TimeSpan elinaika = TimeSpan.FromSeconds(specialLifeTime);
885            ammus.MaximumLifetime = elinaika;
886            ammus.Tag = alus.Tag + "special";
887            AddCollisionHandler(ammus, AmmusOsuu);
888            ammus.Image = LoadImage("special2");
889            ammus.CanRotate = true;
890            ammus.AngularVelocity = 3;
891            Add(ammus);
892            Angle aluksenKulma = alus.Angle;
893            Vector impulssi = Vector.FromLengthAndAngle(specialNopeus, aluksenKulma);
894            ammus.Hit(impulssi);
895            p2specialkentalla = true;
896            p2specialTimer.Tag = ammus;
897            p2specialTimer.Interval = specialLifeTime;
898            p2specialTimer.Trigger += new Timer.TriggerHandler(Rajaytap2Special);
899            p2specialTimer.Start();
900            p2specialTeho.Value = 1;           
901        }
902    }
903    private void Rajaytap1Special(Timer sender)
904    { 
905        PhysicsObject ammus = (PhysicsObject)sender.Tag;       
906        Explosion jysays = new Explosion(ammus.Width * 3);
907        jysays.Position = ammus.Position;
908        jysays.Force = 10;
909        Add(jysays);
910        ammus.Destroy();     
911        sender.Stop();       
912        p1specialkentalla = false;
913    }
914    private void Rajaytap2Special(Timer sender)
915    {
916        PhysicsObject ammus = (PhysicsObject)sender.Tag;       
917        Explosion jysays = new Explosion(ammus.Width * 3);
918        jysays.Position = ammus.Position;
919        jysays.Force = 10;
920        Add(jysays);
921        ammus.Destroy();
922        sender.Stop();
923        p2specialkentalla = false;   
924    }
925    void Voitto(Double laskuri)
926    {
927        if (p2healthmittari <= 0)
928        {
929            MessageDisplay.TextColor = p1Color;
930            MessageDisplay.Add("Pelaaja 1 voitti erän!");
931            p1Pisteet.Value += 1;
932            TuhoaAlus(alus2);
933            reSpawnTimer2.Start(1);
934        }
935        if (p1healthmittari <= 0)
936        {
937            MessageDisplay.TextColor = p2Color;
938            MessageDisplay.Add("Pelaaja 2 voitti erän!");
939            p2Pisteet.Value += 1;
940            TuhoaAlus(alus1);         
941            reSpawnTimer1.Start(1);
942        }       
943    }
944    void AsteroidiOsuu(PhysicsObject asteroidi, PhysicsObject kohde)
945    {
946        if (kohde.Tag == "vasenreuna")
947        {
948            asteroidi.X = oikeaReuna.X - asteroidi.Width;
949        }
950        if (kohde.Tag == "oikeareuna")
951        {
952            asteroidi.X = vasenReuna.X + asteroidi.Width;
953        }
954        if (kohde.Tag == "ylareuna")
955        {
956            asteroidi.Y = alaReuna.Y + asteroidi.Width;
957        }
958        if (kohde.Tag == "alareuna")
959        {
960            asteroidi.Y = ylaReuna.Y - asteroidi.Width;
961        }
962    }
963    void TuhoaAlus(PhysicsObject alus)
964    {
965        Explosion jysy = new Explosion(250);
966        jysy.X = alus.X;
967        jysy.Y = alus.Y;       
968        Add(jysy);
969        for (int i = 0; i < partikkelit; i++)
970        {
971            PhysicsObject jama = new PhysicsObject(RandomGen.NextInt(1, 20), RandomGen.NextInt(1, 10));
972            bool nelioko = RandomGen.NextBool();
973            if (nelioko)
974            {
975                jama.Shape = Shapes.Rectangle;
976            }
977            else
978            {
979                jama.Shape = Shapes.Triangle;
980            }
981            nelioko = RandomGen.NextBool();
982            if (nelioko)
983            {
984                jama.Color = RandomGen.NextColor(Color.Red, Color.Yellow);
985            }
986            else
987            {
988                jama.Color = alus.Color;
989            }
990            jama.X = alus.X;
991            jama.Y = alus.Y;
992            Vector maiskeenlento = Vector.FromLengthAndAngle(RandomGen.NextDouble(0, 100), RandomGen.NextAngle());
993            TimeSpan eloaika = TimeSpan.FromSeconds(1);
994            jama.MaximumLifetime = eloaika;
995            jama.Tag = "jamaa";
996            jama.IgnoresCollisionResponse = true;
997            jama.IgnoresExplosions = true;
998            jama.IgnoresGravity = true;
999            jama.IgnoresPhysicsLogics = true;
1000            jama.KineticFriction = 0.5;
1001            jama.LinearDamping = 0.99;           
1002            jama.Hit(maiskeenlento);
1003            Add(jama);
1004        }
1005        alus.Stop();
1006        Remove(alus);
1007    }
1008    private void ReSpawnp1(Timer sender)
1009    {       
1010        alus1.X = (Level.Left + 20.0);
1011        alus1.Y = 0.0;
1012        p1healthmittari.Value = AlustenHealth;       
1013        Add(alus1);// TeeAlukset(true, false);       
1014    }
1015    private void ReSpawnp2(Timer sender)
1016    {       
1017       
1018        alus2.X = (Level.Right - 20.0);
1019        alus2.Y = 0.0;
1020        p2healthmittari.Value = AlustenHealth;
1021        Add(alus2); //TeeAlukset(false, true);
1022    }
1023
1024    void jorma(InputQueryWindow sender, string input)
1025    {
1026    }
1027}
Note: See TracBrowser for help on using the repository browser.