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

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