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

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