source: 2013/24/LauriK/Defend The Computer/Defend The Computer/Defend The Computer/Defend_The_Computer.cs @ 4115

Revision 4115, 48.2 KB checked in by sijoseha, 10 years ago (diff)

Talletus.

Line 
1#region Alustus ja luokat
2
3using System;
4using System.Collections.Generic;
5using Jypeli;
6using Jypeli.Assets;
7using Jypeli.Controls;
8using Jypeli.Effects;
9using Jypeli.Widgets;
10
11public class Pelaaja : PhysicsObject
12{
13    public DoubleMeter elamalaskuri;
14    public DoubleMeter suojalaskuri;
15    public DoubleMeter ammuslaskuri;
16    public Pelaaja(double leveys, double korkeus, Shape muoto, Color vari)
17        : base(leveys, korkeus)
18    {
19        this.Shape = muoto;
20        this.Color = vari;
21        this.Mass = 10;
22        this.LinearDamping = 0.3;
23        this.AngularDamping = 0.1;
24        //this.Position = paikka;
25        this.Color = Color.Green;
26        this.Tag = "Pelaaja";
27        this.KineticFriction = 0.7;
28        this.CollisionIgnoreGroup = 2;
29    }
30
31}
32
33public class Vihollinen : PhysicsObject
34{
35    private IntMeter Vihunelamat = new IntMeter(100, 0, 100);
36    public IntMeter vihunelamat { get { return Vihunelamat; } }
37    public string Vihuntyyppi;
38    public Vihollinen(double leveys, double korkeus, Image vihunkuva, string Vihuntyyppi)
39        : base(leveys, korkeus)
40    {
41        this.Image = vihunkuva;
42        this.Mass = 10;
43        this.LinearDamping = 0.3;
44        this.AngularDamping = 0.9;
45        vihunelamat.LowerLimit += delegate { this.Destroy(); };
46        this.Tag = "Vihu";
47        this.Vihuntyyppi = Vihuntyyppi;
48    }
49}
50
51public class Paketti : PhysicsObject
52{
53    public Paketti(double leveys, double korkeus)
54        : base(leveys, korkeus)
55    {
56        this.Mass = 10;
57        this.IgnoresExplosions = false;
58        this.IgnoresCollisionResponse = true;
59        this.MaximumLifetime = TimeSpan.FromSeconds(20);
60    }
61}
62
63public class Defend_The_Computer : PhysicsGame
64{
65    ScoreList pistelista;
66
67    IntMeter pistelaskuri;
68
69    GameObject aseenkuva1;
70
71    GameObject aseenkuva2;
72
73    ExplosionSystem hienorajahdys;
74    ExplosionSystem hienorajahdys2;
75
76    int pelaajienlukumaara2;
77
78    int pakettienlukumaara;
79
80    int vihujenmaara;
81
82    bool AJ;
83    bool NC;
84    bool noenemies;
85    bool nopackages;
86    bool Debug;
87
88    bool pelaaja1elossa;
89    bool pelaaja2elossa;
90
91    double nopeus;
92    double kaantymisnopeus;
93    [Save]
94    int survivalkentannro;
95    [Save]
96    int vaikeustaso;
97    [Save]
98    int pelaajienlukumaara;
99    [Save]
100    bool aanetpaalla;
101
102    string pelaaja1ase;
103    string pelaaja2ase;
104
105    Image Intta;
106    Image Inttapaha;
107    Image Egac;
108    Image Egacpaha;
109
110    Image bosskuva;
111    Image stopkuva;
112
113    Image seinankuva;
114
115    Image perusasekuvake;
116    Image antiviruskuvake;
117    Image kranaattikuvake;
118
119    Image ammopakettikuva;
120    Image healthpakettikuva;
121    Image suojakuva;
122
123    Image antiviruskuva;
124    Image kranaattikuva;
125
126    SoundEffect kuolemaaani;
127    SoundEffect suojaaani;
128    SoundEffect healthaani;
129    SoundEffect startaani;
130    SoundEffect aseaani;
131
132    Color tekstienvari;
133
134    List<Pelaaja> pelaajat;
135    List<Vihollinen> rajahdyksenuhrit;
136
137    Timer aikalaskuri;
138
139    double ruudunkoko;
140
141#endregion
142
143    public override void Begin()
144    {
145        Alustus();
146
147        IsFullScreen = false;
148
149        IsPaused = true;
150
151        Lataakaikki(false, 0, 0);
152
153        Alkuvalikko();
154    }
155
156    #region Tallennus, lataus ja alustus
157
158    void Alustus()
159    {
160        ClearAll();
161
162        pelaaja1ase = "Luoti";
163        pelaaja2ase = "Luoti";
164
165        rajahdyksenuhrit = new List<Vihollinen>();
166
167        pelaajat = new List<Pelaaja>();
168
169        pelaaja1elossa = true;
170        pelaaja2elossa = true;
171
172        vihujenmaara = 0;
173
174        AJ = false;
175        NC = false;
176        noenemies = false;
177        nopackages = false;
178        Debug = false;
179
180        nopeus = 250;
181        kaantymisnopeus = 50;
182
183        Intta = LoadImage("A-J");
184        Inttapaha = LoadImage("A-J_bad");
185        Egac = LoadImage("NC");
186        Egacpaha = LoadImage("NC_bad");
187
188        bosskuva = LoadImage("virus_cartoon");
189        stopkuva = LoadImage("process_stop");
190        seinankuva = LoadImage("seina");
191
192        perusasekuvake = LoadImage("perusasekuvake");
193        antiviruskuvake = LoadImage("antiviruskuvake");
194        kranaattikuvake = LoadImage("kranaattikuvake");
195
196        healthpakettikuva = LoadImage("healthpack");
197        suojakuva = LoadImage("suoja");
198        ammopakettikuva = LoadImage("ammopack");
199
200        antiviruskuva = LoadImage("antivirus");
201        kranaattikuva = LoadImage("kranaatti");
202
203        kuolemaaani = LoadSoundEffect("player_dead");
204        suojaaani = LoadSoundEffect("klang");
205        healthaani = LoadSoundEffect("health");
206        startaani = LoadSoundEffect("start");
207        aseaani = LoadSoundEffect("aseaani");
208
209        tekstienvari = Color.LightGreen;
210
211        ruudunkoko = 16;
212
213        pistelista = new ScoreList(10, false, 0);
214    }
215
216    void Tyhjennanappaimet()
217    {
218        ClearControls();
219    }
220
221    void Tallennakaikki()
222    {
223        SaveGame("Save.xml");
224    }
225
226    void TallennaLista()
227    {
228        DataStorage.Save<ScoreList>(pistelista, "Survival" + survivalkentannro + pelaajienlukumaara + ".xml");
229    }
230
231    void Lataakaikki(bool kentta, int kenttanro, int players)
232    {
233        if (kentta == true)
234        {
235            pistelista = new ScoreList(10, false, 0);
236            DataStorage.TryLoad<ScoreList>(pistelista, "Survival" + kenttanro + players + ".xml");
237        }
238
239        if (DataStorage.Exists("Save.xml")) LoadGame("Save.xml");
240    }
241
242    #endregion
243
244    #region Valikko
245
246    void Alkuvalikko()
247    {
248        Tyhjennanappaimet();
249
250        Level.BackgroundColor = Color.Black;
251
252        if (aanetpaalla == true && MediaPlayer.IsPlaying == false) MediaPlayer.Play("alkuvalikko");
253
254        MultiSelectWindow alkuvalikko = new MultiSelectWindow("", "Start game", "Highscores", "Help", "Sounds: " + ((aanetpaalla == true) ? "ON" : "OFF"), "Exit");
255        alkuvalikko.AddItemHandler(0, Kentanvalinta);
256        alkuvalikko.AddItemHandler(1, Ennatykset);
257        alkuvalikko.AddItemHandler(2, Ohjeet);
258        alkuvalikko.AddItemHandler(3, delegate
259        {
260            aanetpaalla = !aanetpaalla;
261            if (aanetpaalla == false) MediaPlayer.Pause();
262            Tallennakaikki();
263            Alkuvalikko();
264        });
265        alkuvalikko.AddItemHandler(4, delegate
266        {
267            YesNoWindow ikkuna = new YesNoWindow("Do you want to quit?");
268            ikkuna.Yes += Exit;
269            ikkuna.No += delegate
270            {
271                ikkuna.Destroy();
272                Alkuvalikko();
273            };
274            Add(ikkuna);
275        });
276        alkuvalikko.DefaultCancel = 4;
277        Add(alkuvalikko);
278
279        Label kiitokset = new Label("Made by Lauri Kemppi 2013.\nAll music and pictures are public domain.");
280        kiitokset.TextColor = Color.Red;
281        kiitokset.Right = Screen.RightSafe;
282        kiitokset.Bottom = Screen.BottomSafe;
283        Add(kiitokset);
284    }
285
286    void Ennatykset()
287    {
288        Tyhjennanappaimet();
289
290        pistelista = new ScoreList(10, false, 0);
291
292        MultiSelectWindow alkuvalikko = new MultiSelectWindow("Select level", "Level 1 (1p)", "Level 1 (2p)", "Level 2 (1p)", "Level 2 (2p)", "Back");
293        alkuvalikko.AddItemHandler(0, delegate
294        {
295            Lataakaikki(true, 1, 1);
296            HighScoreWindow topIkkuna = new HighScoreWindow(
297                              "Highscores: Level 1, 1 players",
298                             pistelista);
299            topIkkuna.Closed += delegate { Ennatykset(); };
300            topIkkuna.List.ScoreFormat = "{0:0.##}";
301            Add(topIkkuna);
302        });
303        alkuvalikko.AddItemHandler(1, delegate
304        {
305            Lataakaikki(true, 1, 2);
306            HighScoreWindow topIkkuna = new HighScoreWindow(
307                              "Highscores: Level 1, 2 players",
308                              pistelista);
309            topIkkuna.Closed += delegate { Ennatykset(); };
310            topIkkuna.List.ScoreFormat = "{0:0.##}";
311            Add(topIkkuna);
312        });
313        alkuvalikko.AddItemHandler(2, delegate
314        {
315            Lataakaikki(true, 2, 1);
316            HighScoreWindow topIkkuna = new HighScoreWindow(
317                              "Highscores: Level 2, 1 players",
318                              pistelista);
319            topIkkuna.Closed += delegate { Ennatykset(); };
320            topIkkuna.List.ScoreFormat = "{0:0.##}";
321            Add(topIkkuna);
322        });
323        alkuvalikko.AddItemHandler(3, delegate
324        {
325            Lataakaikki(true, 2, 2);
326            HighScoreWindow topIkkuna = new HighScoreWindow(
327                              "Highscores: Level 2, 2 players",
328                              pistelista);
329            topIkkuna.Closed += delegate { Ennatykset(); };
330            topIkkuna.List.ScoreFormat = "{0:0.##}";
331            Add(topIkkuna);
332        });
333        alkuvalikko.AddItemHandler(4, Alkuvalikko);
334        alkuvalikko.DefaultCancel = 4;
335        Add(alkuvalikko);
336    }
337
338    void Ohjeet()
339    {
340        Alkuvalikko();
341    }
342
343    void Kentanvalinta()
344    {
345        Tyhjennanappaimet();
346
347        MultiSelectWindow valitsepeli = new MultiSelectWindow("Select level", "Level 1", "Level 2", "Back");
348        valitsepeli.AddItemHandler(0, delegate
349        {
350            survivalkentannro = 1;
351            Valitsepelaajienmaara();
352        });
353        valitsepeli.AddItemHandler(1, delegate
354        {
355            survivalkentannro = 2;
356            Valitsepelaajienmaara();
357        });
358        valitsepeli.AddItemHandler(2, Alkuvalikko);
359        valitsepeli.DefaultCancel = 2;
360        Add(valitsepeli);
361    }
362
363
364    void Valitsepelaajienmaara()
365    {
366        Tyhjennanappaimet();
367
368        MultiSelectWindow pelaajienmaara = new MultiSelectWindow("Select number of players", "1 player", "2 players", "Back");
369        pelaajienmaara.AddItemHandler(0, delegate
370        {
371            pelaajienlukumaara = 1;
372            pelaajienlukumaara2 = 1;
373            Valitsevaikeustaso();
374        });
375        pelaajienmaara.AddItemHandler(1, delegate
376        {
377            pelaajienlukumaara = 2;
378            pelaajienlukumaara2 = 2;
379            Valitsevaikeustaso();
380        });
381        pelaajienmaara.AddItemHandler(2, Kentanvalinta);
382        pelaajienmaara.DefaultCancel = 2;
383        Add(pelaajienmaara);
384    }
385
386    void Valitsevaikeustaso()
387    {
388        Tyhjennanappaimet();
389
390        MultiSelectWindow vaikeustasonvalinta = new MultiSelectWindow("Select difficulty", "Easy", "Normal", "Hard", "Insane", "Back");
391        vaikeustasonvalinta.AddItemHandler(0, delegate
392        {
393            vaikeustaso = 2;
394            Aloitapeli();
395        });
396        vaikeustasonvalinta.AddItemHandler(1, delegate
397        {
398            vaikeustaso = 3;
399            Aloitapeli();
400        });
401        vaikeustasonvalinta.AddItemHandler(2, delegate
402        {
403            vaikeustaso = 4;
404            Aloitapeli();
405        });
406        vaikeustasonvalinta.AddItemHandler(3, delegate
407        {
408            vaikeustaso = 5;
409            Aloitapeli();
410        });
411        vaikeustasonvalinta.AddItemHandler(4, Valitsepelaajienmaara);
412        vaikeustasonvalinta.DefaultCancel = 4;
413        Add(vaikeustasonvalinta);
414    }
415
416    void Paussivalikko()
417    {
418        IsPaused = true;
419
420        MultiSelectWindow paussivalikko = new MultiSelectWindow("Paused", "Continue", "Help", "Cheats", "Sounds: " + ((aanetpaalla == true) ? "ON" : "OFF"), "Exit");
421        paussivalikko.AddItemHandler(0, delegate
422        {
423            IsPaused = false;
424            paussivalikko.Destroy();
425        });
426        paussivalikko.AddItemHandler(1, delegate
427        {
428            Lisaanappaimet();
429            ShowControlHelp();
430            Paussivalikko();
431        });
432
433        paussivalikko.AddItemHandler(2, delegate
434        {
435            InputWindow kysymysIkkuna = new InputWindow("Enter cheat");
436            kysymysIkkuna.TextEntered += Huijaus;
437            Add(kysymysIkkuna);
438        });
439
440        paussivalikko.AddItemHandler(3, delegate
441        {
442            aanetpaalla = !aanetpaalla;
443            Tallennakaikki();
444            Paussivalikko();
445        });
446
447        paussivalikko.AddItemHandler(4, delegate
448        {
449            Pelipaattyi();
450        });
451        paussivalikko.DefaultCancel = 0;
452
453        Add(paussivalikko);
454    }
455
456    void Huijaus(InputWindow ikkuna)
457    {
458        Paussivalikko();
459
460        string vastaus = ikkuna.InputBox.Text;
461
462        if (vastaus == "ajlakane")
463        {
464            AJ = true;
465            MessageDisplay.Add("A-J -mode activated.");
466        }
467        else if (vastaus == "Nicolas Cage")
468        {
469            NC = true;
470            MessageDisplay.Add("Nicolas Cage mode activated.");
471        }
472        else if (vastaus == "Debug")
473        {
474            Debug = true;
475            MessageDisplay.Add("Debug mode activated.");
476        }
477        else if (vastaus == "NoEnemies")
478        {
479            noenemies = true;
480            MessageDisplay.Add("Enemy spawning disabled.");
481        }
482
483        else if (vastaus == "NoPackages")
484        {
485            nopackages = true;
486            MessageDisplay.Add("Package spawning disabled.");
487        }
488
489        else if (vastaus == "ClearAll")
490        {
491            AJ = false;
492            NC = false;
493            Debug = false;
494            noenemies = false;
495            nopackages = false;
496            MessageDisplay.Add("All cheats have been disabled.");
497        }
498
499        else MessageDisplay.Add("False code!");
500    }
501
502
503    #endregion
504
505    #region Kentan lataus
506
507    void Aloitapeli()
508    {
509        Tallennakaikki();
510
511        ClearAll();
512
513        Lataakaikki(true, survivalkentannro, pelaajienlukumaara);
514
515        IsPaused = false;
516
517        MediaPlayer.Stop();
518
519        ColorTileMap kentta_pelaaja = ColorTileMap.FromLevelAsset("Selviytyminen" + survivalkentannro);
520
521        kentta_pelaaja.SetTileMethod(Color.FromPaintDotNet(0, 3), Luopelaaja); // pelaaja 1
522
523        if (pelaajienlukumaara == 2)
524        {
525            kentta_pelaaja.SetTileMethod(Color.FromPaintDotNet(0, 4), Luopelaaja); // pelaaja 2
526        };
527
528        //if (pelaajienlukumaara == 3)
529        //{
530        //    kentta_pelaaja.SetTileMethod(Color.Blue, Luopelaaja);
531        //};
532        //if (pelaajienlukumaara == 4)
533        //{
534        //    kentta_pelaaja.SetTileMethod(Color.Gold, Luopelaaja);
535        //};
536
537        kentta_pelaaja.Execute(ruudunkoko, ruudunkoko);
538
539        ColorTileMap kentta = ColorTileMap.FromLevelAsset("Selviytyminen" + survivalkentannro);
540
541        kentta.SetTileMethod(Color.FromPaintDotNet(0, 0), Luoseina, seinankuva, Color.Black);
542        kentta.SetTileMethod(Color.FromPaintDotNet(1, 2), Luoseina, (Image)null, Color.Gold);
543        kentta.SetTileMethod(Color.FromPaintDotNet(1, 0), Luolattia);
544        kentta.SetTileMethod(Color.FromPaintDotNet(0, 3), Luolattia);
545        kentta.SetTileMethod(Color.FromPaintDotNet(0, 4), Luolattia);
546        kentta.SetTileMethod(Color.FromPaintDotNet(1, 1), Luovoidalue);
547        //kentta.SetTileMethod(Color.Red, Luomaali);
548        //kentta.SetTileMethod(Color.FromPaintDotNet(0, 15), Luovirus);
549        //kentta.SetTileMethod(Color.FromPaintDotNet(1, 0), Luotroijalainen);
550
551        kentta.Execute(ruudunkoko, ruudunkoko);
552
553        Level.CreateBorders(false);
554
555        pakettienlukumaara = 0;
556
557        Gravity = new Vector(0, 0);
558
559        Level.BackgroundColor = Color.Black;
560
561        Lisaanappaimet();
562
563        Luomittarit();
564
565        Luoaikalaskuri();
566
567        Lisaanakyvyysalue();
568
569        Camera.StayInLevel = true;
570
571        hienorajahdys = new ExplosionSystem(LoadImage("yksi"), 200);
572        Add(hienorajahdys);
573        hienorajahdys.MinScale = 4;
574        hienorajahdys.MaxScale = 5;
575        hienorajahdys2 = new ExplosionSystem(LoadImage("nolla"), 200);
576        Add(hienorajahdys2);
577        hienorajahdys2.MinScale = 4;
578        hienorajahdys2.MaxScale = 5;
579
580        MessageDisplay.X += 250;
581
582        if (aanetpaalla == true) startaani.Play();
583    }
584
585    void Luoaikalaskuri()
586    {
587        aikalaskuri = new Timer();
588        aikalaskuri.Start();
589
590        Label aikanaytto = new Label();
591        aikanaytto.TextColor = Color.White;
592        aikanaytto.DecimalPlaces = 1;
593        aikanaytto.BindTo(aikalaskuri.SecondCounter);
594        Add(aikanaytto);
595        aikanaytto.Position = Screen.Center;
596        aikanaytto.Y = Screen.TopSafe - 50;
597    }
598
599    #endregion
600
601    #region Objektit
602
603    #region Pelaajat ja nappaimet
604
605    void Luopelaaja(Vector paikka, double leveys, double korkeus)
606    {
607        Pelaaja pelaaja = new Pelaaja(leveys, korkeus, Shape.Triangle, Color.Green);
608        pelaaja.Mass = 10;
609        pelaaja.LinearDamping = 0.3;
610        pelaaja.AngularDamping = 0.1;
611        pelaaja.Position = paikka;
612        pelaaja.Color = Color.Green;
613        pelaaja.Tag = "Pelaaja";
614
615        pelaajat.Add(pelaaja);
616        Add(pelaaja, 2);
617
618        pelaaja.elamalaskuri = new DoubleMeter(100);
619        pelaaja.elamalaskuri.MaxValue = 100;
620        pelaaja.elamalaskuri.LowerLimit += delegate { Kuoli(pelaaja); };
621
622        pelaaja.suojalaskuri = new DoubleMeter(100, 0, 100);
623        pelaaja.suojalaskuri.MaxValue = 100;
624        pelaaja.suojalaskuri.LowerLimit += delegate { pelaaja.elamalaskuri.Value -= 10; pelaaja.suojalaskuri.Value = 0.001; };
625
626        pelaaja.ammuslaskuri = new DoubleMeter(Double.PositiveInfinity);
627        pelaaja.ammuslaskuri.MinValue = -1;
628        pelaaja.ammuslaskuri.MaxValue = Double.PositiveInfinity;
629        pelaaja.ammuslaskuri.LowerLimit += delegate
630        {
631            if (pelaajat[0] == pelaaja)
632            {
633                pelaaja1ase = "Luoti";
634                pelaaja.ammuslaskuri.Value = Double.PositiveInfinity;
635                aseenkuva1.Image = perusasekuvake;
636            }
637            if (pelaajat.Count == 2 && pelaajat[1] == pelaaja)
638            {
639                pelaaja2ase = "Luoti";
640                pelaaja.ammuslaskuri.Value = Double.PositiveInfinity;
641                aseenkuva2.Image = perusasekuvake;
642            };
643        };
644
645        Timer ajastin = new Timer();
646        ajastin.Interval = 1;
647        ajastin.Timeout += delegate
648        {
649            if (AJ == true) pelaaja.Image = Intta;
650            if (NC == true) pelaaja.Image = Egac;
651        };
652        ajastin.Start();
653
654    }
655
656    void Luomittarit()
657    {
658        ProgressBar pelaaja1elamapalkki = new ProgressBar(150, 20);
659        pelaaja1elamapalkki.Left = Screen.LeftSafe + 50;
660        pelaaja1elamapalkki.Top = Screen.TopSafe - 50;
661        pelaaja1elamapalkki.BindTo(pelaajat[0].elamalaskuri);
662        pelaaja1elamapalkki.BorderColor = tekstienvari;
663        pelaaja1elamapalkki.BarColor = Color.Red;
664        Add(pelaaja1elamapalkki);
665
666        Label nimi = new Label("Computer 1 health");
667        nimi.Position = pelaaja1elamapalkki.Position;
668        nimi.TextColor = tekstienvari;
669        nimi.Y = pelaaja1elamapalkki.Y + 50;
670        Add(nimi);
671
672        ProgressBar pelaaja1suojapalkki = new ProgressBar(150, 20);
673        pelaaja1suojapalkki.Left = Screen.LeftSafe + 50;
674        pelaaja1suojapalkki.Top = pelaaja1elamapalkki.Top - 100;
675        pelaaja1suojapalkki.BindTo(pelaajat[0].suojalaskuri);
676        pelaaja1suojapalkki.BorderColor = tekstienvari;
677        pelaaja1suojapalkki.BarColor = Color.Blue;
678        Add(pelaaja1suojapalkki);
679
680        Label suojanimi = new Label("Computer 1 firewall");
681        suojanimi.Position = pelaaja1suojapalkki.Position;
682        suojanimi.TextColor = tekstienvari;
683        suojanimi.Y = pelaaja1suojapalkki.Y + 50;
684        Add(suojanimi);
685
686        pistelaskuri = new IntMeter(0);
687
688        Label pistenaytto = new Label();
689        pistenaytto.X = Screen.Center.X;
690        pistenaytto.Top = Screen.Top - 10;
691        pistenaytto.Color = tekstienvari;
692        pistenaytto.BindTo(pistelaskuri);
693        Add(pistenaytto);
694
695        aseenkuva1 = new Widget(50, 50);
696        aseenkuva1.Image = perusasekuvake;
697        aseenkuva1.Left = pelaaja1suojapalkki.Left;
698        aseenkuva1.Y = pelaaja1suojapalkki.Y - 50;
699        Add(aseenkuva1);
700
701        Label panostenmaara1 = new Label("0");
702        panostenmaara1.Size = aseenkuva1.Size;
703        panostenmaara1.Y = aseenkuva1.Y;
704        panostenmaara1.X = aseenkuva1.X + 100;
705        panostenmaara1.TextColor = tekstienvari;
706        Add(panostenmaara1);
707
708        Timer ammukset = new Timer();
709        ammukset.Interval = 0.1;
710        ammukset.Timeout += delegate
711        {
712            if (pelaajat[0].ammuslaskuri.Value > 1e100)
713            {
714                panostenmaara1.Text = "oo";
715            }
716            else
717            {
718                panostenmaara1.Text = pelaajat[0].ammuslaskuri.Value.ToString();
719            }
720        };
721        ammukset.Start();
722
723        if (pelaajat.Count == 1) return;
724
725        ProgressBar pelaaja2elamapalkki = new ProgressBar(150, 20);
726        pelaaja2elamapalkki.Right = Screen.RightSafe - 50;
727        pelaaja2elamapalkki.Top = Screen.TopSafe - 50;
728        pelaaja2elamapalkki.BindTo(pelaajat[1].elamalaskuri);
729        pelaaja2elamapalkki.BorderColor = tekstienvari;
730        pelaaja2elamapalkki.BarColor = Color.Red;
731        Add(pelaaja2elamapalkki);
732
733        Label nimi2 = new Label("Computer 2 health");
734        nimi2.Position = pelaaja2elamapalkki.Position;
735        nimi2.TextColor = tekstienvari;
736        nimi2.Y = pelaaja2elamapalkki.Y + 50;
737        Add(nimi2);
738
739        ProgressBar pelaaja2suojapalkki = new ProgressBar(150, 20);
740        pelaaja2suojapalkki.Right = Screen.RightSafe - 50;
741        pelaaja2suojapalkki.Top = pelaaja2elamapalkki.Top - 100;
742        pelaaja2suojapalkki.BindTo(pelaajat[1].suojalaskuri);
743        pelaaja2suojapalkki.BorderColor = tekstienvari;
744        pelaaja2suojapalkki.BarColor = Color.Blue;
745        Add(pelaaja2suojapalkki);
746
747        Label suojanimi2 = new Label("Computer 2 firewall");
748        suojanimi2.Position = pelaaja2suojapalkki.Position;
749        suojanimi2.TextColor = tekstienvari;
750        suojanimi2.Y = pelaaja2suojapalkki.Y + 50;
751        Add(suojanimi2);
752
753        aseenkuva2 = new Widget(50, 50);
754        aseenkuva2.Image = perusasekuvake;
755        aseenkuva2.Left = pelaaja2suojapalkki.Left;
756        aseenkuva2.Y = pelaaja2suojapalkki.Y - 50;
757        Add(aseenkuva2);
758
759        Label panostenmaara2 = new Label("0");
760        panostenmaara2.Size = aseenkuva2.Size;
761        panostenmaara2.Y = aseenkuva2.Y;
762        panostenmaara2.X = aseenkuva2.X + 100;
763        panostenmaara2.TextColor = tekstienvari;
764        Add(panostenmaara2);
765
766        Timer ammukset2 = new Timer();
767        ammukset.Interval = 0.1;
768        ammukset.Timeout += delegate
769        {
770            if (pelaajat[1].ammuslaskuri.Value > 1e100)
771            {
772                panostenmaara2.Text = "oo";
773            }
774            else
775            {
776                panostenmaara2.Text = pelaajat[1].ammuslaskuri.Value.ToString();
777            }
778        };
779        ammukset.Start();
780    }
781
782    void Lisaanakyvyysalue()
783    {
784        //todo
785
786        //Widget nakyvyysalue = new Widget(200, 200); //(Screen.WidthSafe, Screen.HeightSafe);
787        //nakyvyysalue.Image = LoadImage("Alue");
788        //Add(nakyvyysalue, 1);
789
790        //Timer ajastin = new Timer();
791        //ajastin.Interval = 0.1;
792        //ajastin.Timeout += delegate
793        //{
794        //    nakyvyysalue.Position = Screen.Center;
795        //};
796        //ajastin.Start();
797
798        Timer ajastin = new Timer();
799        ajastin.Interval = 0.01;
800        ajastin.Timeout += delegate
801        {
802            if (pelaajat.Count == 1 || pelaajienlukumaara2 == 1)
803            {
804                if (pelaaja1elossa == true)
805                {
806                    Camera.Follow(pelaajat[0]);
807                    Camera.ZoomFactor = 5;
808                    return;
809                }
810
811                if (pelaajat.Count == 2 && pelaaja2elossa == true)
812                {
813                    Camera.Follow(pelaajat[1]);
814                    Camera.ZoomFactor = 5;
815                    return;
816                }
817            }
818
819            else
820            {
821                Timer ajastin2 = new Timer();
822                ajastin2.Interval = 0.01;
823                ajastin2.Timeout += delegate
824                {
825                    Camera.ZoomTo(pelaajat[0].Position, pelaajat[1].Position);
826                    Camera.ZoomFactor = Math.Abs(Camera.ZoomFactor * 0.7);
827
828                    if (Camera.ZoomFactor > 6)
829                    {
830                        Camera.ZoomFactor = 6.0;
831                    }
832                    //nakyvyysalue.Size = new Vector(1800, 1800) * 1 / Camera.ZoomFactor;
833                    //nakyvyysalue.Position = (pelaaja1.Position + pelaaja2.Position) * 0.5;
834                };
835                ajastin2.Start(1);
836            }
837        };
838        ajastin.Start();
839
840    }
841
842    void Lisaanappaimet()
843    {
844        if (ControllerOne.IsConnected == true)
845        {
846            Lisaagamepadnappaimet(pelaajat[0]);
847        }
848
849        else
850        {
851            Keyboard.Listen(Key.W, ButtonState.Down, Liikuta, "Move forward (P1)", pelaajat[0], nopeus);
852            Keyboard.Listen(Key.S, ButtonState.Down, Liikuta, "Move backwards (P1)", pelaajat[0], -nopeus);
853            Keyboard.Listen(Key.A, ButtonState.Down, Kaanna, "Turn (P1)", pelaajat[0], kaantymisnopeus);
854            Keyboard.Listen(Key.D, ButtonState.Down, Kaanna, "Turn (P1)", pelaajat[0], -kaantymisnopeus);
855            Keyboard.Listen(Key.Space, ButtonState.Pressed, Ammu, "Shoot (P1)", pelaajat[0]);
856        }
857
858        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Paussivalikko, "Pause");
859        Keyboard.Listen(Key.Back, ButtonState.Pressed, Paussivalikko, "Pause");
860
861        if (pelaajat.Count == 2)
862        {
863            if (ControllerTwo.IsConnected == true)
864            {
865                Lisaagamepadnappaimet(pelaajat[1]);
866            }
867
868            else
869            {
870                Keyboard.Listen(Key.Up, ButtonState.Down, Liikuta, "Move forward (P2)", pelaajat[1], nopeus);
871                Keyboard.Listen(Key.Down, ButtonState.Down, Liikuta, "Move backwards (P2)", pelaajat[1], -nopeus);
872                Keyboard.Listen(Key.Left, ButtonState.Down, Kaanna, "Turn (P2)", pelaajat[1], kaantymisnopeus);
873                Keyboard.Listen(Key.Right, ButtonState.Down, Kaanna, "Turn (P2)", pelaajat[1], -kaantymisnopeus);
874                Keyboard.Listen(Key.RightControl, ButtonState.Pressed, Ammu, "Shoot (P2)", pelaajat[1]);
875            }
876        }
877    }
878
879    void Lisaagamepadnappaimet(Pelaaja pelaaja)
880    {
881        if (pelaaja == pelaajat[0])
882        {
883            ControllerOne.Listen(Button.Back, ButtonState.Pressed, Paussivalikko, "Pause");
884            ControllerOne.Listen(Button.LeftTrigger, ButtonState.Down, Liikuta, "Move forward (P1)", pelaaja, -nopeus);
885            ControllerOne.Listen(Button.RightTrigger, ButtonState.Down, Liikuta, "Move backwards (P1)", pelaaja, nopeus);
886            ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Kaanna, "Turn (P1)", pelaaja, kaantymisnopeus);
887            ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Kaanna, "Turn (P1)", pelaaja, -kaantymisnopeus);
888            ControllerOne.Listen(Button.A, ButtonState.Pressed, Ammu, "Shoot (P1)", pelaajat[0]);
889        }
890
891        if (pelaajat.Count == 2 && pelaaja == pelaajat[1])
892        {
893            ControllerTwo.Listen(Button.Back, ButtonState.Pressed, Paussivalikko, "Pause");
894            ControllerTwo.Listen(Button.LeftTrigger, ButtonState.Down, Liikuta, "Move forward (P2)", pelaaja, -nopeus);
895            ControllerTwo.Listen(Button.RightTrigger, ButtonState.Down, Liikuta, "Move backwards (P2)", pelaaja, nopeus);
896            ControllerTwo.Listen(Button.DPadLeft, ButtonState.Down, Kaanna, "Turn (P2)", pelaaja, kaantymisnopeus);
897            ControllerTwo.Listen(Button.DPadRight, ButtonState.Down, Kaanna, "Turn (P2)", pelaaja, -kaantymisnopeus);
898            ControllerTwo.Listen(Button.A, ButtonState.Pressed, Ammu, "Shoot (P2)", pelaajat[1]);
899        }
900    }
901
902    void Liikuta(Pelaaja tyyppi, double nopeus)
903    {
904        Vector suunta = Vector.FromLengthAndAngle(nopeus, tyyppi.Angle + Angle.FromDegrees(90));
905        tyyppi.Push(suunta * 100);
906    }
907
908    void Kaanna(Pelaaja tyyppi, double kaantymisnopeus)
909    {
910        tyyppi.AngularVelocity = kaantymisnopeus;
911    }
912
913    #region Aseet ja ampuminen
914
915    void Ammu(Pelaaja pelaaja)
916    {
917        Vector vektori = Vector.FromLengthAndAngle(nopeus, pelaaja.Angle + Angle.FromDegrees(90));
918
919        if (pelaajat[0] == pelaaja && pelaaja1elossa == true)
920        {
921            pelaaja.ammuslaskuri.Value -= 1;
922
923            if (pelaaja1ase == "Luoti")
924            {
925                Luoluoti(pelaaja.Position, vektori);
926            }
927
928            if (pelaaja1ase == "Antivirus")
929            {
930                Luoantivirus(pelaaja.Position, vektori);
931            }
932
933            if (pelaaja1ase == "Kranaatti")
934            {
935                Luokranaatti(pelaaja.Position, vektori);
936            }
937        }
938
939        if (pelaajat.Count == 2 && pelaajat[1] == pelaaja && pelaaja2elossa == true)
940        {
941            pelaaja.ammuslaskuri.Value -= 1;
942
943            if (pelaaja2ase == "Luoti")
944            {
945                Luoluoti(pelaaja.Position, vektori);
946            }
947
948            if (pelaaja2ase == "Antivirus")
949            {
950                Luoantivirus(pelaaja.Position, vektori);
951            }
952                       
953            if (pelaaja2ase == "Kranaatti")
954            {
955                Luokranaatti(pelaaja.Position, vektori);
956            }
957       
958        }
959    }
960
961    void Luoluoti(Vector paikka, Vector suunta)
962    {
963        PhysicsObject luoti = new PhysicsObject(5, 5);
964        luoti.CollisionIgnoreGroup = 2;
965        Add(luoti, 2);
966
967        luoti.MaximumLifetime = TimeSpan.FromSeconds(5);
968
969        luoti.CanRotate = false;
970        luoti.Position = paikka;
971        luoti.Hit(suunta);
972
973        FollowerBrain aivo = new FollowerBrain("Nopea", "Perus");
974        aivo.Speed = nopeus;
975        aivo.TurnWhileMoving = true;
976
977        Timer ajastin = new Timer();
978        ajastin.Interval = 0.01;
979        ajastin.Timeout += delegate
980        {
981                luoti.Brain = aivo;
982        };
983        ajastin.Start();
984
985        aivo.DistanceFar = (ruudunkoko*4)/vaikeustaso;
986        aivo.TurnSpeed = Jypeli.UnlimitedAngle.FromDegrees(10);
987
988        AddCollisionHandler(luoti, "Seina", Aseosuiseinaan);
989        AddCollisionHandler(luoti, Aseosui);
990    }
991
992    void Aseosui(PhysicsObject osuja, PhysicsObject kohde)
993    {
994        if (kohde.Tag.ToString() == "Perus" || kohde.Tag.ToString() == "Nopea" || kohde.Tag.ToString() == "Troijalainen")
995        {
996            Vihollinen vihollinen = (Vihollinen)kohde;
997
998            vihollinen.vihunelamat.Value -= 10;
999
1000            vihollinen.Brain.Active = false;
1001
1002            if (kohde.Tag.ToString() != "Troijalainen")
1003            {
1004                kohde.Push((kohde.Position - osuja.Position).Normalize() * 150000);
1005            }
1006
1007            Explosion rajahdys = new Explosion(5);
1008            rajahdys.Force = 0;
1009            rajahdys.Position = osuja.Position;
1010            Add(rajahdys, 2);
1011
1012            Timer.SingleShot(2.0/vaikeustaso, delegate { vihollinen.Brain.Active = true; });
1013
1014            osuja.Destroy();
1015
1016            if (vihollinen.vihunelamat.Value < 1)
1017            {
1018                pistelaskuri.Value += 10;
1019                hienorajahdys.AddEffect(vihollinen.Position, 30);
1020                hienorajahdys2.AddEffect(vihollinen.Position, 30);
1021            }
1022        }
1023
1024        if (kohde.Tag.ToString() == "Elamaa" || kohde.Tag.ToString() == "Suojaa" || kohde.Tag.ToString() == "Aseita")
1025        {
1026            Explosion rajahdys = new Explosion(5);
1027            rajahdys.Force = 0;
1028            rajahdys.Position = osuja.Position;
1029            Add(rajahdys, 2);
1030
1031            osuja.Destroy();
1032        }
1033    }
1034
1035    void Aseosuiseinaan(PhysicsObject osuja, PhysicsObject seina)
1036    {
1037        Explosion rajahdys = new Explosion(5);
1038        rajahdys.Force = 0;
1039        rajahdys.Position = osuja.Position;
1040        if (aanetpaalla == false) rajahdys.Sound = null;
1041        Add(rajahdys, 2);
1042
1043        osuja.Destroy();
1044    }
1045
1046
1047    void Luoantivirus(Vector paikka, Vector suunta)
1048    {
1049        PhysicsObject antivirus = new PhysicsObject(ruudunkoko * 0.5, ruudunkoko * 0.5);
1050        antivirus.Mass = 10;
1051        antivirus.Image = antiviruskuva;
1052        antivirus.IgnoresExplosions = true;
1053        antivirus.Position = paikka;
1054        Add(antivirus);
1055        antivirus.CollisionIgnoreGroup = 2;
1056
1057        antivirus.MaximumLifetime = new TimeSpan(0, 0, 20);
1058
1059        antivirus.Hit(suunta);
1060
1061        FollowerBrain aivo = new FollowerBrain("Perus", "Troijalainen", "Nopea");
1062        aivo.Speed = nopeus * 0.5;
1063        aivo.TurnWhileMoving = true;
1064        antivirus.Brain = aivo;
1065
1066        AddCollisionHandler(antivirus, Antivirusosui);
1067
1068    }
1069
1070    void Antivirusosui(PhysicsObject antivirus, PhysicsObject virus)
1071    {
1072        if (virus.Tag.ToString() == "Perus"|| virus.Tag.ToString() == "Nopea" || virus.Tag.ToString() == "Troijalainen")
1073        {
1074            Vihollinen vihollinen = (Vihollinen)virus;
1075            vihollinen.vihunelamat.Value -= 100;
1076
1077            Explosion rajahdys = new Explosion(10);
1078            rajahdys.Force = 0;
1079            rajahdys.Position = antivirus.Position;
1080            if (aanetpaalla == false) rajahdys.Sound = null;
1081            Add(rajahdys, 2);
1082
1083            Timer.SingleShot(2.0/vaikeustaso, delegate { vihollinen.Brain.Active = true; });
1084
1085            antivirus.Destroy();
1086
1087            if (vihollinen.vihunelamat.Value < 1)
1088            {
1089                pistelaskuri.Value += 10;
1090                hienorajahdys.AddEffect(vihollinen.Position, 30);
1091                hienorajahdys2.AddEffect(vihollinen.Position, 30);
1092            }
1093        }
1094    }
1095
1096    void Luokranaatti(Vector paikka, Vector suunta)
1097    {
1098        PhysicsObject kranaatti = new PhysicsObject(ruudunkoko * 0.5, ruudunkoko * 0.5);
1099        kranaatti.Mass = 10;
1100        kranaatti.Image = kranaattikuva;
1101        kranaatti.IgnoresExplosions = true;
1102        kranaatti.Position = paikka;
1103        Add(kranaatti);
1104
1105        kranaatti.MaximumLifetime = new TimeSpan(0, 0, 20);
1106
1107        kranaatti.Hit(suunta*3);
1108
1109        Timer.SingleShot(3, delegate
1110        {
1111       
1112        Explosion rajahdys = new Explosion(ruudunkoko * 5);
1113        rajahdys.Position = kranaatti.Position;
1114        if (aanetpaalla == false) rajahdys.Sound = null;
1115        rajahdys.Force = 0;
1116        Add(rajahdys, 2);
1117
1118        kranaatti.Destroy();
1119       
1120        foreach(Vihollinen vihu in rajahdyksenuhrit)
1121        {
1122            if (Vector.Distance(kranaatti.Position, vihu.Position) < rajahdys.MaxRadius)
1123            {
1124                vihu.vihunelamat.Value -= 100;
1125            }
1126        }
1127        });
1128    }
1129
1130    #endregion
1131
1132    void Kuoli(Pelaaja pelaaja)
1133    {
1134        Explosion rajahdys = new Explosion(50);
1135        rajahdys.Position = pelaaja.Position;
1136        rajahdys.Force = 0;
1137        if (aanetpaalla == true) kuolemaaani.Play();
1138        Add(rajahdys, 2);
1139
1140        pelaaja.Destroy();
1141
1142        pelaajienlukumaara2 -= 1;
1143
1144        if (pelaaja == pelaajat[0]) pelaaja1elossa = false;
1145
1146        if (pelaajat.Count == 2 && pelaaja == pelaajat[1]) pelaaja2elossa = false;
1147
1148        if (pelaajienlukumaara2 == 0)
1149        {
1150            Pelipaattyi();
1151        }
1152    }
1153
1154    #endregion
1155
1156    #region Vihut
1157
1158    void Luovihu(Vector paikka, double spawnausmatka, double leveys, double korkeus, double damage, string vihuntyyppi, double suunnanvaihtomin, double suunnanvaihtomax, double kaukonopeus, double lahinopeus, double kaukanaolo, double lahellaolo, int kuolemaaika, Action<Vihollinen> lahitoiminto, Image kuva)
1159    {
1160        Vihollinen vihu = new Vihollinen(leveys, korkeus, kuva, vihuntyyppi);
1161
1162        if (Vector.Distance(paikka, pelaajat[0].Position) > spawnausmatka)
1163        {
1164            Add(vihu, 0);
1165        }
1166
1167        if (pelaajat.Count == 2 && Vector.Distance(paikka, pelaajat[1].Position) > spawnausmatka)
1168        {
1169            Add(vihu, 0);
1170        }
1171
1172        vihu.Position = paikka;
1173
1174        rajahdyksenuhrit.Add(vihu);
1175
1176        AddCollisionHandler<Vihollinen, Pelaaja>(vihu, delegate(Vihollinen tormaaja, Pelaaja kohde)
1177        {
1178            kohde.suojalaskuri.Value -= damage;
1179            vihu.Brain.Active = false;
1180            vihu.Push((vihu.Position - kohde.Position).Normalize() * 1500000);
1181            Timer.SingleShot(2.0/vaikeustaso, delegate
1182            {
1183                vihu.Brain.Active = true;
1184            });
1185        });
1186
1187        if (kuva != null) vihu.Shape = Shape.FromImage(kuva);
1188        RandomMoverBrain satunnaisaivot = new RandomMoverBrain();
1189        satunnaisaivot.ChangeMovementSeconds = RandomGen.NextDouble(suunnanvaihtomin, suunnanvaihtomax);
1190        satunnaisaivot.Speed = kaukonopeus;
1191
1192        // FollowerBrain aivot = new FollowerBrain(pelaajat.ToArray());
1193        FollowerBrain aivot = new FollowerBrain("Pelaaja", "Seurattava");
1194        aivot.Speed = lahinopeus;
1195        aivot.DistanceFar = kaukanaolo;
1196        aivot.FarBrain = satunnaisaivot;
1197        aivot.TurnWhileMoving = true;
1198        aivot.DistanceClose = lahellaolo;
1199
1200        aivot.StopWhenTargetClose = false;
1201
1202        if (lahitoiminto != null) aivot.TargetClose += delegate { lahitoiminto(vihu); };
1203
1204        vihu.MaximumLifetime = new TimeSpan(0, 0, kuolemaaika);
1205
1206        vihu.Brain = aivot;
1207
1208        Timer ajastin = new Timer();
1209        ajastin.Interval = 0.01;
1210        ajastin.Timeout += delegate
1211        {
1212            if (AJ == true) vihu.Image = Inttapaha;
1213            if (NC == true) vihu.Image = Egacpaha;
1214        };
1215        ajastin.Start();
1216
1217        vihu.Tag = vihuntyyppi;
1218
1219        vihu.IgnoresCollisionWith(vihu);
1220
1221        if (vihuntyyppi == "Troijalainen") vihu.CanRotate = false;
1222    }
1223
1224    void Vihuspawneri(Vector paikka)
1225    {
1226        Timer ajastin = new Timer();
1227        ajastin.Interval = RandomGen.NextDouble(1, 5);
1228        ajastin.Timeout += delegate
1229        {
1230            if (noenemies == false)
1231            {
1232                double luku = RandomGen.NextDouble(0, 100);
1233
1234                if (luku < 0.05 * (vaikeustaso / 2))
1235                {
1236                    if (Debug == true)
1237                    {
1238                        vihujenmaara++;
1239                        MessageDisplay.Add("Vihuja lisätty " + vihujenmaara.ToString());
1240                    }
1241
1242                    Luovihu(paikka, ruudunkoko * 6, ruudunkoko, ruudunkoko, 5, "Nopea", 0.1, 1, nopeus * 0.8, nopeus * 0.9, ruudunkoko * 6, ruudunkoko, 20, null, null);
1243                }
1244
1245                if (luku < 0.1 * (vaikeustaso / 2))
1246                {
1247                    if (Debug == true)
1248                    {
1249                        vihujenmaara++;
1250                        MessageDisplay.Add("Vihuja lisätty " + vihujenmaara.ToString());
1251                    }
1252
1253                    int numero = RandomGen.NextInt(0, 3);
1254                    Image kuva = healthpakettikuva;
1255                    if (numero == 0) kuva = healthpakettikuva;
1256                    if (numero == 1) kuva = ammopakettikuva;
1257                    if (numero == 2) kuva = suojakuva;
1258
1259                    Luovihu(paikka, ruudunkoko * 10, ruudunkoko*0.9, ruudunkoko*0.9, 50, "Troijalainen", 1, 1, 0, nopeus, ruudunkoko * 2, ruudunkoko * 2, 40, delegate(Vihollinen v) { v.Image = null; v.Color = Color.Red; }, kuva);
1260                }
1261
1262                //else if (luku < 0.2 * (vaikeustaso / 2))
1263                //{
1264                //    if (Debug == true)
1265                //    {
1266                //        vihujenmaara++;
1267                //        MessageDisplay.Add("Vihuja lisätty " + vihujenmaara.ToString());
1268                //    }
1269                //    //Luovihu(paikka, ruudunkoko * 6, ruudunkoko, ruudunkoko, 10, "Perus", 0.1, 3, nopeus * 0.2, nopeus * 0.5, ruudunkoko * 6, ruudunkoko, 20, null, null);
1270                //}
1271
1272                else if (luku < 0.5 * (vaikeustaso / 2))
1273                {
1274                    if (Debug == true)
1275                    {
1276                        vihujenmaara++;
1277                        MessageDisplay.Add("Vihuja lisätty " + vihujenmaara.ToString());
1278                    }
1279                    Luovihu(paikka, ruudunkoko * 6, ruudunkoko, ruudunkoko, 10, "Perus", 0.5, 5, nopeus * 0.2, nopeus * 0.4, ruudunkoko * 6, ruudunkoko, 20, null, stopkuva);
1280                }
1281
1282                // delegate(Vihollinen v) { v.Color = Color.Black; } -> Actioniin
1283            }
1284        };
1285        ajastin.Start();
1286    }
1287
1288    #endregion
1289
1290    #region Muut
1291
1292    void Luoseina(Vector paikka, double leveys, double korkeus, Image kuva, Color vari)
1293    {
1294        PhysicsObject seina = new PhysicsObject(leveys, korkeus, Shape.Rectangle);
1295        seina.Position = paikka;
1296        seina.Mass = 1000000000;
1297        seina.IgnoresExplosions = true;
1298        seina.IgnoresPhysicsLogics = true;
1299        seina.CollisionIgnoreGroup = 1;
1300        seina.Image = kuva;
1301        seina.Color = vari;
1302        seina.Tag = "Seina";
1303        Add(seina, -1);
1304    }
1305
1306    void Luolattia(Vector paikka, double leveys, double korkeus)
1307    {
1308        GameObject lattia = new GameObject(leveys, korkeus);
1309        lattia.Position = paikka;
1310        lattia.Tag = "Lattia";
1311        Add(lattia, -3);
1312        lattia.Color = Color.Transparent;
1313
1314        Vihuspawneri(paikka);
1315        Pakettispawneri(paikka);
1316    }
1317
1318    void Luovoidalue(Vector paikka, double leveys, double korkeus)
1319    {
1320        PhysicsObject alue = new PhysicsObject(leveys, korkeus);
1321        alue.Position = paikka;
1322        alue.IgnoresCollisionResponse = true;
1323        alue.IgnoresPhysicsLogics = true;
1324        alue.Color = Color.Transparent;
1325        Add(alue);
1326        AddCollisionHandler(alue, Osuivoidiin);
1327    }
1328
1329    void Osuivoidiin(PhysicsObject alue, PhysicsObject kohde)
1330    {
1331        if (Debug == true) MessageDisplay.Add("Osuttiin voidiin.");
1332        if (kohde.Tag.ToString() != "Seina") kohde.Destroy();
1333    }
1334
1335    #region Paketit
1336
1337    void Luohealthpaketti(Vector paikka, double leveys, double korkeus)
1338    {
1339        if (Vector.Distance(paikka, pelaajat[0].Position) > ruudunkoko * 6)
1340        {
1341            Paketti healthpaketti = new Paketti(leveys, korkeus);
1342            healthpaketti.Position = paikka;
1343            healthpaketti.Image = healthpakettikuva;
1344            healthpaketti.Tag = "Elamaa";
1345            Add(healthpaketti, -1);
1346
1347            healthpaketti.Destroyed += delegate { pakettienlukumaara -= 1; };
1348
1349            AddCollisionHandler(healthpaketti, "Pelaaja", Osuihealthpakettiin);
1350        }
1351    }
1352
1353    void Osuihealthpakettiin(PhysicsObject paketti, PhysicsObject pelaaja)
1354    {
1355        if (Debug == true) MessageDisplay.Add("Osuttiin healthpakettiin.");
1356
1357        if (aanetpaalla == true) healthaani.Play();
1358
1359        if (pelaaja == pelaajat[0])
1360        {
1361            paketti.Destroy();
1362            pelaajat[0].elamalaskuri.Value += 10;
1363        }
1364
1365        if (pelaajat.Count == 2 && pelaaja == pelaajat[1])
1366        {
1367            paketti.Destroy();
1368            pelaajat[1].elamalaskuri.Value += 10;
1369        }
1370    }
1371
1372    void Luosuojapaketti(Vector paikka, double leveys, double korkeus)
1373    {
1374        if (Vector.Distance(paikka, pelaajat[0].Position) > ruudunkoko * 6)
1375        {
1376            Paketti suojapaketti = new Paketti(leveys, korkeus);
1377            suojapaketti.Position = paikka;
1378            suojapaketti.Image = suojakuva;
1379            suojapaketti.Shape = Shape.FromImage(suojakuva);
1380            suojapaketti.Tag = "Suojaa";
1381            Add(suojapaketti, -1);
1382
1383            suojapaketti.Destroyed += delegate { pakettienlukumaara -= 1; };
1384
1385            AddCollisionHandler(suojapaketti, "Pelaaja", Osuisuojapakettiin);
1386        }
1387    }
1388
1389    void Osuisuojapakettiin(PhysicsObject paketti, PhysicsObject pelaaja)
1390    {
1391        if (Debug == true) MessageDisplay.Add("Osuttiin suojapakettiin.");
1392
1393        if (aanetpaalla == true) suojaaani.Play();
1394
1395        if (pelaaja == pelaajat[0])
1396        {
1397            paketti.Destroy();
1398            pelaajat[0].suojalaskuri.Value += 10;
1399        }
1400
1401        if (pelaajat.Count == 2 && pelaaja == pelaajat[1])
1402        {
1403            paketti.Destroy();
1404            pelaajat[1].suojalaskuri.Value += 10;
1405        }
1406    }
1407
1408    void Luoasepaketti(Vector paikka, double leveys, double korkeus)
1409    {
1410        if (Vector.Distance(paikka, pelaajat[0].Position) > ruudunkoko * 6)
1411        {
1412            Paketti asepaketti = new Paketti(leveys, korkeus);
1413            asepaketti.Position = paikka;
1414            asepaketti.Image = ammopakettikuva;
1415            asepaketti.Tag = "Aseita";
1416            Add(asepaketti, -1);
1417
1418            asepaketti.Destroyed += delegate { pakettienlukumaara -= 1; };
1419
1420            AddCollisionHandler(asepaketti, "Pelaaja", Osuiasepakettiin);
1421        }
1422    }
1423
1424    void Osuiasepakettiin(PhysicsObject paketti, PhysicsObject pelaaja)
1425    {
1426        int luku = RandomGen.NextInt(1, 3);
1427
1428        if (Debug == true) MessageDisplay.Add("Osuttiin asepakettiin.");
1429
1430        if (aanetpaalla == true) aseaani.Play();
1431
1432        Pelaaja tyyppi = (Pelaaja)pelaaja;
1433
1434        if (pelaaja == pelaajat[0])
1435        {
1436            paketti.Destroy();
1437
1438            if (luku == 1)
1439            {
1440                Lisaaase(tyyppi, "Antivirus", antiviruskuvake, 5);
1441            }
1442
1443            if (luku == 2)
1444            {
1445                Lisaaase(tyyppi, "Kranaatti", kranaattikuvake, 3);
1446            }
1447        }
1448
1449        if (pelaajat.Count == 2 && pelaaja == pelaajat[1])
1450        {
1451            paketti.Destroy();
1452
1453            if (luku == 1)
1454            {
1455                Lisaaase(tyyppi, "Antivirus", antiviruskuvake, 3);
1456            }
1457
1458            if (luku == 2)
1459            {
1460                Lisaaase(tyyppi, "Kranaatti", null, 3);
1461            }
1462        }
1463    }
1464
1465    void Lisaaase(Pelaaja pelaaja, string ase, Image aseenkuva, int panokset)
1466    {
1467        if (pelaaja == pelaajat[0])
1468        {
1469            pelaaja1ase = ase;
1470            aseenkuva1.Image = aseenkuva;
1471            pelaaja.ammuslaskuri.Value = panokset;
1472        }
1473
1474        if (pelaajat.Count == 2 && pelaaja == pelaajat[1])
1475        {
1476            pelaaja2ase = ase;
1477            aseenkuva2.Image = aseenkuva;
1478            pelaaja.ammuslaskuri.Value = panokset;
1479
1480        }
1481    }
1482
1483    void Pakettispawneri(Vector paikka)
1484    {
1485        Timer ajastin = new Timer();
1486        ajastin.Interval = RandomGen.NextDouble(1, 10);
1487        ajastin.Timeout += delegate
1488        {
1489            if (nopackages == false)
1490            {
1491                double luku = RandomGen.NextDouble(0, 100);
1492
1493                if (luku < 5 / vaikeustaso)
1494                {
1495                    if (pakettienlukumaara < 5/(vaikeustaso/2))
1496                    {
1497                        pakettienlukumaara += 1;
1498
1499                        if (Debug == true) MessageDisplay.Add("Paketti luotu.");
1500
1501                        int toinenluku = RandomGen.NextInt(1, 4);
1502
1503                        if (toinenluku == 1) Luohealthpaketti(paikka, ruudunkoko * 0.9, ruudunkoko * 0.9);
1504
1505                        if (toinenluku == 2) Luosuojapaketti(paikka, ruudunkoko * 0.9, ruudunkoko * 0.9);
1506
1507                        if (toinenluku == 3) Luoasepaketti(paikka, ruudunkoko * 0.9, ruudunkoko * 0.9);
1508                    }
1509                }
1510            }
1511        };
1512        ajastin.Start();
1513    }
1514
1515    #endregion
1516
1517    #endregion
1518
1519    #endregion
1520
1521    #region Pelin lopetus
1522
1523    void Pelipaattyi()
1524    {
1525        aikalaskuri.Stop();
1526
1527        IsPaused = true;
1528
1529        Lataakaikki(true, survivalkentannro, pelaajienlukumaara);
1530
1531        pistelaskuri.Value = pistelaskuri.Value += (int)Math.Round(aikalaskuri.SecondCounter.Value);
1532
1533        HighScoreWindow topIkkuna = new HighScoreWindow(
1534                             "Highscores",
1535                             "Congratulations, you made it to the high score list with \n{0:0.##} points! Enter your name" + (pelaajat.Count == 2 ? "s" : "") + ":",
1536                             pistelista, pistelaskuri);
1537        topIkkuna.List.ScoreFormat = "{0:0.##}";
1538        topIkkuna.Closed += delegate
1539        {
1540            TallennaLista();
1541            Tallennakaikki();
1542            Begin();
1543        };
1544        Add(topIkkuna);
1545    }
1546
1547    #endregion
1548}
Note: See TracBrowser for help on using the repository browser.