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

Revision 911, 25.0 KB checked in by arhetaka, 10 years ago (diff)

paljon parannuksia

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    int siirtymaLaidassa = 80;
17    int reunanetaisyysruudusta = 100;
18
19    IntMeter p1Pisteet;
20    IntMeter p2Pisteet;
21
22    BarGauge p1special;
23    BarGauge p2special;
24   
25    DoubleMeter p1specialTeho;
26    DoubleMeter p2specialTeho;
27
28    BarGauge p1health;
29    BarGauge p2health;
30
31    DoubleMeter p1healthmittari;
32    DoubleMeter p2healthmittari;
33
34    Double specialLifeTime = 1.5;
35    Boolean p1specialkentalla = false;
36    Boolean p2specialkentalla = false;
37    Timer p1specialTimer;
38    Timer p2specialTimer;
39    int specialNopeus = 500;
40
41    Animation alus1_kaasu_tekst;
42    Animation alus2_kaasu_tekst;
43    double resolutionX;
44    double resolutionY;
45
46    Timer UpdateTimer;
47    double updateInterval = 0.1;
48       
49    bool alus1_kaasuttaa = false;
50    bool alus2_kaasuttaa = false;
51
52    int perusAmmusKoko = 3;
53    int AlustenHealth = 10;
54    double alustenIlmanvastus = 0.999;
55
56    int partikkelit = 50;
57
58    protected override void Begin()
59    {
60        AloitaPeli();       
61    }
62    void AloitaPeli()
63    {
64        ClearAll();
65        alus1_kaasuttaa = false;
66        alus2_kaasuttaa = false;
67        p1specialkentalla = false;
68        p2specialkentalla = false;
69        LuoKentta();
70        AsetaOhjaimet();
71        LisaaLaskurit();
72    }
73    void LuoKentta()
74    {
75        TeeGalaksi();
76        TeeAsteroidi(0,0,3, 200);       
77        TeeAlukset();
78        UpDate(); //tekee ajopisteet ja tutkii ovatko alukset vielä kentällä
79        TeeSpecial(); //tekee special aseet ja lisää kuuntelijat
80        TeeHealth();
81        resolutionX = Screen.Width;
82        resolutionY = Screen.Height;       
83        TeeReunat();       
84        Level.Background.CreateStars(3000);
85        Camera.ZoomToLevel();
86    }
87    void TeeGalaksi()
88    {
89        PhysicsObject galaksi = new PhysicsObject(700, 700);
90        galaksi.Image = LoadImage("galaksi");
91        galaksi.IgnoresExplosions = true;
92        galaksi.IgnoresCollisionResponse = true;
93        galaksi.IgnoresPhysicsLogics = true;
94        galaksi.IgnoresGravity = true;
95        galaksi.Tag = "galaksi";
96        galaksi.AngularVelocity = -0.1;
97        Add(galaksi);
98    }
99    void TeeAsteroidi(double x, double y, int lukumaara, double maxkoko)
100    {
101        for (int i = 0; i < lukumaara; i++)
102        {
103           
104            double koko = RandomGen.NextDouble(maxkoko/2, maxkoko);
105            if (koko > 30)
106            {
107                PhysicsObject asteroidi = new PhysicsObject(koko, koko);
108                asteroidi.Shape = Shapes.Circle;
109                asteroidi.Image = LoadImage("asteroidi");
110                asteroidi.Mass = koko * 5;
111                asteroidi.IgnoresExplosions = false;
112                asteroidi.IgnoresCollisionResponse = false;
113                asteroidi.IgnoresPhysicsLogics = false;
114                asteroidi.IgnoresGravity = false;
115                Vector suunta = Vector.FromLengthAndAngle(RandomGen.NextDouble(0, 5000), RandomGen.NextAngle());
116                asteroidi.X = x;// +suunta.X / 10;
117                asteroidi.Y = y;// +suunta.Y / 10;
118                asteroidi.Hit(suunta);
119                asteroidi.Tag = "asteroidi9";
120                asteroidi.AngularVelocity = RandomGen.NextDouble(-1, 1);
121                AddCollisionHandler(asteroidi, AsteroidiOsuu);
122                Add(asteroidi);
123            }
124        }
125    }
126    void TeeAlukset()
127    {
128        alus1 = LuoAlus(1, Level.Left + 20.0, 0.0);
129        alus1.Tag = "alus1";
130        alus1.Image = LoadImage("alus12");
131        alus1.Color = Color.Red;
132
133        Image[] alus_kaasu1 = LoadImages(
134        "alus12",
135        "alus12_kaasuttaa"
136        );
137        alus1_kaasu_tekst = new Animation(alus_kaasu1);
138        alus1_kaasu_tekst.FPS = 10;
139        alus1.Animation = alus1_kaasu_tekst;
140
141        alus1.LinearDamping = alustenIlmanvastus;
142
143        alus2 = LuoAlus(2, Level.Right - 20.0, 0.0);
144        alus2.Tag = "alus2";
145        alus2.Image = LoadImage("alus22");
146        alus2.Color = Color.Blue;
147
148        Image[] alus_kaasu2 = LoadImages(
149        "alus22",
150        "alus22_kaasuttaa"
151        );
152
153        alus2_kaasu_tekst = new Animation(alus_kaasu2);
154        alus2_kaasu_tekst.FPS = 5;
155        alus2.Animation = alus2_kaasu_tekst;
156        alus2.Angle = Angle.StraightAngle;
157        alus2.LinearDamping = alustenIlmanvastus;
158
159    }
160    void TeeReunat()
161    {
162
163        vasenReuna = PhysicsObject.CreateStaticObject(5, resolutionX + 500);
164        vasenReuna.IgnoresPhysicsLogics = true;
165        vasenReuna.Color = Color.White;
166        vasenReuna.X = -(resolutionX / 2) - reunanetaisyysruudusta;
167        vasenReuna.Restitution = 1.0;
168        vasenReuna.IsVisible = true;
169        vasenReuna.Tag = "vasenreuna";
170        vasenReuna.IgnoresCollisionResponse = true;
171        AddCollisionHandler(vasenReuna, ReunaanOsuu);
172        Add(vasenReuna);
173
174        oikeaReuna = PhysicsObject.CreateStaticObject(5, resolutionX + 500);
175        oikeaReuna.IgnoresPhysicsLogics = true;
176        oikeaReuna.Color = Color.White;
177        oikeaReuna.X = (resolutionX / 2) + reunanetaisyysruudusta;
178        oikeaReuna.Restitution = 1.0;
179        oikeaReuna.IsVisible = true;
180        oikeaReuna.Tag = "oikeareuna";
181        oikeaReuna.IgnoresCollisionResponse = true;
182        AddCollisionHandler(oikeaReuna, ReunaanOsuu);
183        Add(oikeaReuna);
184
185        ylaReuna = PhysicsObject.CreateStaticObject(resolutionY + 500, 5);
186        ylaReuna.IgnoresPhysicsLogics = true;
187        ylaReuna.Color = Color.White;
188        ylaReuna.Y = (resolutionY / 2) + reunanetaisyysruudusta;
189        ylaReuna.Restitution = 0.0;
190        ylaReuna.IsVisible = true;
191        ylaReuna.Tag = "ylareuna";
192        ylaReuna.IgnoresCollisionResponse = true;
193        AddCollisionHandler(ylaReuna, ReunaanOsuu);
194        Add(ylaReuna);
195
196        alaReuna = PhysicsObject.CreateStaticObject(resolutionY + 500, 5);
197        alaReuna.IgnoresPhysicsLogics = true;
198        alaReuna.Color = Color.White;
199        alaReuna.Y = -(resolutionY / 2) - reunanetaisyysruudusta;
200        alaReuna.Restitution = 0.0;
201        alaReuna.IsVisible = true;
202        alaReuna.Tag = "alareuna";
203        alaReuna.IgnoresCollisionResponse = true;
204        AddCollisionHandler(alaReuna, ReunaanOsuu);
205        Add(alaReuna);
206    }
207    PhysicsObject LuoAlus(int kumpi, double x, double y)
208    {
209        PhysicsObject alus = new PhysicsObject(60.0, 45.0);
210        alus.Shape = Shapes.Rectangle;
211        alus.X = x;
212        alus.Y = y;
213        alus.Mass = 10;
214        alus.Restitution = 1.0;
215        alus.CanRotate = true;
216        alus.IgnoresCollisionResponse = false;
217        //AddCollisionHandler(alus, AlusOsuu);
218        Add(alus);
219        return alus;
220    }
221    void LisaaLaskurit()
222    {
223        p1Pisteet = LuoPisteLaskuri(Screen.Left + 100.0, Screen.Top - 100.0);
224        p2Pisteet = LuoPisteLaskuri(Screen.Right - 100.0, Screen.Top - 100.0);
225    }
226    IntMeter LuoPisteLaskuri(double x, double y)
227    {
228        IntMeter laskuri = new IntMeter(0);
229        laskuri.MaxValue = AlustenHealth;
230        ValueDisplay naytto = new ValueDisplay();
231        naytto.BindTo(laskuri);
232        naytto.X = x;
233        naytto.Y = y;
234        naytto.ValueColor = Color.White;
235     //   laskuri.UpperLimit += Voitto;
236
237       // Add(naytto);
238        return laskuri;
239    }
240    void AsetaOhjaimet()
241    {
242
243        Keyboard.Listen(Key.A, ButtonState.Down, KaannaVasen, "käännä alusta vasemmalle", alus1,  1);
244        Keyboard.Listen(Key.A, ButtonState.Released, PysaytaPyoriminen, null, alus1, 1);
245        Keyboard.Listen(Key.D, ButtonState.Down, KaannaOikea, "käännä alusta oikealle", alus1, 1);
246        Keyboard.Listen(Key.D, ButtonState.Released, PysaytaPyoriminen, null, alus1, 1);
247        Keyboard.Listen(Key.W, ButtonState.Down, Kaasua, "kaasu", alus1, 1);
248        Keyboard.Listen(Key.W, ButtonState.Released, Eikaasua, null, alus1, 1);
249        Keyboard.Listen(Key.Tab, ButtonState.Pressed, Ammu, null, alus1, 1);
250
251        Keyboard.Listen(Key.Left, ButtonState.Down, KaannaVasen, "käännä alusta vasemmalle", alus2, 1);
252        Keyboard.Listen(Key.Left, ButtonState.Released, PysaytaPyoriminen, null, alus2, 1);
253        Keyboard.Listen(Key.Right, ButtonState.Down, KaannaOikea, "käännä alusta oikealle", alus2, 1);
254        Keyboard.Listen(Key.Right, ButtonState.Released, PysaytaPyoriminen, null, alus2, 1);
255        Keyboard.Listen(Key.Up, ButtonState.Down, Kaasua, "kaasu", alus2, 1);
256        Keyboard.Listen(Key.Up, ButtonState.Released, Eikaasua, null, alus2, 1);
257        Keyboard.Listen(Key.RightShift, ButtonState.Pressed, Ammu, null, alus2, 1);
258
259        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
260        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, "Poistu");
261        Keyboard.Listen(Key.F2, ButtonState.Pressed, AloitaPeli, "uusi peli");       
262    }   
263    void KaannaVasen(PhysicsObject alus, int nopeus)
264    {
265        alus.AngularVelocity = 4;
266    }
267    void KaannaOikea(PhysicsObject alus, int nopeus)
268    {
269        alus.AngularVelocity = -4;
270    }
271    void PysaytaPyoriminen(PhysicsObject alus, int nopeus)
272    {
273        alus.AngularVelocity = 0;
274    }
275    void Kaasua(PhysicsObject alus, int nopeus)
276    {
277        Angle aluksenKulma = alus.Angle;
278        Vector impulssi = Vector.FromLengthAndAngle(2000, aluksenKulma);       
279        double aluksenAste = aluksenKulma.Degree;   
280        alus.Push(impulssi);       
281        alus.Animation.Resume();
282        if (alus.Tag == "alus1")
283        {
284            alus1_kaasuttaa = true;
285        }
286        if (alus.Tag == "alus2")
287        {
288            alus2_kaasuttaa = true;
289        }
290
291    }
292    void Eikaasua(PhysicsObject alus, int nopeus)
293    {
294        alus.Animation.Stop();
295        if (alus.Tag == "alus1")
296        {
297            alus1_kaasuttaa = false;
298        }
299        if (alus.Tag == "alus2")
300        {
301            alus2_kaasuttaa = false;
302        }
303    }
304    void Ammu(PhysicsObject alus, int nopeus)
305    {
306        PhysicsObject ammus = new PhysicsObject(perusAmmusKoko, perusAmmusKoko);
307        ammus.Shape = Shapes.Circle;
308        ammus.Color = Color.YellowGreen;
309        ammus.X = alus.X;
310        ammus.Y = alus.Y;
311        ammus.IgnoresCollisionResponse = true;
312        ammus.IgnoresExplosions = true;
313        TimeSpan elinaika = new TimeSpan(15000000);
314        ammus.MaximumLifetime = elinaika;
315        ammus.Tag = alus.Tag + "ammus";
316        AddCollisionHandler(ammus, AmmusOsuu);
317        Add(ammus);
318        Angle aluksenKulma = alus.Angle;
319        Vector impulssi = Vector.FromLengthAndAngle(500, aluksenKulma);
320        ammus.Hit(impulssi);
321    }
322    void AmmusOsuu(PhysicsObject ammus, PhysicsObject kohde)
323    {
324        if (kohde.Tag != "galaksi")
325        {
326            string ampuja = ammus.Tag.ToString();
327            string uhri = kohde.Tag.ToString();
328
329           
330            if (ampuja[4] != uhri[4] && kohde.Tag != "ajopiste")
331            {
332                string special = ammus.Tag.ToString();
333                if (special[5] == 's') //jos special
334                {
335                    if (special[4] == '2')
336                    {
337                        Rajaytap2Special(p2specialTimer);
338                    }
339                    else if (special[4] == '1')
340                    {
341                        Rajaytap1Special(p1specialTimer);
342                    }             
343                }
344                else
345                {
346                    Explosion rajahdys;
347                    rajahdys = new Explosion(40);
348                    rajahdys.Position = ammus.Position;
349                    Add(rajahdys);                   
350                }
351                if (uhri[1] == 's')
352                {
353                    double asteroidinenergia = char.GetNumericValue(uhri[9]);
354                    if (special[5] == 's')
355                    {
356                        asteroidinenergia -= (int)(ammus.Width / 3);
357                    }
358                    else
359                    {
360                        asteroidinenergia--;
361                    }
362                    if (asteroidinenergia <= 0)
363                    {
364                        TeeAsteroidi(kohde.X, kohde.Y, 3, (kohde.Width / 2));
365                        kohde.Destroy();
366                    }
367                    else
368                    {
369                        string uhrinuusitag = "asteroidi";
370                        string uusienergia = asteroidinenergia.ToString();
371                        uhrinuusitag = uhrinuusitag + uusienergia[0];
372                        kohde.Tag = uhrinuusitag;
373                    }
374
375                }
376
377                if (kohde.Tag == "alus2")
378                {
379                    p2healthmittari.Value -= (int)(ammus.Width / 3);
380                }
381                else if (kohde.Tag == "alus1")
382                {
383                    p1healthmittari.Value -= (int)(ammus.Width / 3);
384                }
385                ammus.Destroy();
386            }
387        }
388    }
389    void AlusOsuu(PhysicsObject alus, PhysicsObject kohde)
390    {
391       
392    }   
393    void UpDate()
394    {
395        UpdateTimer = new Timer();                     // luodaan uusi ajastin, nimeltä aikaLaskuri
396        UpdateTimer.Interval = updateInterval;                      // ajastukseksi 5 sekuntia
397        UpdateTimer.Trigger += new Timer.TriggerHandler(Paivitys);  //   // asetetaan tapahtuma, kun aikaLaskuri kun 5 sekuntia on kulunut.
398        Add(UpdateTimer);                       // lisätään aikaLaskuri peliin
399        UpdateTimer.Start();                           // käynnistetään aikaLaskuri     
400    }
401    private void Paivitys(Timer sender)
402    {
403        //ovatko alukset kentällä
404        if (alus1.X < (vasenReuna.X - 50))
405        {
406            alus1.X = oikeaReuna.X - siirtymaLaidassa;
407        }
408        if (alus2.X < (vasenReuna.X - 50))
409        {
410            alus2.X = oikeaReuna.X - siirtymaLaidassa;
411        }
412        if (alus1.X > (oikeaReuna.X + 50))
413        {
414            alus1.X = vasenReuna.X + siirtymaLaidassa;
415        }
416        if (alus2.X > (oikeaReuna.X + 50))
417        {
418            alus2.X = vasenReuna.X + siirtymaLaidassa;
419        }
420        if (alus1.Y > (ylaReuna.Y + 50))
421        {
422            alus1.Y = alaReuna.Y + siirtymaLaidassa;
423        }
424        if (alus2.Y > (ylaReuna.Y + 50))
425        {
426            alus2.Y = alaReuna.Y + siirtymaLaidassa;
427        }
428        if (alus1.Y < (alaReuna.Y - 50))
429        {
430            alus1.Y = ylaReuna.Y - siirtymaLaidassa;
431        }
432        if (alus2.Y < (alaReuna.Y - 50))
433        {
434            alus1.Y = ylaReuna.Y - siirtymaLaidassa;
435        }
436
437
438        if (alus1_kaasuttaa) //ajopisteen teko
439        {
440            PhysicsObject piste = teeAjopiste(alus1);
441            Add(piste);
442        }
443        if (alus2_kaasuttaa) //ajopisteen teko
444        {
445            PhysicsObject piste = teeAjopiste(alus2);
446            Add(piste);
447        }
448    }
449    PhysicsObject teeAjopiste(PhysicsObject alus)
450    {
451        PhysicsObject piste = new PhysicsObject(2, 2);
452        piste.Shape = Shapes.Circle;
453        piste.Color = Color.Yellow;
454        piste.IgnoresCollisionResponse = true;
455        piste.Tag = "ajopiste";
456        piste.X = alus.X;
457        piste.Y = alus.Y;
458        TimeSpan elinaika = new TimeSpan(20000000);
459        piste.MaximumLifetime = elinaika;
460        Angle aluksenKulma = alus.Angle + Angle.StraightAngle;
461        Vector impulssi = Vector.FromLengthAndAngle(50, aluksenKulma);
462        piste.Hit(impulssi);
463        return piste;
464    }
465    void ReunaanOsuu(PhysicsObject reuna, PhysicsObject osuja)
466    {
467        string asteroidiko = osuja.Tag.ToString();
468        if (asteroidiko[1] != 's') 
469        {
470            if (reuna.Tag == "ylareuna")
471            {
472                osuja.Y = alaReuna.Y + siirtymaLaidassa;
473            }
474
475            if (reuna.Tag == "alareuna")
476            {
477                osuja.Y = ylaReuna.Y - siirtymaLaidassa;
478            }
479            if (reuna.Tag == "vasenreuna")
480            {
481                osuja.X = (oikeaReuna.X - siirtymaLaidassa);
482            }
483
484            if (reuna.Tag == "oikeareuna")
485            {
486                osuja.X = (vasenReuna.X + siirtymaLaidassa);
487            }
488        }
489    }
490    void TeeHealth()
491    {
492        p1health = new BarGauge();
493        p1health.Max = AlustenHealth;       
494        p1healthmittari = new DoubleMeter(AlustenHealth);
495        p1healthmittari.MinValue = 0;
496        p1healthmittari.LowerLimit += Voitto;
497        p1health.BindTo(p1healthmittari);
498        p1health.Width = 40;       
499        p1health.ValueColor = Color.Red;
500        p1health.X = Screen.Left + 50;
501        p1health.Y = Screen.Top - 100;       
502        Add(p1health);
503
504        p2health = new BarGauge();
505        p2health.Max = AlustenHealth;
506        p2healthmittari = new DoubleMeter(AlustenHealth);
507        p2healthmittari.MinValue = 0;
508        p2healthmittari.LowerLimit += Voitto;
509        p2health.BindTo(p2healthmittari);
510        p2health.Width = 40;       
511        p2health.ValueColor = Color.Blue;
512        p2health.X = Screen.Right - 50;
513        p2health.Y = Screen.Top - 100;
514        Add(p2health);
515    }
516    void TeeSpecial()
517    {
518        p1specialTimer = new Timer();       
519        p2specialTimer = new Timer();
520
521        Add(p1specialTimer);
522        Add(p2specialTimer);
523       
524        LisaaSpecialOhjaimet();
525        LisaaSpecialMittarit();
526    }
527    void LisaaSpecialOhjaimet()
528    {       
529        Keyboard.Listen(Key.LeftShift, ButtonState.Down, LataaSpecial, "Special lataus", alus1, 1);
530        Keyboard.Listen(Key.LeftShift, ButtonState.Released, LaukaiseSpecial, "laukaise special", alus1, 1);
531        Keyboard.Listen(Key.RightControl, ButtonState.Down, LataaSpecial, "Special lataus", alus2, 1);
532        Keyboard.Listen(Key.RightControl, ButtonState.Released, LaukaiseSpecial, "laukaise special", alus2, 1);
533    }
534    void LisaaSpecialMittarit()
535    {
536        p1specialTeho = new DoubleMeter(perusAmmusKoko + 1);
537        p1specialTeho.MaxValue = 100;
538
539        p2specialTeho = new DoubleMeter(perusAmmusKoko + 1);
540        p2specialTeho.MaxValue = 100;
541       
542        p1special = new BarGauge();
543        p1special.Max = 100;
544        p1special.ValueColor = Color.LightPink;
545        p1special.BindTo(p1specialTeho);
546        p1special.X = Screen.Left + 100;
547        p1special.Y = Screen.Top - 100;
548        p1special.Width = 40;
549        Add(p1special);
550
551        p2special = new BarGauge();
552        p2special.Max = 100;
553        p2special.ValueColor = Color.LightBlue;
554        p2special.BindTo(p2specialTeho);
555        p2special.X = Screen.Right - 100;
556        p2special.Y = Screen.Top - 100;
557        p2special.Width = 40;
558        Add(p2special);
559    }   
560    void LataaSpecial(PhysicsObject alus, int nopeus)
561    {
562        if (alus.Tag == "alus1" && !p1specialkentalla)
563        {
564            p1specialTeho.Value += 1;
565        }
566        if (alus.Tag == "alus2" && !p2specialkentalla)
567        {
568            p2specialTeho.Value += 1;
569        }
570
571    }
572    void LaukaiseSpecial(PhysicsObject alus, int nopeus)
573    {
574        if (alus.Tag == "alus1" && !p1specialkentalla)
575        {
576            PhysicsObject ammus = new PhysicsObject((p1specialTeho / 3), (p1specialTeho / 3));
577            ammus.Shape = Shapes.Circle;
578            ammus.Color = Color.LightBlue;
579            ammus.X = alus.X;
580            ammus.Y = alus.Y;
581            ammus.IgnoresCollisionResponse = true;           
582            ammus.Tag = alus.Tag + "special";
583            AddCollisionHandler(ammus, AmmusOsuu);
584            ammus.Image = LoadImage("special");
585            ammus.CanRotate = true;
586            ammus.AngularVelocity = 3;
587            Add(ammus);
588            Angle aluksenKulma = alus.Angle;
589            Vector impulssi = Vector.FromLengthAndAngle(specialNopeus, aluksenKulma);
590            ammus.Hit(impulssi);
591            p1specialkentalla = true;
592            p1specialTimer.Tag = ammus;
593            p1specialTimer.Interval = specialLifeTime;
594            p1specialTimer.Trigger += new Timer.TriggerHandler(Rajaytap1Special);  //   // asetetaan tapahtuma, kun aikaLaskuri kun 5 sekuntia on kulunut.           
595            p1specialTimer.Start();
596            p1specialTeho.Value = 1;
597        }
598        if (alus.Tag == "alus2" && !p2specialkentalla)
599        {
600            PhysicsObject ammus = new PhysicsObject((p2specialTeho / 2), (p2specialTeho / 2));
601            ammus.Shape = Shapes.Circle;
602            ammus.Color = Color.LightBlue;
603            ammus.X = alus.X;
604            ammus.Y = alus.Y;
605            ammus.IgnoresCollisionResponse = true;
606            TimeSpan elinaika = TimeSpan.FromSeconds(specialLifeTime);
607            ammus.MaximumLifetime = elinaika;
608            ammus.Tag = alus.Tag + "special";
609            AddCollisionHandler(ammus, AmmusOsuu);
610            ammus.Image = LoadImage("special");
611            ammus.CanRotate = true;
612            ammus.AngularVelocity = 3;
613            Add(ammus);
614            Angle aluksenKulma = alus.Angle;
615            Vector impulssi = Vector.FromLengthAndAngle(specialNopeus, aluksenKulma);
616            ammus.Hit(impulssi);
617            p2specialkentalla = true;
618            p2specialTimer.Tag = ammus;
619            p2specialTimer.Interval = specialLifeTime;
620            p2specialTimer.Trigger += new Timer.TriggerHandler(Rajaytap2Special);  //   // asetetaan tapahtuma, kun aikaLaskuri kun 5 sekuntia on kulunut.           
621            p2specialTimer.Start();
622            p2specialTeho.Value = 1;           
623        }
624    }
625    private void Rajaytap1Special(Timer sender)
626    { 
627        PhysicsObject ammus = (PhysicsObject)sender.Tag;       
628        Explosion jysays = new Explosion(ammus.Width * 3);
629        jysays.Position = ammus.Position;
630        jysays.Force = 100;
631        Add(jysays);
632        ammus.Destroy();     
633        sender.Stop();       
634        p1specialkentalla = false;
635    }
636    private void Rajaytap2Special(Timer sender)
637    {
638        PhysicsObject ammus = (PhysicsObject)sender.Tag;       
639        Explosion jysays = new Explosion(ammus.Width * 3);
640        jysays.Position = ammus.Position;
641        jysays.Force = 100;
642        Add(jysays);
643        ammus.Destroy();
644        sender.Stop();
645        p2specialkentalla = false;   
646    }
647    void Voitto(Double laskuri)
648    {
649        if (p2healthmittari <= 0)
650        {
651            MessageDisplay.TextColor = Color.White;
652            MessageDisplay.Add("Pelaaja 1 voitti pelin.");
653            TuhoaAlus(alus2);
654        }
655        if (p1healthmittari <= 0)
656        {
657            MessageDisplay.TextColor = Color.White;
658            MessageDisplay.Add("Pelaaja 2 voitti pelin.");
659            TuhoaAlus(alus1);           
660        }       
661    }
662    void AsteroidiOsuu(PhysicsObject asteroidi, PhysicsObject kohde)
663    {
664        if (kohde.Tag == "vasenreuna")
665        {
666            asteroidi.X = oikeaReuna.X - asteroidi.Width;
667        }
668        if (kohde.Tag == "oikeareuna")
669        {
670            asteroidi.X = vasenReuna.X + asteroidi.Width;
671        }
672        if (kohde.Tag == "ylareuna")
673        {
674            asteroidi.Y = alaReuna.Y + asteroidi.Width;
675        }
676        if (kohde.Tag == "alareuna")
677        {
678            asteroidi.Y = ylaReuna.Y - asteroidi.Width;
679        }
680    }
681    void TuhoaAlus(PhysicsObject alus)
682    {
683        Explosion jysy = new Explosion(250);
684        jysy.X = alus.X;
685        jysy.Y = alus.Y;
686        Add(jysy);
687        for (int i = 0; i < partikkelit; i++)
688        {
689            PhysicsObject jama = new PhysicsObject(RandomGen.NextInt(1, 20), RandomGen.NextInt(1, 10));
690            bool nelioko = RandomGen.NextBool();
691            if (nelioko)
692            {
693                jama.Shape = Shapes.Rectangle;
694            }
695            else
696            {
697                jama.Shape = Shapes.Triangle;
698            }
699            nelioko = RandomGen.NextBool();
700            if (nelioko)
701            {
702                jama.Color = RandomGen.NextColor(Color.Red, Color.Yellow);
703            }
704            else
705            {
706                jama.Color = alus.Color;
707            }
708            jama.X = alus.X;
709            jama.Y = alus.Y;
710            Vector maiskeenlento = Vector.FromLengthAndAngle(RandomGen.NextDouble(0, 100), RandomGen.NextAngle());
711            TimeSpan eloaika = TimeSpan.FromSeconds(1);
712            jama.MaximumLifetime = eloaika;
713            jama.Tag = "jamaa";
714            jama.IgnoresCollisionResponse = true;
715
716            jama.IgnoresExplosions = true;
717            jama.IgnoresGravity = true;
718            jama.IgnoresPhysicsLogics = true;
719            jama.KineticFriction = 0.5;
720            jama.LinearDamping = 0.99;
721           
722            jama.Hit(maiskeenlento);
723            Add(jama);
724        }
725        alus.Destroy();
726    }
727}
Note: See TracBrowser for help on using the repository browser.