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

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