source: 2013/23/Jon-ErikK/magnetaa.cs @ 3997

Revision 3996, 23.6 KB checked in by josaklin, 8 years ago (diff)
Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9public class magnetaa : PhysicsGame
10{
11    bool peliPaalla;
12    bool asd;
13   
14    Image punainenPaikallaan;
15    Image sininenPaikallaan;
16    Image sininenAmmus;
17    Image punainenAmmus;
18    Image punainenMagneettitorni;
19    Image sininenMagneettitorni;
20   
21    IntMeter pelaaja1Elamat;
22    IntMeter pelaaja2Elamat;
23
24    Pelaaja pelaaja1;   
25    Pelaaja pelaaja2;
26
27    PhysicsObject ylaraja;
28    PhysicsObject alaraja;
29    PhysicsObject oikearaja;
30    PhysicsObject vasenraja;
31    PhysicsObject asdin;
32
33    List<Ammus> ammukset;
34
35    Vector ylos = new Vector(0, 190);
36    Vector alas = new Vector(0, -190);
37    Vector oikea = new Vector(190, 0);
38    Vector vasen = new Vector(-190, 0);
39   
40    public override void Begin()
41    {
42        peliPaalla = false;
43        asd = false;
44 
45        Level.BackgroundColor=Color.Black;
46       
47        MultiSelectWindow alkuvalikko = new MultiSelectWindow("Magneta", "Aloita peli", "Poistu pelistä");
48        Add(alkuvalikko);
49
50        alkuvalikko.BorderColor = Color.White;
51        alkuvalikko.ActiveColor = Color.White;
52        alkuvalikko.SelectionColor = Color.Silver;
53        alkuvalikko.Color = Color.Gray;
54
55        Label vihje = new Label();
56        vihje.Text = "+X- -Y- O = EasterEgg";
57        vihje.X = 200;
58        vihje.Y = -300;
59        vihje.TextColor = Color.Red;
60
61        Add(vihje);
62
63        alkuvalikko.AddItemHandler(0, valivaihe);
64        alkuvalikko.AddItemHandler(1, Exit);
65
66    }
67
68    public void valivaihe()
69    {
70        ClearGameObjects();
71
72        luoPeli();
73    }
74
75    public void luoPeli()
76    {
77        peliPaalla = true;
78       
79        ammukset = new List<Ammus>();
80
81        alustaKuvat();
82        luoKentta(-300, 0, 300, 0, new Vector(0, 1), new Vector(0, 1));
83        asetaNappaimet();
84    }
85
86    public void uudelleenkaynnistaPeli()
87    {
88        asd = false;
89        asdin = null;
90        ClearAll();
91        Begin();
92    }
93
94    public void seuraavaPeli()
95    {
96        ClearGameObjects();
97        luoPeli();
98    }
99
100    //pelikentän säätäminen alkaa
101
102    public void luoKentta(double pelaaja1x, double pelaaja1y, double pelaaja2x, double pelaaja2y, Vector alkusuunta1, Vector alkusuunta2) {
103
104        luoKentanOsat();
105       
106        pelaaja1 = luoPelaaja(pelaaja1x, pelaaja1y, alkusuunta1, 1);
107        pelaaja2 = luoPelaaja(pelaaja2x, pelaaja2y, alkusuunta2, 2);
108
109    }
110
111    public void luoKentanOsat()
112    {
113        Level.BackgroundColor = Color.Black;
114
115        luoTausta();
116        luoKentanReunat();
117        luoLaskurit();
118
119    }
120
121    public void luoKentanReunat()
122    {
123        alaraja = Level.CreateBottomBorder();
124        alaraja.Color = Color.Charcoal;
125
126        ylaraja = Level.CreateTopBorder();
127        ylaraja.Color = Color.Charcoal;
128
129        oikearaja = Level.CreateRightBorder();
130        oikearaja.Color = Color.Charcoal;
131
132        vasenraja = Level.CreateLeftBorder();
133        vasenraja.Color = Color.Charcoal;
134
135
136    }
137
138    public void luoTausta()
139    {
140        GameObject sivusuorakulmio1 = new GameObject(300, Screen.Height);
141        sivusuorakulmio1.Color = Color.Charcoal;
142        sivusuorakulmio1.X = -650;
143        sivusuorakulmio1.Y = 0;
144
145        GameObject sivusuorakulmio2 = new GameObject(300, Screen.Height);
146        sivusuorakulmio2.Color = Color.Charcoal;
147        sivusuorakulmio2.X = 650;
148        sivusuorakulmio2.Y = 0;
149
150        Add(sivusuorakulmio1);
151        Add(sivusuorakulmio2);
152
153        GameObject tasoOikea = new GameObject(300, Level.Height);
154        tasoOikea.Shape = Shape.Rectangle;
155        tasoOikea.X =Level.Right-150;
156        tasoOikea.Y = 0;
157        tasoOikea.Color = Color.Silver;
158
159        GameObject tasoVasen = new GameObject(300, Level.Height);
160        tasoVasen.Shape = Shape.Rectangle;
161        tasoVasen.X = Level.Left+150;
162        tasoVasen.Y = 0;
163        tasoVasen.Color = Color.Silver;
164
165        Add(tasoOikea,-3);
166        Add(tasoVasen,-3);
167    }
168
169    public void luoLaskurit()
170    {
171        pelaaja1Elamat = new IntMeter(5);
172        Label pistenaytto1 = new Label();
173        pistenaytto1.X = Screen.Left + 100;
174        pistenaytto1.Y = Screen.Top - 130;
175        pistenaytto1.Color = Color.Charcoal;
176        pistenaytto1.TextColor = Color.White;
177
178        pistenaytto1.BindTo(pelaaja1Elamat);
179
180        pelaaja2Elamat = new IntMeter(5);
181        Label pistenaytto2 = new Label();
182        pistenaytto2.X = Screen.Right - 100;
183        pistenaytto2.Y = Screen.Top - 130;
184        pistenaytto2.Color = Color.Charcoal;
185        pistenaytto2.TextColor = Color.White;
186
187        pistenaytto2.BindTo(pelaaja2Elamat);
188
189        Add(pistenaytto1);
190        Add(pistenaytto2);
191
192        Label pelaajan1 = luoTekstillinenLabel(Color.White, "Pelaajan 1 elamat");
193        pelaajan1.X = Screen.Left + 110;
194        pelaajan1.Y = Screen.Top - 100;
195
196        Label pelaajan2 = luoTekstillinenLabel(Color.White, "Pelaajan 2 elamat");
197        pelaajan2.X = Screen.Right - 110;
198        pelaajan2.Y = Screen.Top - 100;
199
200        Add(pelaajan1);
201        Add(pelaajan2);
202
203    }
204
205    public Label luoTekstillinenLabel(Color tekstinVari, String teksti)
206    {
207        Label tekstikentta = new Label();
208        tekstikentta.Text = teksti;
209        tekstikentta.TextColor = tekstinVari;
210
211        return tekstikentta;
212    }
213
214    public void alustaKuvat()
215    {
216        punainenAmmus = LoadImage("Panos_punainen");
217        sininenAmmus = LoadImage("Panos_sininen");
218
219        punainenPaikallaan = LoadImage("Peliukko_punainen_01");
220        sininenPaikallaan = LoadImage("Peliukko_sininen_1");
221
222        punainenMagneettitorni = LoadImage("Magneettitorni_punainen");
223        sininenMagneettitorni = LoadImage("Magneettitorni_sininen");
224
225    }
226
227    public Pelaaja luoPelaaja(double x, double y, Vector alkusuunta, int numero) {
228
229        Pelaaja pelaaja = new Pelaaja(x, y, alkusuunta, numero);
230        pelaaja.Image = sininenPaikallaan;
231
232        Add(pelaaja);
233
234        return pelaaja;
235    }
236
237    //pelikentän säätö loppuu
238
239    //Näppäimistön asetus
240   
241    public void asetaNappaimet() {
242 
243        Keyboard.Listen(Key.W, ButtonState.Down, asetaPelaajanSuuntaJaNopeus, null, pelaaja1, ylos);
244        Keyboard.Listen(Key.W, ButtonState.Released, asetaPelaajanSuuntaJaNopeus, null, pelaaja1, Vector.Zero);
245        Keyboard.Listen(Key.S, ButtonState.Down, asetaPelaajanSuuntaJaNopeus, null, pelaaja1, alas);
246        Keyboard.Listen(Key.S, ButtonState.Released, asetaPelaajanSuuntaJaNopeus, null, pelaaja1, Vector.Zero);
247        Keyboard.Listen(Key.A, ButtonState.Down, asetaPelaajanSuuntaJaNopeus, null, pelaaja1, vasen);
248        Keyboard.Listen(Key.A, ButtonState.Released, asetaPelaajanSuuntaJaNopeus, null, pelaaja1, Vector.Zero);
249        Keyboard.Listen(Key.D, ButtonState.Down, asetaPelaajanSuuntaJaNopeus, null, pelaaja1, oikea);
250        Keyboard.Listen(Key.D, ButtonState.Released, asetaPelaajanSuuntaJaNopeus, null, pelaaja1, Vector.Zero);
251
252        Keyboard.Listen(Key.C, ButtonState.Pressed, ammu, null, pelaaja1);
253        Keyboard.Listen(Key.V, ButtonState.Pressed, vaihdaMagneettisuus, null, pelaaja1);
254        Keyboard.Listen(Key.B, ButtonState.Pressed, luoTorni, null, pelaaja1);
255       
256        Keyboard.Listen(Key.Up, ButtonState.Down, asetaPelaajanSuuntaJaNopeus, null, pelaaja2, ylos);
257        Keyboard.Listen(Key.Up, ButtonState.Released, asetaPelaajanSuuntaJaNopeus, null, pelaaja2, Vector.Zero);
258        Keyboard.Listen(Key.Down, ButtonState.Down, asetaPelaajanSuuntaJaNopeus, null, pelaaja2, alas);
259        Keyboard.Listen(Key.Down, ButtonState.Released, asetaPelaajanSuuntaJaNopeus, null, pelaaja2, Vector.Zero);
260        Keyboard.Listen(Key.Left, ButtonState.Down, asetaPelaajanSuuntaJaNopeus, null, pelaaja2, vasen);
261        Keyboard.Listen(Key.Left, ButtonState.Released, asetaPelaajanSuuntaJaNopeus, null, pelaaja2, Vector.Zero);
262        Keyboard.Listen(Key.Right, ButtonState.Down, asetaPelaajanSuuntaJaNopeus, null, pelaaja2, oikea);
263        Keyboard.Listen(Key.Right, ButtonState.Released, asetaPelaajanSuuntaJaNopeus, null, pelaaja2, Vector.Zero);
264
265        Keyboard.Listen(Key.Period, ButtonState.Pressed, ammu, null, pelaaja2);
266        Keyboard.Listen(Key.Comma, ButtonState.Pressed, vaihdaMagneettisuus, null, pelaaja2);
267        Keyboard.Listen(Key.M, ButtonState.Pressed, luoTorni, null, pelaaja2);
268
269        Keyboard.Listen(Key.O, ButtonState.Pressed, asding, null);
270
271
272
273        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
274
275    }
276
277    //Näppäimistön asetus loppuu
278
279    //Pelaajan ja ammuksen nopeuksien asettaminen
280
281    public void asetaPelaajanSuuntaJaNopeus(Pelaaja pelaaja, Vector nopeus)
282    {
283        if (nopeus != Vector.Zero)
284        {
285            Vector apuyksikkovektori = new Vector(nopeus.X, nopeus.Y);
286            apuyksikkovektori = apuyksikkovektori.Normalize();
287
288            pelaaja.Animation.Start();
289
290            pelaaja.Angle = apuyksikkovektori.Angle + Angle.FromDegrees(-90);
291
292            maaritaPelaajanAmmuksenSuunta(apuyksikkovektori, pelaaja);
293        }
294
295        pelaaja.Velocity = nopeus;
296    }
297
298    public void maaritaPelaajanAmmuksenSuunta(Vector yksikkovektori, Pelaaja pelaaja)
299    {
300        if (yksikkovektori.X != 0 || yksikkovektori.Y != 0)
301        {
302            pelaaja.ammustenSuunta = yksikkovektori;
303        }
304    }
305
306    //Pelaajan ja ammuksen nopeuden asetus loppuu
307
308    //Ammuksen syntymä ja kuolema
309
310    public void ammu(Pelaaja pelaaja)
311    { 
312        double apuX=pelaaja.ammustenSuunta.X * 40;
313        double apuY=pelaaja.ammustenSuunta.Y * 40;
314
315        luoUusiAmmus(pelaaja.X+apuX, pelaaja.Y+apuY, pelaaja.magneetinVari, pelaaja.ammustenSuunta);     
316    }
317
318    public void luoUusiAmmus(double x, double y, bool onkoMagneettinen, Vector suunta)
319    {
320        Ammus uusiAmmus = new Ammus(onkoMagneettinen, x, y);
321
322        uusiAmmus.Velocity=suunta*250;
323        uusiAmmus.X = x;
324        uusiAmmus.Y = y;
325        uusiAmmus.Angle += Angle.FromDegrees(-90);
326        if (uusiAmmus.Magneettisuus)
327        {
328            uusiAmmus.Image = punainenAmmus;
329        }
330        else
331        {
332            uusiAmmus.Image = sininenAmmus;
333        }
334       
335        AddCollisionHandler(uusiAmmus, osumaAmmuksella);       
336       
337        Add(uusiAmmus);
338
339        ammukset.Add(uusiAmmus);
340
341        PlaySound("Ampuminen");
342    }
343
344    public void osumaAmmuksella(PhysicsObject ammus, PhysicsObject osuja)
345    {
346        Ammus ammus2 = (Ammus) ammus;
347
348        for(int i=0;i<ammukset.Count;i++){
349            if (ammukset[i] == osuja)
350            {
351                osuja.Destroy();
352                Add(luoRajahdys(ammus.X, ammus.Y, 30));
353                Add(luoRajahdys(osuja.X, osuja.Y, 30));
354                ammus.Destroy();
355
356                Ammus osuja2 = (Ammus)osuja;
357                ammukset.Remove(ammus2);
358                ammukset.Remove(osuja2);
359
360                return;
361            }
362        }
363
364        if (osuja == pelaaja2 || osuja == pelaaja1) {
365
366            Pelaaja pelaaja = (Pelaaja)osuja;
367
368            if (pelaaja == pelaaja1)
369            {
370                pelaaja1Elamat.Value -= 1;
371                if (pelaaja1Elamat < 1)
372                {
373                    pelinLoppu(pelaaja);
374                }
375            }
376            if(pelaaja == pelaaja2)
377            {
378                pelaaja2Elamat.Value -= 1;
379                if (pelaaja2Elamat < 1)
380                {
381                    pelinLoppu(pelaaja);
382                }
383            }
384           
385           
386            ammus.Destroy();
387            Add(luoRajahdys(ammus.X, ammus.Y, 30));
388            ammukset.Remove(ammus2);
389
390            return;
391
392        }
393
394        if (osuukoReunaan(ammus2,osuja))
395        {
396            return;
397        }
398
399        for (int i = 0; i < pelaaja1.tornit.Count; i++)
400        {
401            if (pelaaja1.tornit[i] == osuja)
402            {
403                ammus.Destroy();
404                Add(luoRajahdys(ammus.X, ammus.Y, 30));
405
406                ammukset.Remove(ammus2);
407
408                pelaaja1.tornit[i].elamat.Value -= 1;
409
410                if (pelaaja1.tornit[i].elamat <= 0)
411                {
412                    osuja.Destroy();
413                    Add(luoRajahdys(pelaaja1.tornit[i].X, pelaaja1.tornit[i].Y, 60));
414                    pelaaja1.tornit.Remove(pelaaja1.tornit[i]);
415                }
416
417                return;
418            }
419        }
420
421        for (int i = 0; i < pelaaja2.tornit.Count; i++)
422        {
423            if (pelaaja2.tornit[i] == osuja)
424            {
425                ammus.Destroy();
426
427                Add(luoRajahdys(ammus.X, ammus.Y, 30));
428
429                ammukset.Remove(ammus2);
430
431                pelaaja2.tornit[i].elamat.Value -= 1;
432
433                if (pelaaja2.tornit[i].elamat <= 0)
434                {
435                    Add(luoRajahdys(pelaaja2.tornit[i].X, pelaaja2.tornit[i].Y, 60));
436                   
437                    osuja.Destroy();
438                    pelaaja2.tornit.Remove(pelaaja2.tornit[i]); 
439                }
440
441                return;
442            }
443        }
444
445        if (osuja == asdin)
446        {
447            for (int i = 0; i < 10; i++)
448            {
449                bool randomtrue = RandomGen.NextBool();
450                double randomX = RandomGen.NextDouble(Level.Left, Level.Right);
451                double randomY = RandomGen.NextDouble(Level.Bottom, Level.Top);
452                Vector vektori = RandomGen.NextVector(0,0);
453
454                luoUusiAmmus(randomX, randomY, randomtrue, vektori);
455            } 
456        }
457
458       
459    }
460
461    public Explosion luoRajahdys(double x, double y, double sade)
462    {
463        Explosion rajahdys = new Explosion(sade);
464        rajahdys.X = x;
465        rajahdys.Y = y;
466        rajahdys.Force = 0;
467
468        return rajahdys;
469    }
470
471    public bool osuukoReunaan(Ammus ammus, PhysicsObject osuja)
472    {
473       
474        if (osuja == ylaraja)
475        {
476            ammus.Y = -ammus.Y + 11;
477            Vector nopeus = ammus.Velocity;
478            Timer.SingleShot(0.01, delegate { ammus.Velocity = nopeus; });
479
480            return true;
481
482        }
483
484        if (osuja == alaraja)
485        {
486            ammus.Y = -ammus.Y - 11;
487            Vector nopeus = ammus.Velocity;
488            Timer.SingleShot(0.01, delegate { ammus.Velocity = nopeus; });
489
490            return true;
491        }
492
493        if (osuja == oikearaja)
494        {
495            ammus.Destroy();
496            ammukset.Remove(ammus);
497
498            return true;
499
500        }
501
502        if (osuja == vasenraja)
503        {
504            ammus.Destroy();
505            ammukset.Remove(ammus);
506
507            return true;
508        }
509
510        return false;
511    }
512
513    //Ammuksen käsittely loppuu
514
515    //Magneettisuuden vaihto alkaa
516
517    public void vaihdaMagneettisuus(Pelaaja pelaaja)
518    {
519        if (pelaaja.magneetinVari)
520            {
521                pelaaja.magneetinVari = false;
522                pelaaja.Image = LoadImage("Peliukko_sininen_1");
523            }
524        else
525            {
526                pelaaja.magneetinVari = true;
527                pelaaja.Image = LoadImage("Peliukko_punainen_01");
528            }
529
530
531    }
532
533    //Magneettisuuden vaihto loppuu
534
535    //Tornilogiikka alkaa
536
537    public void luoTorni(Pelaaja pelaaja)
538    {
539        if (pelaaja.tornit.Count != 0)
540        {
541            for (int i = 0; i < pelaaja.tornit.Count; i++)
542            {
543                if ((pelaaja.Position - pelaaja.tornit[i].Position).Magnitude < 40)
544                {
545                    return;
546                }
547            }
548        }
549
550        if (pelaaja.tornit.Count < 5)
551        {
552            Image annettava;
553
554            if (!pelaaja.magneetinVari)
555            {
556                annettava = sininenMagneettitorni;
557            }
558            else
559            {
560                annettava = punainenMagneettitorni;
561            }
562            Add(pelaaja.lisaaMagneettitorni(annettava),-1);
563        }
564
565    }
566
567    //Tornilogiikka loppuu
568
569    //Peli päivitys alkaa
570
571    protected override void Update(Time time)
572    {
573        base.Update(time);
574        if (peliPaalla)
575        {
576            tarkistaMagneetit();
577            pelaajienTarkistus();
578        }
579       
580    }
581
582    public void tarkistaMagneetit()
583    {
584       
585        for (int i = 0; i < ammukset.Count-1; i++)
586        {
587            for (int j = 1 + i; j < ammukset.Count; j++)
588            {
589                Vector voima = luoMagneettivektori(ammukset[i], ammukset[j]);
590                Vector vastavoima = voima * -1;
591
592                ammukset[i].Velocity = ammukset[i].Velocity + voima;
593                ammukset[j].Velocity = ammukset[j].Velocity + vastavoima;
594
595                ammukset[i].Angle = ammukset[i].Velocity.Angle + Angle.FromDegrees(-90);
596                ammukset[j].Angle = ammukset[j].Velocity.Angle + Angle.FromDegrees(-90);
597            }
598        }
599
600        for (int i = 0; i < pelaaja1.tornit.Count; i++)
601        {
602            for (int j = 0; j < ammukset.Count; j++)
603            {
604                Ammus ammus = ammukset[j];
605               
606                Vector voima = luoMagneettivektori(ammukset[j],pelaaja1.tornit[i]);
607
608                ammus.Velocity = ammus.Velocity + voima;
609            }
610        }
611
612        for (int i = 0; i < pelaaja2.tornit.Count; i++)
613        {
614            for (int j = 0; j < ammukset.Count; j++)
615            {
616                Vector voima = luoMagneettivektori(ammukset[j], pelaaja2.tornit[i]);
617
618                ammukset[j].Velocity = ammukset[j].Velocity + voima;
619            }
620        }
621    }
622
623    public Vector luoMagneettivektori(Magneettisuus kohde1, Magneettisuus kohde2)
624    {
625        Vector palautettava = new Vector(kohde1.GetX()-kohde2.GetX(), kohde1.GetY()-kohde2.GetY());
626        palautettava=palautettava.Normalize();
627
628        double etaisyys = Math.Sqrt((kohde1.GetX() - kohde2.GetX())*(kohde1.GetX() - kohde2.GetX())+(kohde1.GetY() - kohde2.GetY())*(kohde1.GetY() - kohde2.GetY()));
629
630        palautettava = (palautettava * kohde1.MagneetinVahvuus*kohde2.MagneetinVahvuus) / (etaisyys*etaisyys);
631
632        if (!((kohde1.Magneettisuus && kohde2.Magneettisuus) || (!kohde1.Magneettisuus && !kohde2.Magneettisuus)))
633        {
634            palautettava = palautettava * -1;
635        }
636
637        return palautettava;
638    }
639
640    public void pelaajienTarkistus()
641    {
642        tarkistaPelaaja(pelaaja2);
643        tarkistaPelaaja(pelaaja1);
644    }
645
646    public void tarkistaPelaaja(Pelaaja pelaaja)
647    {
648        if (pelaaja.X < Level.Left + 25)
649        {
650            pelaaja.X = Level.Left + 25;
651            asetaPelaajanSuuntaJaNopeus(pelaaja, Vector.Zero);
652        }
653        else if(pelaaja.X>Level.Right - 25)
654        {
655            pelaaja.X = Level.Right - 25;
656            asetaPelaajanSuuntaJaNopeus(pelaaja, Vector.Zero);
657        }
658
659        if (pelaaja.Y > Level.Top - 25)
660        {
661            pelaaja.Y = Level.Top - 25;
662            asetaPelaajanSuuntaJaNopeus(pelaaja, Vector.Zero);
663        }
664        else if (pelaaja.Y < Level.Bottom + 25)
665        {
666            pelaaja.Y = Level.Bottom + 25;
667            asetaPelaajanSuuntaJaNopeus(pelaaja, Vector.Zero);
668        }
669
670        if (pelaaja.X < 225 && pelaaja.X > -225)
671        {
672            if (pelaaja.X < 0)
673            {
674                pelaaja.X = -225;
675                asetaPelaajanSuuntaJaNopeus(pelaaja, Vector.Zero);
676            }
677            else
678            {
679                pelaaja.X = 225;
680                asetaPelaajanSuuntaJaNopeus(pelaaja, Vector.Zero);
681            }
682        }
683
684        if (pelaaja.Y < -350 && pelaaja.X > 400 || pelaaja.X < -400) 
685        {
686            asd = true;
687        }
688    }
689
690    public void asding()
691    {
692        if (asd&&asdin==null&&(pelaaja1.Y<-350||pelaaja2.Y<-350))
693        {
694            PhysicsObject asding = new PhysicsObject(100, 100);
695            asding.Velocity = pelaaja1.Velocity;
696            asding.Image = LoadImage("Peliukko(variton)_1");
697            Add(asding);
698
699            PlaySound("EasterEgg");
700
701            this.asdin = asding;
702        }
703    }
704
705    //Päivitys loppuu
706
707    //Pelin lopetus
708
709    public void pelinLoppu(Pelaaja pelaaja)
710    {
711
712        Pelaaja ilmoitettava;
713       
714        if(pelaaja==pelaaja1)
715        {
716            ilmoitettava=pelaaja2;
717        }
718        else
719        {
720            ilmoitettava=pelaaja1;
721        }
722
723        ClearAll();
724
725        Level.BackgroundColor = Color.Blue;
726       
727        Label voittajanilmoitus = luoTekstillinenLabel(Color.White,"Pelaaja "+ilmoitettava.pelaajanNumero+" voitti pelin!");
728        voittajanilmoitus.X = 0;
729        voittajanilmoitus.Y = 0;
730
731        Add(voittajanilmoitus);
732
733        Timer.SingleShot(2.5, delegate { uudelleenkaynnistaPeli(); });
734
735        PlaySound("Voitto");
736    }
737
738}
739
740public interface Magneettisuus
741{
742    bool Magneettisuus { get; }
743    double MagneetinVahvuus { get; }
744    double GetX();
745    double GetY();
746}
747
748public class Ammus : PhysicsObject, Magneettisuus
749{
750   
751    private bool magneettisuus;
752    public bool Magneettisuus { get { return magneettisuus; } }
753
754    private double magneetinVahvuus;
755    public double MagneetinVahvuus { get { return magneetinVahvuus; } }
756
757    public Ammus(bool magneettisuus, double x, double y)
758    :base(20,20)
759    {
760        this.magneettisuus = magneettisuus;
761        this.magneetinVahvuus = 200;
762
763        if (magneettisuus == true)
764        {
765            base.Color = Color.Red;
766        }
767        else
768        {
769            base.Color = Color.Blue;
770        }
771
772        base.Shape = Shape.Circle;
773        base.X = x;
774        base.Y = y;
775
776       }
777
778    public double GetY()
779    {
780        return base.Y;
781    }
782
783    public double GetX()
784    {
785        return base.X;
786    }
787}
788
789public class Magneettitorni:PhysicsObject, Magneettisuus
790{
791    public IntMeter elamat;
792   
793    private bool magneettisuus;
794    public bool Magneettisuus{get{return magneettisuus;}}
795
796    private double magneetinVahvuus;
797    public double MagneetinVahvuus{get{return magneetinVahvuus;}}
798
799    public Magneettitorni(bool magneettisuus, double x, double y, Image kuva)
800        :base(30,30)
801    {
802        this.magneettisuus = magneettisuus;
803        this.magneetinVahvuus = 300;
804
805        base.IgnoresPhysicsLogics = true;
806        base.IgnoresCollisionResponse = true;
807        base.Shape = Shape.Circle;
808        base.X = x;
809        base.Y = y;
810
811        base.Image = kuva;
812
813        elamat = new IntMeter(3);
814    }
815
816    public double GetX()
817    {
818        return base.X;
819    }
820
821    public double GetY()
822    {
823        return base.Y;
824    }
825
826}
827
828public class Pelaaja : PhysicsObject
829{
830    public bool magneetinVari;
831    public Vector ammustenSuunta;
832    public int pelaajanNumero;
833
834    public List<Magneettitorni> tornit;
835   
836    public Pelaaja(double x, double y, Vector ammustenSuunta, int pelaaja)
837        :base(50,50)
838    {
839        magneetinVari = false;
840        this.ammustenSuunta = ammustenSuunta;
841        pelaajanNumero = pelaaja;
842
843        tornit = new List<Magneettitorni>();
844
845        base.X = x;
846        base.Y = y;
847        base.Color = Color.White;
848        base.Shape = Shape.Circle;
849        base.IgnoresCollisionResponse = true;
850        base.IgnoresPhysicsLogics = true;
851    }
852
853    public Magneettitorni lisaaMagneettitorni(Image kuva)
854    {
855        Magneettitorni torni = new Magneettitorni(magneetinVari, base.X, base.Y, kuva);
856
857        tornit.Add(torni);
858
859        return torni;
860    }
861}
Note: See TracBrowser for help on using the repository browser.