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

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