source: 2014/24/AtteJ/Räiskintä-mättöpeli/Räiskintä-mättöpeli/Räiskintä-mättöpeli/Räiskintä_mättöpeli.cs @ 5015

Revision 5015, 24.4 KB checked in by atjokine, 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 Räiskintä_mättöpeli : PhysicsGame
10{
11    public static Räiskintä_mättöpeli Peli;
12
13    Vector liikuYlös = new Vector(0.0, 250.0);
14    Pelaaja[] pelaajat;
15
16    List<AmpuvaVihu> vihollisetv2 = new List<AmpuvaVihu>();
17    List<PhysicsObject> viholliset = new List<PhysicsObject>();
18
19    public IntMeter vihollisiaJaljella;
20    public IntMeter vihollisiaTuhottu;
21
22    bool skilli = true;
23    public static bool PeliLoppui = false;
24
25    Timer ajastin;
26    IntMeter kierrosLaskuri;
27    ScoreList TopLista = new ScoreList(10, false, 0);
28    IntMeter sekuntejaSkilliin;
29    Image Miina = LoadImage("Miina");
30
31    Label KierrosNaytto;
32    Label pistenaytto;
33
34
35    int vihollisiaV1 = 10;
36    int vihollisiaV2 = 0;
37    int vihollisiaV3 = 0;
38    int pelimuoto = 1; // yksi on yksinpeli, kaksi kaksinpeli
39
40
41    Elava vihollinen(double elamat, Color Väri, String Tag, double speed)
42    {
43        // Aivot, jotka seuraavat pelaajaa
44        FollowerBrain SeuraajanAivot = new FollowerBrain("pelaaja");
45        SeuraajanAivot.Speed = speed;
46
47        // Vihollisen luominen
48        Elava enemy = new Elava(30, 30, elamat);
49        enemy.Brain = SeuraajanAivot;
50        enemy.X = Level.Right - 30;
51        enemy.Y = RandomGen.NextDouble(Level.Bottom + 30, Level.Top - 30);
52        enemy.Shape = Shape.Circle;
53        enemy.Color = Väri;
54        enemy.Tag = Tag;
55        enemy.CollisionIgnoreGroup = 1;
56        viholliset.Add(enemy);
57        Add(enemy);
58
59        // Vihollisen kuoleminen
60        enemy.Elamat.LowerLimit += delegate
61        {
62            enemy.Destroy();
63            vihollisiaTuhottu.Value++;
64            vihollisiaJaljella.Value--;
65        };
66
67        enemy.Destroyed += delegate { viholliset.Remove(enemy); };
68
69        return enemy;
70    }
71
72    AmpuvaVihu vihollinenV2(double x, double y)
73    {
74        // Aivot, jotka seuraavat pelaajaa
75        FollowerBrain SeuraajanAivot = new FollowerBrain("pelaaja");
76        SeuraajanAivot.Speed = 200;
77
78        // Vihollisen luominen
79        AmpuvaVihu enemyV2 = new AmpuvaVihu(30, 30, 2, 3);
80        if (pelimuoto == 1) enemyV2.Kohde = pelaajat[0];
81        else enemyV2.Kohde = pelaajat[RandomGen.NextInt(2)];
82        enemyV2.Brain = SeuraajanAivot;
83        enemyV2.X = Level.Right - 30;
84        enemyV2.Y = RandomGen.NextDouble(Level.Bottom + 30, Level.Top - 30);
85        enemyV2.Shape = Shape.Circle;
86        enemyV2.Color = Color.Yellow;
87        enemyV2.Tag = "vihollinenV2";
88        vihollisetv2.Add(enemyV2);
89        enemyV2.Ase.ProjectileCollision = LuotiOsuuPelaajaan;
90        enemyV2.CollisionIgnoreGroup = 1;
91        Add(enemyV2);
92
93        // Vihollisen kuoleminen
94        enemyV2.Elamat.LowerLimit += delegate
95        {
96            enemyV2.Destroy();
97            vihollisiaTuhottu.Value++;
98            vihollisiaJaljella.Value--;
99        };
100
101        // Vihollisen ampuminen
102        vihollisenAmpuminen();
103
104        enemyV2.Destroyed += delegate
105        {
106            vihollisetv2.Remove(enemyV2);
107            enemyV2.Ase.Destroy();
108        };
109        return enemyV2;
110    }
111
112    public override void Begin()
113    {
114        ClearAll();
115        Peli = this;
116        Mouse.Enabled = false;
117        Mouse.IsCursorVisible = false;
118
119        MediaPlayer.Play("Wolves");
120
121        MultiSelectWindow AlkuValikko = new MultiSelectWindow("Tervetuloa peliin",
122            "Aloita", "Ohje", "Ohjaimet", "Poistu");
123        AlkuValikko.ItemSelected += PainettiinValikonNappia;
124        AlkuValikko.Color = Color.Black;
125        AlkuValikko.SelectionColor = Color.White;
126        AlkuValikko.SetButtonTextColor(Color.Black);
127
128        Level.Background.CreateStars();
129        Add(AlkuValikko);
130    }
131
132    void PainettiinValikonNappia(int valinta)
133    {
134        switch (valinta)
135        {
136            case 0:
137                //aloita peli
138                YksinVaiKaksinPeli();
139                break;
140            case 1:
141                //miten peliä pelataan
142                Ohje();
143                break;
144            case 2:
145                // Ohjainten ohjeet
146                Ohjaimet();
147                break;
148            case 3:
149                Exit();
150                break;
151        }
152    }
153
154    void YksinVaiKaksinPeli()
155    {
156        MultiSelectWindow PelaajienMaara = new MultiSelectWindow("Yksin- vai kaksinpeli?",
157            "Yksinpeli", "Kaksinpeli", "Takaisin");
158        PelaajienMaara.ItemSelected += PainettiinValikon2Nappia;
159        PelaajienMaara.Color = Color.Black;
160        PelaajienMaara.SelectionColor = Color.White;
161        PelaajienMaara.SetButtonTextColor(Color.Black);
162        Add(PelaajienMaara);
163    }
164
165    void PainettiinValikon2Nappia(int valinta2)
166    {
167        switch (valinta2)
168        {
169            case 0:
170                AlustaPeli();// Yksinpeli
171                this.pelimuoto = 1;
172                break;
173            case 1:
174                AlustaPeli2(); // Kaksinpeli
175                this.pelimuoto = 2;
176                break;
177            case 2:
178                Begin();
179                break;
180        }
181    }
182
183    void AlustaPeli()
184    {
185        MediaPlayer.Stop();
186        MediaPlayer.Play("GHOST");
187
188        LuoKenttä();
189        pelaajat = new Pelaaja[2];
190        skilli = true;
191        Pelaaja(Color.Blue, -400, -30, 1, new Vector(Level.Left + 270, Level.Top - 40));
192        LisääOhjaimet();
193        LuoKierrosLaskuri();
194        LuoSkillinAjastin();
195
196        if (DataStorage.Exists("pisteet.xml"))
197            TopLista = DataStorage.Load<ScoreList>(TopLista, "pisteet.xml");
198    }
199
200    void AlustaPeli2()
201    {
202        MediaPlayer.Stop();
203
204        LuoKenttä();
205        pelaajat = new Pelaaja[2];
206        Pelaaja(Color.Blue, -400, -30, 1, new Vector(Level.Right - 270, Level.Top - 75));
207        Pelaaja(Color.DarkBlue, -400, 30, 2, new Vector(Level.Left + 270, Level.Top - 75));
208        LisääOhjaimet();
209        LisääOhjaimet2();
210        LuoKierrosLaskuri();
211        LuoSkillinAjastin();
212
213        if (DataStorage.Exists("pisteet.xml"))
214            TopLista = DataStorage.Load<ScoreList>(TopLista, "pisteet.xml");
215
216        Label P1 = new Label("P1");
217        P1.X = Level.Left + 270;
218        P1.Y = Level.Top - 40;
219        P1.TextColor = Color.White;
220        P1.Color = Color.Transparent;
221        Add(P1);
222
223        Label P2 = new Label("P2");
224        P2.X = Level.Right - 270;
225        P2.Y = Level.Top - 40;
226        P2.TextColor = Color.White;
227        P2.Color = Color.Transparent;
228        Add(P2);
229
230    }
231
232    void Ohje()
233    {
234
235        MessageWindow Ohje = new MessageWindow("Kierroksilla 1-5 vastaan tulee vain vihollisia jotka kuolevat yhdestä iskusta. Tasosta viisi eteenpäin    \nvastaan tulee myös vihollisia,         \njotka kuolevat 2 osumasta. Ta-         \nsolla 10 tulee 3:n osuman vi-         \nhollisia.");
236        Ohje.OKButton.Text = "Takaisin";
237        Ohje.Color = Color.Transparent;
238        Ohje.Message.TextColor = Color.White;
239        Ohje.OKButton.Color = Color.Transparent;
240        Ohje.OKButton.TextColor = Color.Transparent;
241        Ohje.Closed += delegate { Begin(); };
242        Add(Ohje);
243
244    }
245
246    void Ohjaimet()
247    {
248
249        MessageWindow Ohjaimet = new MessageWindow(
250            "Pelaaja 1:\nNuolinäppäimet = Liik-                   \nkuminen\nL-nappi =                 \nampuminen\nOikea Shift-               \nnappi = Aseen vaihta-         \nminen\n\nPelaaja 2:\nWASD = liikku-              \nminen\nG-nappi = ampumi-         \nnen\nVasen Shift-nappi =               \nAseen vaihtaminen       ");
251        Ohjaimet.OKButton.Text = "Takaisin";
252        Ohjaimet.Color = Color.Transparent;
253        Ohjaimet.Message.TextColor = Color.White;
254        Ohjaimet.OKButton.Color = Color.Transparent;
255        Ohjaimet.OKButton.TextColor = Color.Transparent;
256        Ohjaimet.Closed += delegate { Begin(); };
257        Add(Ohjaimet);
258    }
259
260    void LuoKenttä()
261    {
262        Level.Size = Screen.Size;
263        Level.CreateBorders(false);
264        Camera.ZoomToLevel();
265
266        vihollisiaJaljella = new IntMeter(0, 0, int.MaxValue);
267        vihollisiaTuhottu = new IntMeter(0);
268        vihollisiaJaljella.LowerLimit += delegate { KaikkiVihollisetTuhottu(); kierrosLaskuri.Value += 1; };
269
270        pistenaytto = new Label();
271        pistenaytto.X = 200;
272        pistenaytto.Y = Screen.Top - 40;
273        pistenaytto.BindTo(vihollisiaTuhottu);
274        pistenaytto.Title = "Vihollisia tuhottu";
275        pistenaytto.TextColor = Color.White;
276        pistenaytto.Color = Color.Transparent;
277        Add(pistenaytto);
278
279        int u = 0;
280        while (u < 10)
281        {
282            vihollinen(1, Color.Green, "vihollinenV1", 150);
283            vihollisiaJaljella.Value++;
284            u++;
285        }
286
287    }
288
289    void LuoKierrosLaskuri()
290    {
291        kierrosLaskuri = new IntMeter(1);
292        KierrosNaytto = new Label();
293        KierrosNaytto.X = 0;
294        KierrosNaytto.Y = Level.Top - 40;
295        KierrosNaytto.TextColor = Color.White;
296        KierrosNaytto.Color = Color.Transparent;
297        KierrosNaytto.Title = "Kierros";
298        KierrosNaytto.BindTo(kierrosLaskuri);
299        Add(KierrosNaytto);
300    }
301
302    void Pelaaja(Color Väri, double x, double y, int numero, Vector elamaPalkinSijainti)
303    {
304        Pelaaja pelaaja = new Pelaaja(30, 30, 100, elamaPalkinSijainti, numero);
305        pelaaja.Shape = Shape.Circle;
306        pelaaja.Color = Väri;
307        pelaaja.X = x;
308        pelaaja.Y = y;
309        pelaaja.Tag = "pelaaja";
310        Add(pelaaja);
311        pelaaja.LinearDamping = 0.9;
312        pelaaja.Restitution = 0.0;
313        pelaaja.CanRotate = false;
314        pelaaja.IgnoresExplosions = true;
315        pelaaja.Elamat.LowerLimit += delegate { PelaajaKuoli(pelaaja); };
316
317
318        // Pelaaja törmää viholliseen 1
319        AddCollisionHandler(pelaaja, "vihollinenV1", CollisionHandler.AddMeterValue(pelaaja.Elamat, -10));
320        AddCollisionHandler(pelaaja, "vihollinenV1", CollisionHandler.DestroyTarget);
321        AddCollisionHandler(pelaaja, "vihollinenV1", CollisionHandler.AddMeterValue(vihollisiaTuhottu, 1));
322        AddCollisionHandler(pelaaja, "vihollinenV1", CollisionHandler.AddMeterValue(vihollisiaJaljella, -1));
323
324        // Pelaaja törmää viholliseen 2
325        AddCollisionHandler(pelaaja, "vihollinenV2", CollisionHandler.AddMeterValue(pelaaja.Elamat, -20));
326        AddCollisionHandler(pelaaja, "vihollinenV2", CollisionHandler.DestroyTarget);
327        AddCollisionHandler(pelaaja, "vihollinenV2", CollisionHandler.AddMeterValue(vihollisiaTuhottu, 1));
328        AddCollisionHandler(pelaaja, "vihollinenV2", CollisionHandler.AddMeterValue(vihollisiaJaljella, -1));
329
330        // Pelaaja törmää viholliseen 3
331        AddCollisionHandler(pelaaja, "vihollinenV3", CollisionHandler.AddMeterValue(pelaaja.Elamat, -30));
332        AddCollisionHandler(pelaaja, "vihollinenV3", CollisionHandler.DestroyTarget);
333        AddCollisionHandler(pelaaja, "vihollinenV3", CollisionHandler.AddMeterValue(vihollisiaTuhottu, 1));
334        AddCollisionHandler(pelaaja, "vihollinenV3", CollisionHandler.AddMeterValue(vihollisiaJaljella, -1));
335
336        numero--;
337        if (numero >= 0 && numero < pelaajat.Length)
338        {
339            pelaajat[numero] = pelaaja;
340
341        }
342        LuoAseet(numero);
343        pelaaja.Ase = pelaaja.Aseet[0];
344        pelaaja.Add(pelaaja.Ase);
345    }
346
347    void PelaajanSkilli(int pelaaja)
348    {
349        if (skilli == false) return;
350
351        Explosion rajahdys = new Explosion(200);
352        rajahdys.Position = pelaajat[pelaaja].Position;
353        Add(rajahdys, -1);
354
355        rajahdys.Force = 100;
356        rajahdys.ShockwaveReachesObject += delegate(IPhysicsObject kohde, Vector shokki)
357        {
358            if (kohde.Tag.ToString().StartsWith("vihollinen"))
359            {
360                Elava k = kohde as Elava;
361
362                if (kohde != null)
363                    k.Elamat.Value = 0;
364            }
365
366        };
367
368        ajastin.Reset();
369        KaynnistaAjastin();
370        skilli = false;
371    }
372
373    void LuoSkillinAjastin()
374    {
375
376        sekuntejaSkilliin = new IntMeter(0, 0, 10);
377        sekuntejaSkilliin.LowerLimit += delegate
378        {
379            skilli = true;
380            ajastin.Stop();
381        };
382
383        ajastin = new Timer();
384        ajastin.Interval = 1;
385        ajastin.Timeout += delegate
386        {
387            sekuntejaSkilliin.Value--;
388        };
389
390        Label SkilliNaytto = new Label();
391        SkilliNaytto.TextColor = Color.White;
392        SkilliNaytto.Color = Color.Transparent;
393        SkilliNaytto.DecimalPlaces = 1;
394        SkilliNaytto.X = -220;
395        SkilliNaytto.Y = Level.Top - 40;
396        SkilliNaytto.Title = "Skilli käytettävissä ajassa";
397        SkilliNaytto.BindTo(sekuntejaSkilliin);
398        Add(SkilliNaytto);
399    }
400
401    void KaynnistaAjastin()
402    {
403        ajastin.Start();
404        sekuntejaSkilliin.Value = sekuntejaSkilliin.MaxValue;
405    }
406
407    void LisääOhjaimet()
408    {
409
410        Keyboard.Listen(Key.Left, ButtonState.Down, LiikutaPelaajaa, null, new Vector(-5000, 0), pelaajat[0]);
411        Keyboard.Listen(Key.Right, ButtonState.Down, LiikutaPelaajaa, null, new Vector(5000, 0), pelaajat[0]);
412        Keyboard.Listen(Key.Up, ButtonState.Down, LiikutaPelaajaa, null, new Vector(0, 5000), pelaajat[0]);
413        Keyboard.Listen(Key.Down, ButtonState.Down, LiikutaPelaajaa, null, new Vector(0, -5000), pelaajat[0]);
414        Keyboard.Listen(Key.L, ButtonState.Down, Ampuminen, "ammu", pelaajat[0]);
415        Keyboard.Listen(Key.RightShift, ButtonState.Pressed, AseenVaihtaminen, null, 0);
416        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Pausevalikko, null);
417        Keyboard.Listen(Key.Space, ButtonState.Pressed, PelaajanSkilli, null, 0);
418
419    }
420
421    void LisääOhjaimet2()
422    {
423
424        Keyboard.Listen(Key.A, ButtonState.Down, LiikutaPelaajaa, null, new Vector(-5000, 0), pelaajat[1]);
425        Keyboard.Listen(Key.D, ButtonState.Down, LiikutaPelaajaa, null, new Vector(5000, 0), pelaajat[1]);
426        Keyboard.Listen(Key.W, ButtonState.Down, LiikutaPelaajaa, null, new Vector(0, 5000), pelaajat[1]);
427        Keyboard.Listen(Key.S, ButtonState.Down, LiikutaPelaajaa, null, new Vector(0, -5000), pelaajat[1]);
428        Keyboard.Listen(Key.G, ButtonState.Down, Ampuminen, "ammu", pelaajat[1]);
429        Keyboard.Listen(Key.LeftShift, ButtonState.Pressed, AseenVaihtaminen, null, 1);
430        Keyboard.Listen(Key.F, ButtonState.Pressed, PelaajanSkilli, null, 1);
431
432    }
433
434    void Pausevalikko()
435    {
436        IsPaused = true;
437
438        MultiSelectWindow pause = new MultiSelectWindow("Peli on pausella.", "Jatka", "Päävalikko", "Poistu");
439        pause.ItemSelected += PainettiinPausenappia;
440        pause.Color = Color.Black;
441        pause.SetButtonTextColor(Color.Black);
442        pause.SelectionColor = Color.White;
443        Add(pause);
444    }
445
446    void PainettiinPausenappia(int pausevalinta)
447    {
448        switch (pausevalinta)
449        {
450            case 0:
451                Pause();
452                break;
453
454            case 1:
455                IsPaused = false;
456                Begin();
457                break;
458
459            case 2:
460                Exit();
461                break;
462        }
463    }
464
465    void LiikutaPelaajaa(Vector vektori, PhysicsObject pelaaja)
466    {
467        pelaaja.Push(vektori);
468    }
469
470    Ase LuoAse(double tulinopeus, double voima, string tag, double damage, double rajahdyksenKoko)
471    {
472        Ase pyssy = new Ase(20, 5);
473        pyssy.InfiniteAmmo = true;
474        pyssy.IsVisible = false;
475        pyssy.Power.Value = voima;
476        pyssy.Power.DefaultValue = voima;
477        pyssy.Tag = tag;
478        pyssy.FireRate = tulinopeus;
479        pyssy.Damage = damage;
480        pyssy.ExplosionSize = rajahdyksenKoko;
481        pyssy.AttackSound = null;
482        return pyssy;
483    }
484
485    void LuoAseet(int pelaaja)
486    {
487        //Tässä voi lisätä aseita
488        pelaajat[pelaaja].Aseet.Add(LuoAse(5, 500, "rynnäkkökivääri", 1, 0));
489        pelaajat[pelaaja].Aseet.Add(LuoAse(1, 500, "Pistooli", 2, 0));
490        pelaajat[pelaaja].Aseet.Add(LuoAse(0.4, 0, "Miina", 3, 100));
491    }
492
493    void AseenVaihtaminen(int pelaaja)
494    {
495        int i = pelaajat[pelaaja].Aseet.IndexOf(pelaajat[pelaaja].Ase);
496
497        // Valitsee seuraavan aseen
498        if (i < pelaajat[pelaaja].Aseet.Count - 1)
499            pelaajat[pelaaja].Ase = pelaajat[pelaaja].Aseet[i + 1];
500        else
501            pelaajat[pelaaja].Ase = pelaajat[pelaaja].Aseet[0];
502        pelaajat[pelaaja].Add(pelaajat[pelaaja].Ase);
503        MessageDisplay.Add("Pelaajan " + (pelaaja + 1) + " ase:" + pelaajat[pelaaja].Ase.Tag.ToString());
504    }
505
506    void vihollisenAmpuminen()
507    {
508        for (int i = 0; i < vihollisetv2.Count; i++)
509        {
510            if (vihollisetv2[i].IsDestroyed) continue;
511            Angle kulma = new Angle();
512            if (pelimuoto == 1)
513            {
514                kulma = (vihollisetv2[i].AbsolutePosition - pelaajat[0].AbsolutePosition).Angle;
515            }
516
517            if (pelimuoto == 2)
518            {
519                kulma = (vihollisetv2[i].AbsolutePosition - pelaajat[RandomGen.NextInt(2)].AbsolutePosition).Angle;
520            }
521
522            vihollisetv2[i].Ase.Angle = kulma + Angle.FromDegrees(180);
523
524            PhysicsObject ammus = vihollisetv2[i].Ase.Shoot();
525            if (ammus != null)
526            {
527                AddCollisionHandler(ammus, VihollisenAmmusOsuu);
528                ammus.CollisionIgnoreGroup = 1;
529            }
530        }
531    }
532
533    void VihollisenAmmusOsuu(PhysicsObject ammus, PhysicsObject kohde)
534    {
535        if (kohde.Tag.ToString().StartsWith("vihollinen"))
536            ammus.Destroy();
537    }
538
539    public void LuotiOsuuPelaajaan(PhysicsObject ammus, PhysicsObject kohde)
540    {
541        Pelaaja p = kohde as Pelaaja;
542        ammus.Destroy();
543        if (p != null)
544            p.Elamat.Value -= 10;
545    }
546
547    void Ampuminen(Pelaaja pelaaja)
548    {
549        PhysicsObject panos = pelaaja.Ase.Shoot();
550
551        if (panos == null)
552        {
553            return;
554        }
555
556        panos.Tag = new AmmoData(pelaaja.Ase.Damage, pelaaja.Ase.ExplosionSize);
557
558        AddCollisionHandler(panos, delegate(PhysicsObject ammus, PhysicsObject kohde)
559        {
560            AmmoData data = (AmmoData)ammus.Tag;
561            LuotiOsuuViholliseen(ammus, kohde, data.Damage, data.ExplosionSize);
562
563        });
564        panos.Width *= 2;
565        panos.X = pelaaja.X + 30;
566
567        if (pelaaja.Ase.Tag.ToString() == "Miina")
568        {
569            panos.Image = Miina;
570            panos.Size = new Vector(30, 30);
571        }
572
573    }
574
575    void LuotiOsuuViholliseen(PhysicsObject ammus, PhysicsObject kohde, double damage, double sade)
576    {
577        ammus.Destroy();
578        Explosion rajahdys = new Explosion(sade);
579        rajahdys.Force = 1;
580        rajahdys.Position = ammus.Position;
581        rajahdys.Speed = 1000;
582        rajahdys.Sound = null;
583        rajahdys.ShockwaveReachesObject += delegate(IPhysicsObject k, Vector shokki)
584        {
585            if (kohde.Tag.ToString().StartsWith("vihollinen"))
586            {
587                Elava elava = k as Elava;
588
589                if (elava != null)
590                    elava.Elamat.Value = 0;
591            }
592        };
593
594        // Vihollinen menettää elämän
595        Elava vihu = kohde as Elava;
596        if (vihu != null)
597        { vihu.Elamat.Value -= damage; }
598
599        Add(rajahdys);
600    }
601
602    public void VihollinenOsuuPelaajaan(PhysicsObject pelaaja, PhysicsObject enemy)
603    {
604        Pelaaja Pelaaja = (Pelaaja)pelaaja;
605
606        if (Pelaaja.Elamat.Value <= 0)
607        {
608            PelaajaKuoli(Pelaaja);
609        }
610
611    }
612
613    void KaikkiVihollisetTuhottu()
614    {
615        MessageDisplay.Add("Viholliset tuhottu!");
616        Timer.SingleShot(1.5, LisaaVihollisia);
617    }
618
619    void LisaaVihollisia()
620    {
621        // Perusviholliset
622        vihollisiaV1 = vihollisiaV1 + 30;
623
624        int i = 0;
625        while (i < vihollisiaV1)
626        {
627            vihollinen(1, Color.Green, "vihollinenV1", 150);
628            vihollisiaJaljella.Value++;
629            i++;
630        }
631
632        // Keltaiset, ampuvat viholliset
633        if (kierrosLaskuri.Value >= 4)
634        {
635            vihollisiaV2 = vihollisiaV2 + 20;
636            int e = 0;
637            while (e < vihollisiaV2)
638            {
639                vihollinenV2(30, 10);
640                vihollisiaJaljella.Value++;
641                e++;
642            }
643        }
644
645        //Punaiset viholliset
646        if (kierrosLaskuri.Value >= 9)
647        {
648            vihollisiaV3 = vihollisiaV3 + 10;
649            i = 0;
650            while (i < vihollisiaV3)
651            {
652                vihollinen(3, Color.Red, "vihollinenV3", 350);
653                vihollisiaJaljella.Value++;
654                i++;
655            }
656        }
657
658    }
659
660    void PelaajaKuoli(Pelaaja pelaaja)
661    {
662        Explosion rajahdys = new Explosion(100);
663        rajahdys.Position = pelaaja.Position;
664        rajahdys.Speed = 500.0;
665        rajahdys.Force = 10000;
666        Add(rajahdys);
667
668        pelaaja.Destroy();
669        int numero = pelaaja.Numero - 1;
670        pelaajat[numero].Destroy();
671
672        // Jos kaikki pelaajat ovat kuolleet, peli loppuu
673        if (pelimuoto == 1 || pelaajat[0].IsDestroying == true && pelaajat[1].IsDestroying == true)
674        {
675            HighScoreWindow();
676        }
677    }
678
679    void KumoaPaineaalto(IPhysicsObject pelaaja, Vector voima)
680    {
681        pelaaja.Hit(-voima);
682    }
683
684    void HighScoreWindow()
685    {
686        MediaPlayer.Stop();
687
688        KierrosNaytto.Destroy();
689        pistenaytto.Destroy();
690        PeliLoppui = true;
691        //Elamapalkki.Destroy();
692
693        Label tulos = new Label("Selvisit kierrokselle " + kierrosLaskuri + " tapoilla " + vihollisiaTuhottu + ". Onnittelut!");
694        tulos.Color = Color.White;
695        tulos.X = 0;
696        tulos.Y = 450;
697        Add(tulos);
698
699        HighScoreWindow topIkkuna = new HighScoreWindow("Parhaat pisteet", "Onneksi olkoon, pääsit listalle pisteillä %p! Syötä nimesi:", TopLista, vihollisiaTuhottu.Value);
700        topIkkuna.Closed += TallennaPisteet;
701        topIkkuna.X = 0;
702        topIkkuna.Y = 200;
703        topIkkuna.Color = Color.Transparent;
704        topIkkuna.List.PositionColor = Color.White;
705        topIkkuna.List.NameColor = Color.White;
706        topIkkuna.List.ScoreColor = Color.White;
707        topIkkuna.NameInputWindow.Color = Color.Transparent;
708        topIkkuna.NameInputWindow.TextEntered += delegate { Ok(); };
709        topIkkuna.NameInputWindow.InputBox.Cursor.Color = Color.Gray;
710        topIkkuna.NameInputWindow.InputBox.TextColor = Color.White;
711        topIkkuna.NameInputWindow.OKButton.Color = Color.White;
712        topIkkuna.NameInputWindow.OKButton.TextColor = Color.Black;
713        topIkkuna.OKButton.Destroy();
714        Add(topIkkuna);
715
716        if (topIkkuna.NameInputWindow.IsAddedToGame == false)
717        {
718            Ok();
719        }
720
721    }
722
723    void TallennaPisteet(Window sender)
724    {
725        DataStorage.Save<ScoreList>(TopLista, "pisteet.xml");
726        Exit();
727    }
728
729    void Ok()
730    {
731        MultiSelectWindow Ok = new MultiSelectWindow(
732"", "Ok");
733        Ok.ItemSelected += PainettiinValikon4Nappia;
734        Ok.Color = Color.Black;
735        Ok.SelectionColor = Color.White;
736        Ok.SetButtonTextColor(Color.Black);
737        Ok.X = 0;
738        Ok.Y = -200;
739        Add(Ok);
740    }
741
742    void PainettiinValikon4Nappia(int valinta3)
743    {
744        switch (valinta3)
745        {
746            case 0:
747                ClearAll();
748                Level.Background.CreateStars();
749                Uusiksi();
750                break;
751        }
752    }
753
754    void Uusiksi()
755    {
756        MultiSelectWindow PeliLoppui = new MultiSelectWindow("",
757               "Päävalikko", "Poistu");
758        PeliLoppui.ItemSelected += PainettiinValikon3Nappia;
759        PeliLoppui.Color = Color.Black;
760        PeliLoppui.SelectionColor = Color.White;
761        PeliLoppui.SetButtonTextColor(Color.Black);
762        PeliLoppui.X = 0;
763        PeliLoppui.Y = -200;
764        Add(PeliLoppui);
765    }
766
767    void PainettiinValikon3Nappia(int valinta4)
768    {
769        switch (valinta4)
770        {
771            case 0:
772                ClearAll();
773                Begin();
774                break;
775
776            case 1:
777                Exit();
778                break;
779        }
780    }
781
782}
Note: See TracBrowser for help on using the repository browser.