source: 2012/23/AnttiR/From above/FysiikkaPeli2/FysiikkaPeli2/FromAbove.cs @ 4038

Revision 4038, 83.8 KB checked in by juiitamm, 6 years ago (diff)
Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9
10public class Pelaaja : PhysicsObject
11{
12    public DoubleMeter elamaMittari;
13    public DoubleMeter turbomittari;
14    public DoubleMeter Ammusmittari;
15    public DoubleMeter Pistemittari;
16    public double Latausnopeus;
17    public double Latapati;
18    public bool lataamassa = false;
19    public bool Recoil = false;
20    public bool kuollut = false;
21    public bool HasFlag = false;
22    public double liikkumisnopeus;
23    public DoubleMeter Pisteputki;
24    public Explosion Viimeisinrajahdus = null;
25    public double Ampumisnopeus;
26    public Image Asekuva;
27    public string Ase;
28    public Vector viimeisinSuunta = Vector.Zero;
29    public PhysicsObject apupallo;
30    public List<Vector> spawnLista;
31
32
33    public Pelaaja(double leveys, double korkeus)
34        : base(leveys, korkeus)
35    {
36        elamaMittari = new DoubleMeter(500, 0, 500);
37        turbomittari = new DoubleMeter(50, 0, 100);
38        Ammusmittari = new DoubleMeter(250, 0, 250);
39        Pistemittari = new DoubleMeter(0, 0, 3000);
40        Pisteputki = new DoubleMeter(0, 0, 10);
41        spawnLista = new List<Vector>();
42        Ampumisnopeus = 512;
43        Latausnopeus = 6.0;
44        Latapati = 250;
45        liikkumisnopeus = 155;
46
47        Timer ajastin = new Timer();
48        ajastin.Interval = 1.0;
49        ajastin.Timeout += delegate { turbomittari.Value += 5; };
50        ajastin.Start();
51    }
52
53    public override void Destroy()
54    {
55        if (apupallo != null) this.apupallo.Destroy();
56        base.Destroy();
57    }
58}
59public class Zombi : PhysicsObject
60{
61    public DoubleMeter elamaMittari;
62    public Explosion Viimeisinrajahdus = null;
63    public static int Zombinvauhti = 100;
64    public static int Zombinelpit = 200;
65    public static int Zombinvahinko = 50;
66
67    public Zombi(double leveys, double korkeus)
68        : base(leveys, korkeus)
69    {
70        elamaMittari = new DoubleMeter(Zombinelpit, 0, Zombinelpit);
71    }
72}
73public class Flag : PhysicsObject
74{
75    public bool OnLippu = false;
76    public bool OnPunainen = false;
77
78    public Flag(double leveys, double korkeus)
79        : base(leveys, korkeus)
80    {
81
82    }
83
84}
85public class Hautausmaa : PhysicsObject
86{
87    public DoubleMeter Elpit;
88    public bool OnKunnossa = true;
89
90    public Hautausmaa(double leveys, double korkeus)
91        : base(leveys, korkeus)
92    {
93        Elpit = new DoubleMeter(1500, 0, 1500);
94    }
95
96}
97public class FromAbove : PhysicsGame
98{
99    Pelaaja pallo;
100    Pelaaja pallo2;
101    Pelaaja pallo3;
102    Pelaaja pallo4;
103    Vector syntymispaikka;
104    Vector spawni2;
105    Flag sinilippu;
106    Flag punalippu;
107    Label pisteLukub = new Label();
108    String asevalinta = "";
109
110    ScoreList topZombeissa = new ScoreList(10, false, 0);
111
112    Vector siirtyma = new Vector(0, 130);
113    List<Vector> kultaLista = new List<Vector>();
114    List<Vector> elppibonusLista = new List<Vector>();
115    List<Vector> Hautausmaalista = new List<Vector>();
116    List<Pelaaja> pelaajat = new List<Pelaaja>();
117    Color[] varit = { Color.Blue, Color.Red, Color.Yellow, Color.Green };
118
119    PhysicsObject alareuna;
120    List<GameObject> aseKuvakkeet = new List<GameObject>();
121    GameObject Sinikuva;
122    GameObject Punakuva;
123    GameObject Keltakuva;
124    GameObject Viherkuva;
125    GameObject Text;
126    GameObject Text2;
127
128    int kuolemat = 0;
129    int pelaajienmaara = 2;
130
131    BarGauge elppiPalkki = new BarGauge(150, 75);
132    BarGauge elppiPalkki2 = new BarGauge(150, 75);
133    BarGauge elppiPalkki3 = new BarGauge(150, 75);
134    BarGauge elppiPalkki4 = new BarGauge(150, 75);
135    ProgressBar turboPalkki = new ProgressBar(150, 50);
136    ProgressBar turboPalkki2 = new ProgressBar(150, 50);
137    ProgressBar turboPalkki3 = new ProgressBar(150, 50);
138    ProgressBar turboPalkki4 = new ProgressBar(150, 50);
139    BarGauge ammusPalkki = new BarGauge(50, 150);
140    BarGauge ammusPalkki2 = new BarGauge(50, 150);
141    BarGauge ammusPalkki3 = new BarGauge(50, 150);
142    BarGauge ammusPalkki4 = new BarGauge(50, 150);
143    BarGauge pistePalkki1 = new BarGauge(200, 40);
144    BarGauge pistePalkki2 = new BarGauge(200, 40);
145    BarGauge pistePalkki3 = new BarGauge(200, 40);
146    BarGauge pistePalkki4 = new BarGauge(200, 40);
147    Image sPati = LoadImage("Punapati");
148    Image vPati = LoadImage("Keltapati");
149    Image kPati = LoadImage("Viherpati");
150    Image Boom = LoadImage("Boom!++++++");
151    Image Elppilaatikko = LoadImage("Elppilaatikko");
152    Image pPati = LoadImage("Sinipati");
153    Image kransu = LoadImage("kransu");
154    Image Sydan = LoadImage("Heart");
155    Image salama = LoadImage("Lightning");
156    Image Shotgun = LoadImage("Striker");
157    Image Famas = LoadImage("Famas");
158    Image Caliber = LoadImage("Caliber 89");
159    Image Ak47u = LoadImage("Aku");
160    Image Flag = LoadImage("Flag");
161    Image Sniper = LoadImage("Barret");
162    Image Light = LoadImage("Light");
163    Image HMG = LoadImage("HMG");
164    Image MGH = LoadImage("Dragunov");
165    Image Spas = LoadImage("Spas12");
166    Image kulta = LoadImage("Kulta");
167
168    Image Sinitanko = LoadImage("SiniLippuTanko");
169    Image Sinilippu = LoadImage("SiniLippuTankoLippu");
170    Image Blulippu = LoadImage("BluFlag");
171    Image Redlippu = LoadImage("RedFlag");
172    Image Punatanko = LoadImage("PunaLippuTanko");
173    Image Punalippu = LoadImage("PunaLippuTankoLippu");
174
175    Image elppibonus = LoadImage("Elppibonus");
176    Image energiabonus = LoadImage("Energiabonus");
177    Image palikka = LoadImage("Palikka");
178    Image vaarapalikka = LoadImage("Vaara");
179
180    Image ZOMBI = LoadImage("Zombi");
181    Image Hauta = LoadImage("Hautakivikakkaperkele");
182    Image HautaRikki = LoadImage("Hautakivikakkaperkelehakattupaska");
183
184    SoundEffect Kolikonkerays = LoadSoundEffect("coin-drop-5");
185    SoundEffect Healaus = LoadSoundEffect("tablet-bottle-1");
186    SoundEffect Lataus = LoadSoundEffect("gun-cocking-01");
187
188    bool Kenttalad;
189    bool CTF;
190    bool Zsurvival;
191
192    public override void Begin()
193    {
194        playerscontrollers();
195    }
196
197    void AloitaAlusta()
198    {
199        Kenttalad = false;
200        CTF = false;
201        Zsurvival = false;
202
203        topZombeissa = DataStorage.TryLoad<ScoreList>(topZombeissa, "pisteet.xml");
204        Level.Background.CreateGradient(Color.Black, Color.Black);
205        Timer.SingleShot(0.1, delegate
206        {
207            Pause();
208            Luokentta();
209            AsetaOhjaimet();
210            Alkuvalikko();
211        });
212
213    }
214
215    Pelaaja Luopallo(Color vari, double x, double y)
216    {
217        Pelaaja pallo = new Pelaaja(25, 25);
218        pallo.elamaMittari.LowerLimit += delegate { Pelaajakuoli(pallo); };
219        pallo.Pistemittari.UpperLimit += delegate { Maxpointsreached(pallo); };
220        pallo.Shape = Shape.Circle;
221        pallo.Restitution = 0.0;
222        pallo.X = x;
223        pallo.Y = y;
224        pallo.CanRotate = false;
225        pallo.Tag = "pallo";
226        pallo.Ase = "Heavy";
227        pallo.Asekuva = HMG;
228        pallo.Color = vari;
229
230        PhysicsObject apupallo = new PhysicsObject(5, 5);
231        apupallo.IgnoresCollisionResponse = true;
232        apupallo.IgnoresGravity = true;
233        apupallo.IsVisible = false;
234        apupallo.Position = pallo.Position;
235        FollowerBrain fb = new FollowerBrain(pallo);
236        fb.Speed = 100000;
237        apupallo.Brain = fb;
238        pallo.apupallo = apupallo;
239        AddCollisionHandler(apupallo, "Vaara!", delegate(PhysicsObject p, PhysicsObject o) { pallo.elamaMittari.Value = pallo.elamaMittari.MinValue; });
240        AddCollisionHandler(apupallo, "Flag", delegate(PhysicsObject p, Flag f) { LippuTankoKosketus(pallo, f); });
241        // AddCollisionHandler(apupallo, "BlueFlag", delegate(PhysicsObject p, Flag f) { LippuTankoKosketus(pallo, f); });
242        Add(pallo);
243        Add(apupallo, 1);
244        AddCollisionHandler(pallo, "Kulta", Kullankerays);
245        AddCollisionHandler(pallo, "Elppibonus", Elppibonuskerays);
246        AddCollisionHandler(pallo, "Turbobonus", Vauhtibonuskerays);
247        AddCollisionHandler<Pelaaja, Zombi>(pallo, "Zombi", ZombiHyokkaa);
248        return pallo;
249    }
250    void Luokentta()
251    {
252        Sinikuva = new GameObject(HMG);
253        Sinikuva.Position = new Vector(-165, -260);
254        Sinikuva.Width = 150;
255        Sinikuva.Height = 75;
256        Add(Sinikuva);
257        aseKuvakkeet.Add(Sinikuva);
258
259        elppiPalkki.BindTo(pallo.elamaMittari);
260        elppiPalkki.BarColor = Color.Red;
261        elppiPalkki.BorderColor = Color.Black;
262        elppiPalkki.Position = new Vector(-400, -260);
263        Add(elppiPalkki, 0);
264        Label laatikko = new Label();
265        laatikko.Size = new Vector(150, 75);
266        laatikko.Image = Elppilaatikko;
267        laatikko.Position = elppiPalkki.Position;
268        Add(laatikko, 1);
269
270        turboPalkki.BindTo(pallo.turbomittari);
271        turboPalkki.BarColor = new Color(Color.DarkBlue, 50);
272        turboPalkki.BorderColor = Color.Black;
273        turboPalkki.Position = new Vector(-165, -260);
274        turboPalkki.Size = new Vector(150, 75);
275        Add(turboPalkki);
276
277        ammusPalkki.BindTo(pallo.Ammusmittari);
278        ammusPalkki.BarColor = Color.Yellow;
279        ammusPalkki.BorderColor = Color.Black;
280        ammusPalkki.Position = new Vector(-305, -260);
281        ammusPalkki.Size = new Vector(40, 75);
282        Add(ammusPalkki);
283
284        pistePalkki1.BindTo(pallo.Pistemittari);
285        pistePalkki1.BarColor = Color.Blue;
286        pistePalkki1.BorderColor = Color.White;
287        pistePalkki1.Position = new Vector(-261, -260);
288        pistePalkki1.Size = new Vector(40, 75);
289        Add(pistePalkki1);
290
291        Label pisteLuku1 = new Label();
292        pisteLuku1.BindTo(pallo.Pistemittari);
293        pisteLuku1.Position = pistePalkki1.Position;
294        pisteLuku1.TextColor = Color.LightBlue;
295        pisteLuku1.Angle = Angle.FromDegrees(90);
296        pisteLuku1.Font = Font.DefaultSmall;
297        Add(pisteLuku1);
298
299
300        Punakuva = new GameObject(HMG);
301        Punakuva.Position = new Vector(165, -260);
302        Punakuva.Width = 150;
303        Punakuva.Height = 75;
304        Add(Punakuva);
305        aseKuvakkeet.Add(Punakuva);
306
307        elppiPalkki2.BindTo(pallo2.elamaMittari);
308        elppiPalkki2.BarColor = Color.Red;
309        elppiPalkki2.BorderColor = Color.Black;
310        elppiPalkki2.Position = new Vector(400, -260);
311        Add(elppiPalkki2, 0);
312        Label laatikko2 = new Label();
313        laatikko2.Size = new Vector(150, 75);
314        laatikko2.Image = Elppilaatikko;
315        laatikko2.Position = elppiPalkki2.Position;
316        Add(laatikko2, 1);
317
318        turboPalkki2.BindTo(pallo2.turbomittari);
319        turboPalkki2.BarColor = new Color(Color.DarkBlue, 50);
320        turboPalkki2.BorderColor = Color.Black;
321        turboPalkki2.Position = new Vector(165, -260);
322        turboPalkki2.Size = new Vector(150, 75);
323        Add(turboPalkki2);
324
325        ammusPalkki2.BindTo(pallo2.Ammusmittari);
326        ammusPalkki2.BarColor = Color.Yellow;
327        ammusPalkki2.BorderColor = Color.Black;
328        ammusPalkki2.Position = new Vector(305, -260);
329        ammusPalkki2.Size = new Vector(40, 75);
330        Add(ammusPalkki2);
331
332        pistePalkki2.BindTo(pallo2.Pistemittari);
333        pistePalkki2.BarColor = Color.Red;
334        pistePalkki2.BorderColor = Color.White;
335        pistePalkki2.Position = new Vector(261, -260);
336        pistePalkki2.Size = new Vector(40, 75);
337        Add(pistePalkki2);
338
339        Label pisteLuku2 = new Label();
340        pisteLuku2.BindTo(pallo2.Pistemittari);
341        pisteLuku2.Position = pistePalkki2.Position;
342        pisteLuku2.TextColor = Color.DarkRed;
343        pisteLuku2.Angle = Angle.FromDegrees(90);
344        pisteLuku2.Font = Font.DefaultSmall;
345        Add(pisteLuku2);
346
347        if (pelaajienmaara >= 3)
348        {
349            Keltakuva = new GameObject(HMG);
350            Keltakuva.Position = new Vector(-165, -340);
351            Keltakuva.Width = 150;
352            Keltakuva.Height = 75;
353            Add(Keltakuva);
354            aseKuvakkeet.Add(Keltakuva);
355
356            elppiPalkki3.BindTo(pallo3.elamaMittari);
357            elppiPalkki3.BarColor = Color.Red;
358            elppiPalkki3.BorderColor = Color.Black;
359            elppiPalkki3.Position = new Vector(-400, -340);
360            Add(elppiPalkki3, 0);
361            Label laatikko3 = new Label();
362            laatikko3.Size = new Vector(150, 75);
363            laatikko3.Image = Elppilaatikko;
364            laatikko3.Position = elppiPalkki3.Position;
365            Add(laatikko3, 1);
366
367            turboPalkki3.BindTo(pallo3.turbomittari);
368            turboPalkki3.BorderColor = Color.Black;
369            turboPalkki3.Position = new Vector(-165, -340);
370            turboPalkki3.Size = new Vector(150, 75);
371            turboPalkki3.BarColor = new Color(Color.DarkBlue, 50);
372            Add(turboPalkki3);
373
374            ammusPalkki3.BindTo(pallo3.Ammusmittari);
375            ammusPalkki3.BarColor = Color.Yellow;
376            ammusPalkki3.BorderColor = Color.Black;
377            ammusPalkki3.Position = new Vector(-305, -340);
378            ammusPalkki3.Size = new Vector(40, 75);
379            Add(ammusPalkki3);
380
381            pistePalkki3.BindTo(pallo3.Pistemittari);
382            pistePalkki3.BarColor = Color.LightGreen;
383            pistePalkki3.BorderColor = Color.White;
384            pistePalkki3.Position = new Vector(-261, -340);
385            pistePalkki3.Size = new Vector(40, 75);
386            Add(pistePalkki3);
387
388            Label pisteLuku3 = new Label();
389            pisteLuku3.BindTo(pallo3.Pistemittari);
390            pisteLuku3.Position = pistePalkki3.Position;
391            pisteLuku3.TextColor = Color.Green;
392            pisteLuku3.Font = Font.DefaultSmall;
393            pisteLuku3.Angle = Angle.FromDegrees(90);
394            Add(pisteLuku3);
395
396        }
397
398        if (pelaajienmaara == 4)
399        {
400            Viherkuva = new GameObject(HMG);
401            Viherkuva.Position = new Vector(165, -340);
402            Viherkuva.Width = 150;
403            Viherkuva.Height = 75;
404            Add(Viherkuva);
405            aseKuvakkeet.Add(Viherkuva);
406
407            elppiPalkki4.BindTo(pallo4.elamaMittari);
408            elppiPalkki4.BarColor = Color.Red;
409            elppiPalkki4.BorderColor = Color.Black;
410            elppiPalkki4.Position = new Vector(400, -340);
411            Add(elppiPalkki4, 0);
412            Label laatikko4 = new Label();
413            laatikko4.Size = new Vector(150, 75);
414            laatikko4.Image = Elppilaatikko;
415            laatikko4.Position = elppiPalkki4.Position;
416            Add(laatikko4, 1);
417
418            turboPalkki4.BindTo(pallo4.turbomittari);
419            turboPalkki4.BorderColor = Color.Black;
420            turboPalkki4.Position = new Vector(165, -340);
421            turboPalkki4.Size = new Vector(150, 75);
422            turboPalkki4.BarColor = new Color(Color.DarkBlue, 50);
423            Add(turboPalkki4);
424
425            ammusPalkki4.BindTo(pallo4.Ammusmittari);
426            ammusPalkki4.BarColor = Color.Yellow;
427            ammusPalkki4.BorderColor = Color.Black;
428            ammusPalkki4.Position = new Vector(305, -340);
429            ammusPalkki4.Size = new Vector(40, 75);
430            Add(ammusPalkki4);
431
432            pistePalkki4.BindTo(pallo4.Pistemittari);
433            pistePalkki4.BarColor = Color.Red;
434            pistePalkki4.BorderColor = Color.White;
435            pistePalkki4.Position = new Vector(261, -340);
436            pistePalkki4.Size = new Vector(40, 75);
437            Add(pistePalkki4);
438
439            Label pisteLuku4 = new Label();
440            pisteLuku4.BindTo(pallo4.Pistemittari);
441            pisteLuku4.Position = pistePalkki4.Position;
442            pisteLuku4.TextColor = Color.Yellow;
443            pisteLuku4.Angle = Angle.FromDegrees(90);
444            pisteLuku4.Font = Font.DefaultSmall;
445            Add(pisteLuku4);
446        }
447    }
448    void AsetaOhjaimet()
449    {
450
451        switch (pelaajat.Count)
452        {
453            #region 2Pelaajaa
454            case 2:
455                if (ControllerOne.IsConnected)
456                {
457                    ControllerOne.ListenAnalog(AnalogControl.LeftStick, -1, LiikutaTatilla, "Liikuta", pallo);
458                    ControllerOne.ListenAnalog(AnalogControl.RightStick, 0, TahtaaTatilla, "tahtaa", pallo);
459                    ControllerOne.Listen(Button.LeftStick, ButtonState.Pressed, Kayta, "Pelaaja 1:Käytä turbo", pallo);
460                    ControllerOne.Listen(Button.B, ButtonState.Pressed, Tayta, "Pelaaja 1:Paranna elamia", pallo);
461                    ControllerOne.Listen(Button.A, ButtonState.Pressed, Lataa, "Pelaaja 1:Lataa ase", pallo);
462                    ControllerOne.Listen(Button.RightTrigger, ButtonState.Pressed, HKranaatti, "Pelaaja 1:Heita kranaatti", pallo, ControllerOne); // heitetään kranaatti siihen suuntaan mihin on viimeksi liikuttu
463                    ControllerOne.Listen(Button.RightShoulder, ButtonState.Down, AmmuOhjaimella, "Pelaaja 1: ammu", pallo, pPati);
464                }
465                else
466                {
467                    Keyboard.Listen(Key.D, ButtonState.Down, Liikuta, "Pelaaja 1 liiku oikealle", pallo, new Vector(pallo.liikkumisnopeus * 1, 0));
468                    Keyboard.Listen(Key.D, ButtonState.Released, Liikuta, null, pallo, Vector.Zero);
469                    Keyboard.Listen(Key.W, ButtonState.Down, Liikuta, "Pelaaja 1 liiku ylös", pallo, new Vector(0, pallo.liikkumisnopeus * 1));
470                    Keyboard.Listen(Key.W, ButtonState.Released, Liikuta, null, pallo, Vector.Zero);
471                    Keyboard.Listen(Key.S, ButtonState.Down, Liikuta, "Pelaaja 1 liiku alas", pallo, new Vector(0, -pallo.liikkumisnopeus * 1));
472                    Keyboard.Listen(Key.S, ButtonState.Released, Liikuta, null, pallo, Vector.Zero);
473                    Keyboard.Listen(Key.A, ButtonState.Down, Liikuta, "Pelaaja 1 liiku vasemmalle", pallo, new Vector(-pallo.liikkumisnopeus * 1, 0));
474                    Keyboard.Listen(Key.A, ButtonState.Released, Liikuta, null, pallo, Vector.Zero);
475                    Keyboard.Listen(Key.Q, ButtonState.Pressed, Kayta, "Pelaaja 1:Käytä turbo", pallo);
476                    Keyboard.Listen(Key.U, ButtonState.Pressed, Tayta, "Pelaaja 1:Paranna elamia", pallo);
477                    Keyboard.Listen(Key.E, ButtonState.Pressed, Lataa, "Pelaaja 1:Lataa ase", pallo);
478                    Keyboard.Listen(Key.T, ButtonState.Pressed, HKranaatti, "Pelaaja 1:Heita kranaatti", pallo); // heitetään kranaatti siihen suuntaan mihin on viimeksi liikuttu
479                    Keyboard.Listen(Key.Y, ButtonState.Down, Ammu, "Pelaaja 1: ammu", pallo, new Vector(0, 1), pPati);
480                    Keyboard.Listen(Key.H, ButtonState.Down, Ammu, "Pelaaja 1: ammu", pallo, new Vector(0, -1), pPati);
481                    Keyboard.Listen(Key.G, ButtonState.Down, Ammu, "Pelaaja 1: ammu", pallo, new Vector(-1, 0), pPati);
482                    Keyboard.Listen(Key.J, ButtonState.Down, Ammu, "Pelaaja 1: ammu", pallo, new Vector(1, 0), pPati);
483                }
484                if (ControllerTwo.IsConnected)
485                {
486                    ControllerTwo.ListenAnalog(AnalogControl.LeftStick, -1, LiikutaTatilla, "Liikuta", pallo2);
487                    ControllerTwo.ListenAnalog(AnalogControl.RightStick, 0, TahtaaTatilla, "tahtaa", pallo2);
488                    ControllerTwo.Listen(Button.LeftStick, ButtonState.Pressed, Kayta, "Pelaaja 2:Käytä turbo", pallo2);
489                    ControllerTwo.Listen(Button.B, ButtonState.Pressed, Tayta, "Pelaaja 2:Paranna elamia", pallo2);
490                    ControllerTwo.Listen(Button.A, ButtonState.Pressed, Lataa, "Pelaaja 2:Lataa ase", pallo2);
491                    ControllerTwo.Listen(Button.RightTrigger, ButtonState.Pressed, HKranaatti, "Pelaaja heitä kranaatti", pallo2, ControllerTwo); // heitetään kranaatti siihen suuntaan mihin on viimeksi tähdatty
492                    ControllerTwo.Listen(Button.RightShoulder, ButtonState.Down, AmmuOhjaimella, "Pelaaja 2: ammu", pallo2, sPati);
493                }
494                else
495                {
496                    Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, "Pelaaja 2 liiku oikealle", pallo2, new Vector(pallo2.liikkumisnopeus * 1, 0));
497                    Keyboard.Listen(Key.Right, ButtonState.Released, Liikuta, null, pallo2, Vector.Zero);
498                    Keyboard.Listen(Key.Up, ButtonState.Down, Liikuta, "Pelaaja 2 liiku ylös", pallo2, new Vector(0, pallo2.liikkumisnopeus * 1));
499                    Keyboard.Listen(Key.Up, ButtonState.Released, Liikuta, null, pallo2, Vector.Zero);
500                    Keyboard.Listen(Key.Down, ButtonState.Down, Liikuta, "Pelaaja 2 liiku alas", pallo2, new Vector(0, -pallo2.liikkumisnopeus * 1));
501                    Keyboard.Listen(Key.Down, ButtonState.Released, Liikuta, null, pallo2, Vector.Zero);
502                    Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, "Pelaaja 2 liiku vasemmalle", pallo2, new Vector(-pallo2.liikkumisnopeus * 1, 0));
503                    Keyboard.Listen(Key.Left, ButtonState.Released, Liikuta, null, pallo2, Vector.Zero);
504                    Keyboard.Listen(Key.RightControl, ButtonState.Pressed, Kayta, "Pelaaja 2:Käytä turbo", pallo2);
505                    Keyboard.Listen(Key.NumPad9, ButtonState.Pressed, Tayta, "Pelaaja 2:Paranna elamia", pallo2);
506                    Keyboard.Listen(Key.NumPad2, ButtonState.Pressed, Lataa, "Pelaaja 2:Lataa ase", pallo2);
507                    Keyboard.Listen(Key.NumPad7, ButtonState.Pressed, HKranaatti, "Pelaaja 2:Heita kranaatti", pallo2);
508                    Keyboard.Listen(Key.NumPad8, ButtonState.Down, Ammu, "Pelaaja 2: ammu", pallo2, new Vector(0, 1), sPati);
509                    Keyboard.Listen(Key.NumPad5, ButtonState.Down, Ammu, "Pelaaja 2: ammu", pallo2, new Vector(0, -1), sPati);
510                    Keyboard.Listen(Key.NumPad4, ButtonState.Down, Ammu, "Pelaaja 2: ammu", pallo2, new Vector(-1, 0), sPati);
511                    Keyboard.Listen(Key.NumPad6, ButtonState.Down, Ammu, "Pelaaja 2: ammu", pallo2, new Vector(1, 0), sPati);
512                }
513
514                break;
515            #endregion
516            #region 3Pelaajaa
517            case 3:
518                if (ControllerOne.IsConnected)
519                {
520                    ControllerOne.ListenAnalog(AnalogControl.LeftStick, -1, LiikutaTatilla, "Liikuta", pallo);
521                    ControllerOne.ListenAnalog(AnalogControl.RightStick, 0, TahtaaTatilla, "tahtaa", pallo);
522                    ControllerOne.Listen(Button.LeftStick, ButtonState.Pressed, Kayta, "Pelaaja 1:Käytä turbo", pallo);
523                    ControllerOne.Listen(Button.B, ButtonState.Pressed, Tayta, "Pelaaja 1:Paranna elamia", pallo);
524                    ControllerOne.Listen(Button.A, ButtonState.Pressed, Lataa, "Pelaaja 1:Lataa ase", pallo);
525                    ControllerOne.Listen(Button.RightTrigger, ButtonState.Pressed, HKranaatti, "Pelaaja 1:Heita kranaatti", pallo, ControllerOne); // heitetään kranaatti siihen suuntaan mihin on viimeksi liikuttu
526                    ControllerOne.Listen(Button.RightShoulder, ButtonState.Down, AmmuOhjaimella, "Pelaaja 1: ammu", pallo, pPati);
527                }
528                // Pelaaja 2
529                if (ControllerTwo.IsConnected)
530                {
531                    ControllerTwo.ListenAnalog(AnalogControl.LeftStick, -1, LiikutaTatilla, "Liikuta", pallo2);
532                    ControllerTwo.ListenAnalog(AnalogControl.RightStick, 0, TahtaaTatilla, "tahtaa", pallo2);
533                    ControllerTwo.Listen(Button.LeftStick, ButtonState.Pressed, Kayta, "Pelaaja 2:Käytä turbo", pallo2);
534                    ControllerTwo.Listen(Button.B, ButtonState.Pressed, Tayta, "Pelaaja 2:Paranna elamia", pallo2);
535                    ControllerTwo.Listen(Button.A, ButtonState.Pressed, Lataa, "Pelaaja 2:Lataa ase", pallo2);
536                    ControllerTwo.Listen(Button.RightTrigger, ButtonState.Pressed, HKranaatti, "Pelaaja heitä kranaatti", pallo2, ControllerTwo); // heitetään kranaatti siihen suuntaan mihin on viimeksi tähdatty
537                    ControllerTwo.Listen(Button.RightShoulder, ButtonState.Down, AmmuOhjaimella, "Pelaaja 2: ammu", pallo2, sPati);
538                }
539                else
540                {
541                    Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, "Pelaaja 2 liiku oikealle", pallo2, new Vector(pallo2.liikkumisnopeus * 1, 0));
542                    Keyboard.Listen(Key.Right, ButtonState.Released, Liikuta, null, pallo2, Vector.Zero);
543                    Keyboard.Listen(Key.Up, ButtonState.Down, Liikuta, "Pelaaja 2 liiku ylös", pallo2, new Vector(0, pallo2.liikkumisnopeus * 1));
544                    Keyboard.Listen(Key.Up, ButtonState.Released, Liikuta, null, pallo2, Vector.Zero);
545                    Keyboard.Listen(Key.Down, ButtonState.Down, Liikuta, "Pelaaja 2 liiku alas", pallo2, new Vector(0, -pallo2.liikkumisnopeus * 1));
546                    Keyboard.Listen(Key.Down, ButtonState.Released, Liikuta, null, pallo2, Vector.Zero);
547                    Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, "Pelaaja 2 liiku vasemmalle", pallo2, new Vector(-pallo2.liikkumisnopeus * 1, 0));
548                    Keyboard.Listen(Key.Left, ButtonState.Released, Liikuta, null, pallo2, Vector.Zero);
549                    Keyboard.Listen(Key.RightControl, ButtonState.Pressed, Kayta, "Pelaaja 2:Käytä turbo", pallo2);
550                    Keyboard.Listen(Key.NumPad9, ButtonState.Pressed, Tayta, "Pelaaja 2:Paranna elamia", pallo2);
551                    Keyboard.Listen(Key.NumPad2, ButtonState.Pressed, Lataa, "Pelaaja 2:Lataa ase", pallo2);
552                    Keyboard.Listen(Key.NumPad7, ButtonState.Pressed, HKranaatti, "Pelaaja 2:Heita kranaatti", pallo2);
553                    Keyboard.Listen(Key.NumPad8, ButtonState.Down, Ammu, "Pelaaja 2: ammu", pallo2, new Vector(0, 1), sPati);
554                    Keyboard.Listen(Key.NumPad5, ButtonState.Down, Ammu, "Pelaaja 2: ammu", pallo2, new Vector(0, -1), sPati);
555                    Keyboard.Listen(Key.NumPad4, ButtonState.Down, Ammu, "Pelaaja 2: ammu", pallo2, new Vector(-1, 0), sPati);
556                    Keyboard.Listen(Key.NumPad6, ButtonState.Down, Ammu, "Pelaaja 2: ammu", pallo2, new Vector(1, 0), sPati);
557                }
558
559                if (ControllerThree.IsConnected)
560                {
561                    ControllerThree.ListenAnalog(AnalogControl.LeftStick, -1, LiikutaTatilla, "Liikuta", pallo3);
562                    ControllerThree.ListenAnalog(AnalogControl.RightStick, 0, TahtaaTatilla, "tahtaa", pallo3);
563                    ControllerThree.Listen(Button.LeftStick, ButtonState.Pressed, Kayta, "Pelaaja 3:Käytä turbo", pallo3);
564                    ControllerThree.Listen(Button.B, ButtonState.Pressed, Tayta, "Pelaaja 3:Paranna elamia", pallo3);
565                    ControllerThree.Listen(Button.A, ButtonState.Pressed, Lataa, "Pelaaja 3:Lataa ase", pallo3);
566                    ControllerThree.Listen(Button.RightTrigger, ButtonState.Pressed, HKranaatti, "Pelaaja 3:Heita kranaatti", pallo3, ControllerThree); // heitetään kranaatti siihen suuntaan mihin on viimeksi liikuttu
567                    ControllerThree.Listen(Button.RightShoulder, ButtonState.Down, AmmuOhjaimella, "Pelaaja 3: ammu", pallo3, kPati);
568                }
569                else
570                {
571                    Keyboard.Listen(Key.D, ButtonState.Down, Liikuta, "Pelaaja 1 liiku oikealle", pallo3, new Vector(pallo3.liikkumisnopeus * 1, 0));
572                    Keyboard.Listen(Key.D, ButtonState.Released, Liikuta, null, pallo3, Vector.Zero);
573                    Keyboard.Listen(Key.W, ButtonState.Down, Liikuta, "Pelaaja 1 liiku ylös", pallo3, new Vector(0, pallo3.liikkumisnopeus * 1));
574                    Keyboard.Listen(Key.W, ButtonState.Released, Liikuta, null, pallo3, Vector.Zero);
575                    Keyboard.Listen(Key.S, ButtonState.Down, Liikuta, "Pelaaja 1 liiku alas", pallo3, new Vector(0, -pallo3.liikkumisnopeus * 1));
576                    Keyboard.Listen(Key.S, ButtonState.Released, Liikuta, null, pallo3, Vector.Zero);
577                    Keyboard.Listen(Key.A, ButtonState.Down, Liikuta, "Pelaaja 1 liiku vasemmalle", pallo3, new Vector(-pallo3.liikkumisnopeus * 1, 0));
578                    Keyboard.Listen(Key.A, ButtonState.Released, Liikuta, null, pallo3, Vector.Zero);
579                    Keyboard.Listen(Key.Q, ButtonState.Pressed, Kayta, "Pelaaja 1:Käytä turbo", pallo3);
580                    Keyboard.Listen(Key.U, ButtonState.Pressed, Tayta, "Pelaaja 1:Paranna elamia", pallo3);
581                    Keyboard.Listen(Key.E, ButtonState.Pressed, Lataa, "Pelaaja 1:Lataa ase", pallo3);
582                    Keyboard.Listen(Key.T, ButtonState.Pressed, HKranaatti, "Pelaaja 1:Heita kranaatti", pallo3); // heitetään kranaatti siihen suuntaan mihin on viimeksi liikuttu
583                    Keyboard.Listen(Key.Y, ButtonState.Down, Ammu, "Pelaaja 1: ammu", pallo3, new Vector(0, 1), kPati);
584                    Keyboard.Listen(Key.H, ButtonState.Down, Ammu, "Pelaaja 1: ammu", pallo3, new Vector(0, -1), kPati);
585                    Keyboard.Listen(Key.G, ButtonState.Down, Ammu, "Pelaaja 1: ammu", pallo3, new Vector(-1, 0), kPati);
586                    Keyboard.Listen(Key.J, ButtonState.Down, Ammu, "Pelaaja 1: ammu", pallo3, new Vector(1, 0), kPati);
587                }
588
589
590
591
592
593                break;
594            #endregion
595            #region 4Pelaajaa
596            case 4:
597                ControllerOne.ListenAnalog(AnalogControl.LeftStick, -1, LiikutaTatilla, "Liikuta", pallo);
598                ControllerOne.ListenAnalog(AnalogControl.RightStick, 0, TahtaaTatilla, "tahtaa", pallo);
599                ControllerOne.Listen(Button.LeftStick, ButtonState.Pressed, Kayta, "Pelaaja 1:Käytä turbo", pallo);
600                ControllerOne.Listen(Button.B, ButtonState.Pressed, Tayta, "Pelaaja 1:Paranna elamia", pallo);
601                ControllerOne.Listen(Button.A, ButtonState.Pressed, Lataa, "Pelaaja 1:Lataa ase", pallo);
602                ControllerOne.Listen(Button.RightTrigger, ButtonState.Pressed, HKranaatti, "Pelaaja 1:Heita kranaatti", pallo, ControllerOne); // heitetään kranaatti siihen suuntaan mihin on viimeksi liikuttu
603                ControllerOne.Listen(Button.RightShoulder, ButtonState.Down, AmmuOhjaimella, "Pelaaja 1: ammu", pallo, pPati);
604
605                // Pelaaja 2
606                ControllerTwo.ListenAnalog(AnalogControl.LeftStick, -1, LiikutaTatilla, "Liikuta", pallo2);
607                ControllerTwo.ListenAnalog(AnalogControl.RightStick, 0, TahtaaTatilla, "tahtaa", pallo2);
608                ControllerTwo.Listen(Button.LeftStick, ButtonState.Pressed, Kayta, "Pelaaja 2:Käytä turbo", pallo2);
609                ControllerTwo.Listen(Button.B, ButtonState.Pressed, Tayta, "Pelaaja 2:Paranna elamia", pallo2);
610                ControllerTwo.Listen(Button.A, ButtonState.Pressed, Lataa, "Pelaaja 2:Lataa ase", pallo2);
611                ControllerTwo.Listen(Button.RightTrigger, ButtonState.Pressed, HKranaatti, "Pelaaja heitä kranaatti", pallo2, ControllerTwo); // heitetään kranaatti siihen suuntaan mihin on viimeksi tähdatty
612                ControllerTwo.Listen(Button.RightShoulder, ButtonState.Down, AmmuOhjaimella, "Pelaaja 2: ammu", pallo2, sPati);
613
614                // Pelaaja 3
615                if (ControllerThree.IsConnected)
616                {
617                    ControllerThree.ListenAnalog(AnalogControl.LeftStick, -1, LiikutaTatilla, "Liikuta", pallo3);
618                    ControllerThree.ListenAnalog(AnalogControl.RightStick, 0, TahtaaTatilla, "tahtaa", pallo3);
619                    ControllerThree.Listen(Button.LeftStick, ButtonState.Pressed, Kayta, "Pelaaja 3:Käytä turbo", pallo3);
620                    ControllerThree.Listen(Button.B, ButtonState.Pressed, Tayta, "Pelaaja 3:Paranna elamia", pallo3);
621                    ControllerThree.Listen(Button.A, ButtonState.Pressed, Lataa, "Pelaaja 3:Lataa ase", pallo3);
622                    ControllerThree.Listen(Button.RightTrigger, ButtonState.Pressed, HKranaatti, "Pelaaja 3:Heita kranaatti", pallo3, ControllerThree); // heitetään kranaatti siihen suuntaan mihin on viimeksi liikuttu
623                    ControllerThree.Listen(Button.RightShoulder, ButtonState.Down, AmmuOhjaimella, "Pelaaja 3: ammu", pallo3, kPati);
624                }
625                else
626                {
627                    Keyboard.Listen(Key.D, ButtonState.Down, Liikuta, "Pelaaja 3 liiku oikealle", pallo3, new Vector(pallo3.liikkumisnopeus * 1, 0));
628                    Keyboard.Listen(Key.D, ButtonState.Released, Liikuta, null, pallo3, Vector.Zero);
629                    Keyboard.Listen(Key.W, ButtonState.Down, Liikuta, "Pelaaja 3 liiku ylös", pallo3, new Vector(0, pallo3.liikkumisnopeus * 1));
630                    Keyboard.Listen(Key.W, ButtonState.Released, Liikuta, null, pallo3, Vector.Zero);
631                    Keyboard.Listen(Key.S, ButtonState.Down, Liikuta, "Pelaaja 3 liiku alas", pallo3, new Vector(0, -pallo3.liikkumisnopeus * 1));
632                    Keyboard.Listen(Key.S, ButtonState.Released, Liikuta, null, pallo3, Vector.Zero);
633                    Keyboard.Listen(Key.A, ButtonState.Down, Liikuta, "Pelaaja 3 liiku vasemmalle", pallo3, new Vector(-pallo3.liikkumisnopeus * 1, 0));
634                    Keyboard.Listen(Key.A, ButtonState.Released, Liikuta, null, pallo3, Vector.Zero);
635                    Keyboard.Listen(Key.Q, ButtonState.Pressed, Kayta, "Pelaaja 3:Käytä turbo", pallo3);
636                    Keyboard.Listen(Key.U, ButtonState.Pressed, Tayta, "Pelaaja 3:Paranna elamia", pallo3);
637                    Keyboard.Listen(Key.E, ButtonState.Pressed, Lataa, "Pelaaja 3:Lataa ase", pallo3);
638                    Keyboard.Listen(Key.T, ButtonState.Pressed, HKranaatti, "Pelaaja 3:Heita kranaatti", pallo3); // heitetään kranaatti siihen suuntaan mihin on viimeksi liikuttu
639                    Keyboard.Listen(Key.Y, ButtonState.Down, Ammu, "Pelaaja 3: ammu", pallo3, new Vector(0, 1), kPati);
640                    Keyboard.Listen(Key.H, ButtonState.Down, Ammu, "Pelaaja 3: ammu", pallo3, new Vector(0, -1), kPati);
641                    Keyboard.Listen(Key.G, ButtonState.Down, Ammu, "Pelaaja 3: ammu", pallo3, new Vector(-1, 0), kPati);
642                    Keyboard.Listen(Key.J, ButtonState.Down, Ammu, "Pelaaja 3: ammu", pallo3, new Vector(1, 0), kPati);
643                }
644                // pelaaja 4
645                if (ControllerFour.IsConnected)
646                {
647                    ControllerFour.ListenAnalog(AnalogControl.LeftStick, -1, LiikutaTatilla, "Liikuta", pallo4);
648                    ControllerFour.ListenAnalog(AnalogControl.RightStick, 0, TahtaaTatilla, "tahtaa", pallo4);
649                    ControllerFour.Listen(Button.LeftStick, ButtonState.Pressed, Kayta, "Pelaaja 4:Käytä turbo", pallo4);
650                    ControllerFour.Listen(Button.B, ButtonState.Pressed, Tayta, "Pelaaja 4:Paranna elamia", pallo4);
651                    ControllerFour.Listen(Button.A, ButtonState.Pressed, Lataa, "Pelaaja 4:Lataa ase", pallo4);
652                    ControllerFour.Listen(Button.RightTrigger, ButtonState.Pressed, HKranaatti, "Pelaaja 4 heitä kranaatti", pallo4, ControllerFour); // heitetään kranaatti siihen suuntaan mihin on viimeksi tähdatty
653                    ControllerFour.Listen(Button.RightShoulder, ButtonState.Down, AmmuOhjaimella, "Pelaaja 4: ammu", pallo4, vPati);
654                }
655                else
656                {
657                    Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, "Pelaaja 4 liiku oikealle", pallo4, new Vector(pallo4.liikkumisnopeus * 1, 0));
658                    Keyboard.Listen(Key.Right, ButtonState.Released, Liikuta, null, pallo4, Vector.Zero);
659                    Keyboard.Listen(Key.Up, ButtonState.Down, Liikuta, "Pelaaja 4 liiku ylös", pallo4, new Vector(0, pallo4.liikkumisnopeus * 1));
660                    Keyboard.Listen(Key.Up, ButtonState.Released, Liikuta, null, pallo4, Vector.Zero);
661                    Keyboard.Listen(Key.Down, ButtonState.Down, Liikuta, "Pelaaja 4 liiku alas", pallo4, new Vector(0, -pallo4.liikkumisnopeus * 1));
662                    Keyboard.Listen(Key.Down, ButtonState.Released, Liikuta, null, pallo4, Vector.Zero);
663                    Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, "Pelaaja 4 liiku vasemmalle", pallo4, new Vector(-pallo4.liikkumisnopeus * 1, 0));
664                    Keyboard.Listen(Key.Left, ButtonState.Released, Liikuta, null, pallo4, Vector.Zero);
665                    Keyboard.Listen(Key.RightControl, ButtonState.Pressed, Kayta, "Pelaaja 4:Käytä turbo", pallo4);
666                    Keyboard.Listen(Key.NumPad9, ButtonState.Pressed, Tayta, "Pelaaja 4:Paranna elamia", pallo4);
667                    Keyboard.Listen(Key.NumPad2, ButtonState.Pressed, Lataa, "Pelaaja 4:Lataa ase", pallo4);
668                    Keyboard.Listen(Key.NumPad7, ButtonState.Pressed, HKranaatti, "Pelaaja 4:Heita kranaatti", pallo4);
669                    Keyboard.Listen(Key.NumPad8, ButtonState.Down, Ammu, "Pelaaja 4: ammu", pallo4, new Vector(0, 1), vPati);
670                    Keyboard.Listen(Key.NumPad5, ButtonState.Down, Ammu, "Pelaaja 4: ammu", pallo4, new Vector(0, -1), vPati);
671                    Keyboard.Listen(Key.NumPad4, ButtonState.Down, Ammu, "Pelaaja 4: ammu", pallo4, new Vector(-1, 0), vPati);
672                    Keyboard.Listen(Key.NumPad6, ButtonState.Down, Ammu, "Pelaaja 4: ammu", pallo4, new Vector(1, 0), vPati);
673                }
674                break;
675            #endregion
676
677        }
678        //General
679        Keyboard.Listen(Key.P, ButtonState.Pressed, Alkuvalikko, "Vaihda aseita");
680    }
681    void AmmuOhjaimella(Pelaaja pallo, Image i)
682    {
683        if (pallo.viimeisinSuunta != Vector.Zero)
684            Ammu(pallo, pallo.viimeisinSuunta.Normalize(), i);
685    }
686    void Ammu(Pelaaja pallo1, Vector suunta, Image P)
687    {
688        if (pallo1.kuollut == true) return;
689        if (pallo1.Ammusmittari < 1) return;
690        if (pallo1.Recoil == true) return;
691
692        PhysicsObject ammus = new PhysicsObject(4, 4);
693        ammus.Position = pallo1.Position + suunta * 25;
694        ammus.Image = P;
695        ammus.Restitution = 0.0;
696        pallo1.Ammusmittari.Value -= 1;
697        ammus.Velocity = suunta * pallo1.Ampumisnopeus;
698        AddCollisionHandler(ammus, "tuhottava", AmmusOsui);
699        AddCollisionHandler(ammus, ammusosui);
700
701        Add(ammus);
702        ammus.Tag = "ammus";
703        ammus.CollisionIgnoreGroup = 1;
704
705        double vahinko = 0;
706
707        if (pallo.HasFlag == true)
708        {
709            ammus.MaximumLifetime = new TimeSpan(0, 0, 0, 0, 700);
710            vahinko = 150;
711            pallo1.Recoil = true;
712            Timer.SingleShot(0.5, delegate
713            {
714                pallo1.Recoil = false;
715            });
716        }
717        else if (pallo1.Ase == "HMG")
718        {
719
720            ammus.MaximumLifetime = new TimeSpan(0, 0, 0, 0, 700);
721            vahinko = 9;
722        }
723        else if (pallo1.Ase == "Famas")
724        {
725
726            ammus.MaximumLifetime = new TimeSpan(0, 0, 0, 0, 190);
727            pallo1.Recoil = true;
728            vahinko = 23;
729            Timer.SingleShot(0.03, delegate
730            {
731                pallo1.Recoil = false;
732            });
733
734
735        }
736        else if (pallo1.Ase == "LMG Type")
737        {
738
739            ammus.MaximumLifetime = new TimeSpan(0, 0, 0, 0, 500);
740            pallo1.Recoil = true;
741            vahinko = 14;
742            Timer.SingleShot(0.01, delegate
743            {
744                pallo1.Recoil = false;
745            });
746
747
748        }
749        else if (pallo1.Ase == "Dragunov")
750        {
751            pallo1.Recoil = true;
752            vahinko = 139;
753            Timer.SingleShot(0.4, delegate
754            {
755                pallo1.Recoil = false;
756            });
757
758        }
759        else if (pallo1.Ase == "Barret")
760        {
761            vahinko = 298;
762        }
763
764        else if (pallo1.Ase == "Ak")
765        {
766            ammus.MaximumLifetime = new TimeSpan(0, 0, 0, 0, 600);
767            pallo1.Recoil = true;
768            vahinko = 13;
769            Timer.SingleShot(0.01, delegate
770            {
771                pallo1.Recoil = false;
772            });
773        }
774        else if (pallo1.Ase == "Cal89")
775        {
776            ammus.MaximumLifetime = new TimeSpan(0, 0, 0, 0, 500);
777            pallo1.Recoil = true;
778            vahinko = 26;
779            Timer.SingleShot(0.1, delegate
780            {
781                pallo1.Recoil = false;
782            });
783        }
784        else if (pallo1.Ase == "Spas")
785        {
786            ammus.MaximumLifetime = new TimeSpan(0, 0, 0, 0, 100);
787            pallo1.Recoil = true;
788            vahinko = 219;
789            Timer.SingleShot(0.5, delegate
790            {
791                pallo1.Recoil = false;
792            });
793        }
794
795
796        else if (pallo1.Ase == "Shotgun")
797        {
798            ammus.MaximumLifetime = new TimeSpan(0, 0, 0, 0, 100);
799            pallo1.Recoil = true;
800            vahinko = 90;
801            Timer.SingleShot(0.4, delegate
802            {
803                pallo1.Recoil = false;
804            });
805
806
807            PhysicsObject hauli = new PhysicsObject(4, 4);
808            hauli.Position = pallo.Position + suunta * 25;
809            hauli.Image = P;
810            hauli.Tag = "ammus";
811            hauli.CollisionIgnoreGroup = 1;
812            hauli.Restitution = 0.0;
813            hauli.MaximumLifetime = new TimeSpan(0, 0, 0, 0, 70);
814            AddCollisionHandler(hauli, "tuhottava", AmmusOsui);
815            AddCollisionHandler(hauli, CollisionHandler.DestroyObject);
816            Add(hauli);
817            hauli.Velocity = suunta * pallo.Ampumisnopeus;
818            hauli.Velocity = Vector.FromLengthAndAngle(suunta.Magnitude, suunta.Angle + Angle.FromDegrees(-20)) * pallo.Ampumisnopeus;
819            AddCollisionHandler(hauli, "pallo", delegate(PhysicsObject tormaaja, PhysicsObject kohde)
820            {
821                if (!Zsurvival)
822                {
823                    Pelaaja kohdepelaaja = (Pelaaja)kohde;
824                    kohdepelaaja.elamaMittari.Value -= vahinko;
825                }
826            });
827            AddCollisionHandler(hauli, "Zombi", delegate(PhysicsObject tormaaja, PhysicsObject zombi)
828            {
829                Zombi zombi1 = (Zombi)zombi;
830                zombi1.elamaMittari.Value -= vahinko;
831                pallo.Pistemittari.Value += vahinko;
832
833            });
834
835            PhysicsObject hauli2 = new PhysicsObject(4, 4);
836            hauli2.Position = pallo.Position + suunta * 25;
837            hauli2.Image = P;
838            hauli2.Tag = "ammus";
839            hauli2.CollisionIgnoreGroup = 1;
840            hauli2.Restitution = 0.0;
841            hauli2.MaximumLifetime = new TimeSpan(0, 0, 0, 0, 70);
842            AddCollisionHandler(hauli2, "tuhottava", AmmusOsui);
843            AddCollisionHandler(hauli2, CollisionHandler.DestroyObject);
844            Add(hauli2);
845
846            hauli2.Velocity = Vector.FromLengthAndAngle(suunta.Magnitude, suunta.Angle + Angle.FromDegrees(20)) * pallo.Ampumisnopeus;
847            AddCollisionHandler(hauli2, "pallo", delegate(PhysicsObject tormaaja, PhysicsObject kohde)
848            {
849                if (!Zsurvival) 
850                {
851                Pelaaja kohdepelaaja = (Pelaaja)kohde;
852                kohdepelaaja.elamaMittari.Value -= vahinko;
853                }
854            });
855            AddCollisionHandler(hauli2, "Zombi", delegate(PhysicsObject tormaaja, PhysicsObject zombi)
856            {
857                Zombi zombi1 = (Zombi)zombi;
858                zombi1.elamaMittari.Value -= vahinko;
859                pallo.Pistemittari.Value += vahinko;
860
861            });
862        }
863        AddCollisionHandler(ammus, "pallo", delegate(PhysicsObject tormaaja, PhysicsObject kohde)
864        {
865            if (!Zsurvival)
866            {
867                Pelaaja kohdepelaaja = (Pelaaja)kohde;
868                kohdepelaaja.elamaMittari.Value -= vahinko;
869            }
870        });
871
872        AddCollisionHandler(ammus, "Hautausmaa", delegate(PhysicsObject tormaaja, PhysicsObject kohde)
873        {
874            Hautausmaa hautausmaa = (Hautausmaa)kohde;
875            if (!hautausmaa.OnKunnossa) return;
876            hautausmaa.Elpit.Value -= vahinko;
877            pallo.Pistemittari.Value += vahinko;
878        });
879
880
881        AddCollisionHandler(ammus, "Zombi", delegate(PhysicsObject tormaaja, PhysicsObject zombi)
882    {
883        Zombi zombi1 = (Zombi)zombi;
884        zombi1.elamaMittari.Value -= vahinko;
885        pallo.Pistemittari.Value += vahinko;
886
887    });
888    }
889    void ammusosui(PhysicsObject tormaaja, PhysicsObject kohde)
890    {
891        if (kohde.Tag == "Vaara!") return;
892        if (kohde.Tag == "Flag") return;
893        else tormaaja.Destroy();
894    }
895    void Liikuta(Pelaaja pallo, Vector suunta)
896    {
897        //        pallo.Velocity = suunta;
898        if (suunta.Magnitude != 0)
899        {
900            pallo.Velocity = Vector.ComponentProduct(suunta.Normalize(), new Vector(pallo.liikkumisnopeus, pallo.liikkumisnopeus));
901            pallo.viimeisinSuunta = Vector.ComponentProduct(suunta.Normalize(), new Vector(pallo.liikkumisnopeus, pallo.liikkumisnopeus));
902            return;
903        }
904        pallo.Velocity = suunta;
905        pallo.viimeisinSuunta = suunta;
906    }
907
908    void LiikutaTatilla(AnalogState tatinTila, Pelaaja pallo)
909    {
910        pallo.Velocity = tatinTila.StateVector * pallo.liikkumisnopeus;
911    }
912    void TahtaaTatilla(AnalogState tatintila, Pelaaja pallo)
913    {
914        pallo.Angle = tatintila.StateVector.Angle;
915        pallo.viimeisinSuunta = Vector.ComponentProduct(tatintila.StateVector.Normalize(), new Vector(pallo.liikkumisnopeus, pallo.liikkumisnopeus));
916    }
917
918    void Luoseina(Vector paikka, double leveys, double korkeus)
919    {
920        PhysicsObject m = PhysicsObject.CreateStaticObject(leveys, korkeus);
921        m.Shape = Shape.Rectangle;
922        m.Position = paikka + siirtyma;
923        m.Image = palikka;
924        Add(m);
925    }
926    void LuoLapiammuttavaSeina(Vector paikka, double leveys, double korkeus)
927    {
928        PhysicsObject m = PhysicsObject.CreateStaticObject(leveys - 10, korkeus - 10);
929        m.Shape = Shape.Rectangle;
930        m.Position = paikka + siirtyma;
931        m.Image = palikka;
932        m.CollisionIgnoreGroup = 1;
933        Add(m, -3);
934        Luomaa(paikka, leveys + 10, korkeus + 10);
935    }
936
937    void Luovaara(Vector paikka, double leveys, double korkeus)
938    {
939        PhysicsObject m = PhysicsObject.CreateStaticObject(leveys, korkeus);
940        m.Shape = Shape.Rectangle;
941        m.Position = paikka + siirtyma;
942        m.Image = vaarapalikka;
943        m.IgnoresCollisionResponse = true;
944        m.Tag = "Vaara!";
945        Add(m, -2);
946        Luomaa(paikka, leveys, korkeus);
947    }
948    void CreateBluFlag(Vector paikka, double leveys, double korkeus)
949    {
950        Flag f = new Flag(leveys, korkeus);
951        f.MakeStatic();
952        f.OnPunainen = false;
953        f.OnLippu = true;
954        f.Shape = Shape.Rectangle;
955        f.Position = paikka + siirtyma;
956        f.Image = Sinilippu;
957        f.IgnoresCollisionResponse = true;
958        f.Tag = "Flag";
959        Add(f, -2);
960        sinilippu = f;
961        Luomaa(paikka, leveys, korkeus);
962    }
963    void CreateRedFlag(Vector paikka, double leveys, double korkeus)
964    {
965        Flag f = new Flag(leveys, korkeus);
966        f.MakeStatic();
967        f.OnPunainen = true;
968        f.OnLippu = true;
969        f.Shape = Shape.Rectangle;
970        f.Position = paikka + siirtyma;
971        f.Image = Punalippu;
972        f.IgnoresCollisionResponse = true;
973        f.Tag = "Flag";
974        Add(f, -2);
975        punalippu = f;
976        Luomaa(paikka, leveys, korkeus);
977    }
978
979    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
980    {
981        kohde.Destroy();
982    }
983    void Kayta(Pelaaja p)
984    {
985        if (p.kuollut == true) return;
986        if (p.turbomittari > 99)
987        {
988            ExplosionSystem ss = new ExplosionSystem(salama, 100);
989            ss.MaxScale = 30;
990            ss.MinScale = 20;
991            ss.MaxVelocity = 150;
992            ss.MaxLifetime = 0.5;
993            ss.MinRotation = 0.0;
994            ss.MaxRotation = 365.0;
995            ss.MinRotationSpeed = 2.0;
996
997            Add(ss);
998            ss.AddEffect(p.Position, 50);
999            p.liikkumisnopeus = p.liikkumisnopeus * 2;
1000            p.turbomittari.Value = 0.0;
1001            Timer.SingleShot(5.0, delegate { p.liikkumisnopeus = p.liikkumisnopeus / 2; });
1002
1003        }
1004    }
1005
1006    void Lataa(Pelaaja x)
1007    {
1008        if (x.kuollut == true) return;
1009        if (!x.lataamassa)
1010        {
1011            Lataus.Play();
1012            x.lataamassa = true;
1013            x.Ammusmittari.Value = 0;
1014            Timer.SingleShot(x.Latausnopeus, delegate { x.Ammusmittari.Value += x.Latapati; x.lataamassa = false; });
1015        }
1016    }
1017
1018    void Syntyykokulta()
1019    {
1020        int paikka = RandomGen.NextInt(kultaLista.Count);
1021        Spawnkulta(paikka);
1022    }
1023    void Syntyykozombi()
1024    {
1025        int paikka = RandomGen.NextInt(Hautausmaalista.Count);
1026        SpawnZombie(paikka);
1027    }
1028
1029    void Syntyykoelppibonus()
1030    {
1031        int kumpi = RandomGen.NextInt(1, 3);
1032        int paikka = RandomGen.NextInt(elppibonusLista.Count);
1033        if (kumpi == 1) Spawnelppibonus(paikka);
1034        if (kumpi == 2) Spawnvauhtibonus(paikka);
1035    }
1036    #region KenttienLuonti
1037    void Luopelikentta()
1038    {
1039        ColorTileMap ruudut = ColorTileMap.FromLevelAsset("Testikartta DM");
1040
1041        ruudut.SetTileMethod(Color.White, Luomaa);
1042        ruudut.SetTileMethod(Color.Black, Luoseina);
1043        ruudut.SetTileMethod(Color.FromHexCode("#0026FF"), setspawn, pallo2);
1044        ruudut.SetTileMethod(Color.FromHexCode("#FF0000"), setspawn, pallo);       
1045        ruudut.SetTileMethod(Color.FromHexCode("#FF6A00"), Luovaara);
1046        ruudut.SetTileMethod(Color.FromHexCode("#B6FF00"), Luoelppibonuspaikka);
1047        ruudut.SetTileMethod(Color.FromHexCode("#FFD800"), Luomaa);
1048        ruudut.SetTileMethod(Color.FromHexCode("#4CFF00"), Luomaa);
1049        if (pelaajat.Count >= 3)
1050        {
1051            ruudut.SetTileMethod(Color.FromHexCode("#FFD800"), setspawn, pallo3);
1052        }
1053
1054        if (pelaajat.Count == 4)
1055        {
1056            ruudut.SetTileMethod(Color.FromHexCode("#4CFF00"), setspawn, pallo4);
1057        }
1058        Timer elppiajastin = new Timer();
1059        elppiajastin.Interval = 30.0;
1060        elppiajastin.Timeout += Syntyykoelppibonus;
1061        elppiajastin.Start();
1062        ruudut.Execute(35, 35);
1063        siirrapelaajat();
1064
1065    }
1066    void Luopelikentta2()
1067    {
1068        ColorTileMap ruudut = ColorTileMap.FromLevelAsset("Yang DM");
1069
1070        ruudut.SetTileMethod(Color.White, Luomaa);
1071        ruudut.SetTileMethod(Color.Black, Luoseina);
1072        ruudut.SetTileMethod(Color.FromHexCode("#0026FF"), setspawn, pallo2);
1073        ruudut.SetTileMethod(Color.FromHexCode("#FF0000"), setspawn, pallo);
1074        ruudut.SetTileMethod(Color.FromHexCode("#FF6A00"), Luovaara);
1075        ruudut.SetTileMethod(Color.FromHexCode("#B6FF00"), Luoelppibonuspaikka);
1076        ruudut.SetTileMethod(Color.FromHexCode("#FFD800"), Luomaa);
1077        ruudut.SetTileMethod(Color.FromHexCode("#4CFF00"), Luomaa);
1078        if (pelaajat.Count >= 3)
1079        {
1080            ruudut.SetTileMethod(Color.FromHexCode("#FFD800"), setspawn, pallo3);
1081        }
1082
1083        if (pelaajat.Count == 4)
1084        {
1085            ruudut.SetTileMethod(Color.FromHexCode("#4CFF00"), setspawn, pallo4);
1086        }
1087        Timer elppiajastin = new Timer();
1088        elppiajastin.Interval = 30.0;
1089        elppiajastin.Timeout += Syntyykoelppibonus;
1090        elppiajastin.Start();
1091        ruudut.Execute(35, 35);
1092
1093        ruudut.Execute(35, 35);
1094        siirrapelaajat();
1095
1096    }
1097    void Luopelikentta3()
1098    {
1099        ColorTileMap ruudut = ColorTileMap.FromLevelAsset("Testikartta");
1100
1101        ruudut.SetTileMethod(Color.White, Luomaa);
1102        ruudut.SetTileMethod(Color.Black, Luoseina);
1103        ruudut.SetTileMethod(Color.FromHexCode("#0026FF"), setspawn, pallo2);
1104        ruudut.SetTileMethod(Color.FromHexCode("#FF0000"), setspawn, pallo);
1105        ruudut.SetTileMethod(Color.FromHexCode("#FFF600"), Luokultapaikka);
1106        ruudut.SetTileMethod(Color.FromHexCode("#FF6A00"), Luovaara);
1107        ruudut.SetTileMethod(Color.FromHexCode("#B6FF00"), Luoelppibonuspaikka);
1108        ruudut.SetTileMethod(Color.FromHexCode("#FFD800"), Luomaa);
1109        ruudut.SetTileMethod(Color.FromHexCode("#4CFF00"), Luomaa);
1110        if (pelaajat.Count >= 3)
1111        {
1112            ruudut.SetTileMethod(Color.FromHexCode("#FFD800"), setspawn, pallo3);
1113        }
1114
1115        if (pelaajat.Count == 4)
1116        {
1117            ruudut.SetTileMethod(Color.FromHexCode("#4CFF00"), setspawn, pallo4);
1118        }
1119
1120        Timer elppiajastin = new Timer();
1121        elppiajastin.Interval = 30.0;
1122        elppiajastin.Timeout += Syntyykoelppibonus;
1123        elppiajastin.Start();
1124        ruudut.Execute(35, 35);
1125
1126        Timer ajastin = new Timer();
1127        ajastin.Interval = 3.0;
1128        ajastin.Timeout += Syntyykokulta;
1129        ajastin.Start();
1130
1131        ruudut.Execute(35, 35);
1132        siirrapelaajat();
1133
1134    }
1135    void Luopelikentta4()
1136    {
1137        ColorTileMap ruudut = ColorTileMap.FromLevelAsset("Yang");
1138
1139        ruudut.SetTileMethod(Color.White, Luomaa);
1140        ruudut.SetTileMethod(Color.Black, Luoseina);
1141        ruudut.SetTileMethod(Color.FromHexCode("#0026FF"), setspawn, pallo2);
1142        ruudut.SetTileMethod(Color.FromHexCode("#FF0000"), setspawn, pallo);
1143        ruudut.SetTileMethod(Color.FromHexCode("#FFF600"), Luokultapaikka);
1144        ruudut.SetTileMethod(Color.FromHexCode("#FF6A00"), Luovaara);
1145        ruudut.SetTileMethod(Color.FromHexCode("#B6FF00"), Luoelppibonuspaikka);
1146        ruudut.SetTileMethod(Color.FromHexCode("#FFD800"), Luomaa);
1147        ruudut.SetTileMethod(Color.FromHexCode("#4CFF00"), Luomaa);
1148        if (pelaajat.Count >= 3)
1149        {
1150            ruudut.SetTileMethod(Color.FromHexCode("#FFD800"), setspawn, pallo3);
1151        }
1152
1153        if (pelaajat.Count == 4)
1154        {
1155            ruudut.SetTileMethod(Color.FromHexCode("#4CFF00"), setspawn, pallo4);
1156        }
1157
1158        Timer elppiajastin = new Timer();
1159        elppiajastin.Interval = 30.0;
1160        elppiajastin.Timeout += Syntyykoelppibonus;
1161        elppiajastin.Start();
1162        ruudut.Execute(35, 35);
1163
1164        Timer ajastin = new Timer();
1165        ajastin.Interval = 3.0;
1166        ajastin.Timeout += Syntyykokulta;
1167        ajastin.Start();
1168
1169        ruudut.Execute(35, 35);
1170        siirrapelaajat();
1171    }
1172    void Luopelikentta5()
1173    {
1174        ColorTileMap ruudut = ColorTileMap.FromLevelAsset("CTF Middle");
1175
1176        ruudut.SetTileMethod(Color.White, Luomaa);
1177        ruudut.SetTileMethod(Color.Black, Luoseina);
1178        ruudut.SetTileMethod(Color.FromHexCode("#0026FF"), setspawn, pallo2);
1179        ruudut.SetTileMethod(Color.FromHexCode("#FF0000"), setspawn, pallo);
1180        ruudut.SetTileMethod(Color.FromHexCode("#FF6A00"), Luovaara);
1181        ruudut.SetTileMethod(Color.FromHexCode("#B6FF00"), Luoelppibonuspaikka);
1182        ruudut.SetTileMethod(Color.FromHexCode("#00137F"), CreateBluFlag);
1183        ruudut.SetTileMethod(Color.FromHexCode("#7F0000"), CreateRedFlag);
1184        ruudut.SetTileMethod(Color.FromHexCode("#FFD800"), Luomaa);
1185        ruudut.SetTileMethod(Color.FromHexCode("#4CFF00"), Luomaa);
1186        if (pelaajat.Count >= 3)
1187        {
1188            ruudut.SetTileMethod(Color.FromHexCode("#FFD800"), setspawn, pallo3);
1189        }
1190
1191        if (pelaajat.Count == 4)
1192        {
1193            ruudut.SetTileMethod(Color.FromHexCode("#4CFF00"), setspawn, pallo4);
1194        }
1195
1196        Timer elppiajastin = new Timer();
1197        elppiajastin.Interval = 30.0;
1198        elppiajastin.Timeout += Syntyykoelppibonus;
1199        elppiajastin.Start();
1200
1201        ruudut.Execute(35, 35);
1202
1203        siirrapelaajat();
1204    }
1205    void Luopelikentta6()
1206    {
1207        ColorTileMap ruudut = ColorTileMap.FromLevelAsset("Zsurvival Arena");
1208
1209        ruudut.SetTileMethod(Color.White, Luomaa);
1210        ruudut.SetTileMethod(Color.Black, Luoseina);
1211        ruudut.SetTileMethod(Color.FromHexCode("#0026FF"), setspawn,pallo2);
1212        ruudut.SetTileMethod(Color.FromHexCode("#FF0000"), setspawn,pallo);
1213        ruudut.SetTileMethod(Color.FromHexCode("#C0C0C0"), LuoHautausmaa);
1214        ruudut.SetTileMethod(Color.FromHexCode("#FF6A00"), Luovaara);
1215        ruudut.SetTileMethod(Color.FromHexCode("#B6FF00"), Luoelppibonuspaikka);
1216        ruudut.SetTileMethod(Color.FromHexCode("#FFD800"), Luomaa);
1217        ruudut.SetTileMethod(Color.FromHexCode("#4CFF00"), Luomaa);
1218        if (pelaajat.Count >= 3)
1219        {
1220            ruudut.SetTileMethod(Color.FromHexCode("#FFD800"), setspawn, pallo3);
1221        }
1222
1223        if (pelaajat.Count == 4)
1224        {
1225        ruudut.SetTileMethod(Color.FromHexCode("#4CFF00"), setspawn,pallo4);
1226        }
1227
1228        Timer elppiajastin = new Timer();
1229        elppiajastin.Interval = 30.0;
1230        elppiajastin.Timeout += Syntyykoelppibonus;
1231        elppiajastin.Start();
1232        ruudut.Execute(35, 35);
1233
1234        ruudut.Execute(35, 35);
1235        siirrapelaajat();
1236    }
1237    void siirrapelaajat()
1238    {
1239        int spawninumero = RandomGen.NextInt(pallo.spawnLista.Count);
1240        pallo.X = pallo.spawnLista[spawninumero].X;
1241        pallo.Y = pallo.spawnLista[spawninumero].Y;
1242        pallo.apupallo.Position = pallo.Position;
1243
1244        int spawninumero2 = RandomGen.NextInt(pallo2.spawnLista.Count);
1245        pallo2.X = pallo2.spawnLista[spawninumero2].X;
1246        pallo2.Y = pallo2.spawnLista[spawninumero2].Y;
1247        pallo2.apupallo.Position = pallo2.Position;
1248
1249        if (pelaajat.Count >= 3)
1250        {
1251            int spawninumero3 = RandomGen.NextInt(pallo3.spawnLista.Count);
1252            pallo3.X = pallo3.spawnLista[spawninumero3].X;
1253            pallo3.Y = pallo3.spawnLista[spawninumero3].Y;
1254            pallo3.apupallo.Position = pallo3.Position;
1255        }
1256        if (pelaajat.Count == 4)
1257        {
1258            int spawninumero4 = RandomGen.NextInt(pallo4.spawnLista.Count);
1259            pallo4.X = pallo4.spawnLista[spawninumero4].X;
1260            pallo4.Y = pallo4.spawnLista[spawninumero4].Y;
1261            pallo4.apupallo.Position = pallo4.Position;
1262        }
1263    }
1264    #endregion
1265    #region valikot
1266    void Alkuvalikko()
1267    {
1268        MultiSelectWindow alkuv = new MultiSelectWindow("Welcome", "Start game/Continue", "Game settings", "weapons", "Crash the game", "Quit");
1269        alkuv.ItemSelected += PainettiinValikonNappia;
1270        alkuv.Color = Color.MediumBlue;
1271        Add(alkuv);
1272    }
1273    void PainettiinValikonNappia(int valinta)
1274    {
1275        switch (valinta)
1276        {
1277            case 0:
1278                //Sulje ikkuna.
1279                if (IsPaused) Pause();
1280                if (Zsurvival)
1281                {
1282                    Timer ajastin = new Timer();
1283                    ajastin.Interval = 3.0;
1284                    ajastin.Timeout += Syntyykozombi;
1285                    ajastin.Start();
1286                }
1287                break;
1288            case 1:
1289                Gasetukset();
1290                //Kartta
1291                break;
1292            case 2:
1293                Asetukset1();
1294                //asevalinta
1295                break;
1296            case 3:
1297                kultaLista.Clear();
1298                elppibonusLista.Clear();
1299                Hautausmaalista.Clear();
1300
1301                ClearAll();
1302                AloitaAlusta();
1303                break;
1304
1305            case 4:
1306                Exit();
1307                break;
1308        }
1309
1310    }
1311    void playerscontrollers()
1312    {
1313        MultiSelectWindow PandC = new MultiSelectWindow("Choose amount of players:", "2", "3", "4");
1314        PandC.ItemSelected += players;
1315        PandC.Color = Color.MediumBlue;
1316        Add(PandC);
1317    }
1318    void players(int valinta)
1319    {
1320
1321        pelaajienmaara = valinta + 2;
1322        for (int i = 0; i < pelaajienmaara; i++)
1323        {
1324            Pelaaja uusi = Luopallo(varit[i], 0, 0);
1325            uusi.Image = LoadImage("pallo" + (i + 1));
1326            pelaajat.Add(uusi);
1327        }
1328
1329        pallo = pelaajat[0];
1330        pallo2 = pelaajat[1];
1331        if (pelaajienmaara >= 3) pallo3 = pelaajat[2];
1332        if (pelaajienmaara >= 4) pallo4 = pelaajat[3];
1333
1334
1335        AloitaAlusta();
1336
1337    }
1338    void Asetukset1()
1339    {
1340        MultiSelectWindow p1 = new MultiSelectWindow("Choose your gun",
1341            "Sniper rifle", "Assault rifle", "Heavy machine gun", "Shotgun", "Light machine gun", "Back");
1342        p1.Color = Color.MediumBlue;
1343        p1.ItemSelected += PVN1;
1344        Add(p1);
1345    }
1346    void PVN1(int s)
1347    {
1348        switch (s)
1349        {
1350            case 0:
1351                Sni();
1352                break;
1353            case 1:
1354                As();
1355                break;
1356            case 2:
1357                asevalinta = "HMG";
1358                Pelaajanase();
1359                break;
1360            case 3:
1361                sho();
1362                break;
1363            case 4:
1364                LMG();
1365                break;
1366            case 5:
1367                Alkuvalikko();
1368                //Palaa takaisin
1369                break;
1370        }
1371    }
1372    void Gasetukset()
1373    {
1374        MultiSelectWindow a1 = new MultiSelectWindow("Maps:",
1375              "Caves DM", "Yin DM", "Caves Gold rush", "Yin Gold rush", "CTF Middle", "Zsurvival Arena", "Back");
1376        a1.Color = Color.Azure;
1377        a1.ItemSelected += PVN3;
1378        Add(a1);
1379    }
1380    void PVN3(int Valinta)
1381    {
1382        if (Kenttalad == true)
1383        {
1384            Alkuvalikko();
1385            return;
1386        }//Estaa Kenttien synnyn paallekkain
1387
1388        switch (Valinta)
1389        {
1390            case 0:
1391                //Caves-dm
1392                Luopelikentta();
1393                Kenttalad = true;
1394                Gasetukset3();
1395                break;
1396            case 1:
1397                //yin-dm
1398                Luopelikentta2();
1399                Kenttalad = true;
1400                Gasetukset3();
1401                break;
1402            case 2:
1403                //caves-goru
1404                Luopelikentta3();
1405                Kenttalad = true;
1406                Gasetukset3();
1407                break;
1408            case 3:
1409                //yin-goru
1410                Luopelikentta4();
1411                Kenttalad = true;
1412                Gasetukset3();
1413                break;
1414            case 4:
1415                //CTF-Middle
1416                Luopelikentta5();
1417                Kenttalad = true;
1418                CTF = true;
1419                Gasetukset3();
1420                break;
1421            case 5:
1422                //Zsurvival Arena
1423                Luopelikentta6();
1424                Kenttalad = true;
1425                Zsurvival = true;
1426                pallo.Pistemittari.MaxValue = 3000000;
1427                pallo2.Pistemittari.MaxValue = 3000000;
1428                pisteLukub.BindTo(pallo.Pistemittari);
1429                Alkuvalikko();
1430                break;
1431            case 6:
1432                Alkuvalikko();
1433                break;
1434        }
1435
1436
1437    }
1438
1439    void Gasetukset3()
1440    {
1441        MultiSelectWindow a1 = new MultiSelectWindow("Points limit", "1000", "3000", "5000", "10000", "15000");
1442        a1.Color = Color.Azure;
1443        a1.ItemSelected += PVN33;
1444        Add(a1);
1445    }
1446    void PVN33(int Valinta)
1447    {
1448        switch (Valinta)
1449        {
1450            case 0:
1451                pallo.Pistemittari.MaxValue = 1000;
1452                pallo2.Pistemittari.MaxValue = 1000;
1453                Alkuvalikko();
1454                break;
1455            case 1:
1456                pallo.Pistemittari.MaxValue = 3000;
1457                pallo2.Pistemittari.MaxValue = 3000;
1458                Alkuvalikko();
1459                break;
1460            case 2:
1461                pallo.Pistemittari.MaxValue = 5000;
1462                pallo2.Pistemittari.MaxValue = 5000;
1463                Alkuvalikko();
1464                break;
1465            case 3:
1466                pallo.Pistemittari.MaxValue = 10000;
1467                pallo2.Pistemittari.MaxValue = 10000;
1468                Alkuvalikko();
1469                break;
1470            case 4:
1471                pallo.Pistemittari.MaxValue = 15000;
1472                pallo2.Pistemittari.MaxValue = 15000;
1473                Alkuvalikko();
1474                break;
1475        }
1476
1477
1478    }
1479
1480    #region asevalikot
1481    void LMG()
1482    {
1483        MultiSelectWindow LMG = new MultiSelectWindow("Light machine guns:", "Famas", "LMG Type `95", "Back");
1484        LMG.Color = Color.MediumBlue;
1485        LMG.ItemSelected += LMG2;
1486        Add(LMG);
1487    }
1488    void LMG2(int s)
1489    {
1490        switch (s)
1491        {
1492
1493            case 0:
1494                asevalinta = "Famas";
1495                Pelaajanase();
1496                break;
1497            case 1:
1498                asevalinta = "LMG";
1499                Pelaajanase();
1500                break;
1501            case 2:
1502                Asetukset1();
1503                break;
1504        }
1505    }
1506
1507    void As()
1508    {
1509        MultiSelectWindow As = new MultiSelectWindow("Assault rifles", "Ak-47u", "Caliber `89", "Back");
1510        As.Color = Color.MediumBlue;
1511        As.ItemSelected += As2;
1512        Add(As);
1513    }
1514    void As2(int s)
1515    {
1516        switch (s)
1517        {
1518
1519            case 0:
1520                asevalinta = "Ak47u";
1521                Pelaajanase();
1522                break;
1523            case 1:
1524                asevalinta = "Cal89";
1525                Pelaajanase();
1526                break;
1527            case 2:
1528                Asetukset1();
1529                break;
1530        }
1531
1532    }
1533    void Sni()
1534    {
1535        MultiSelectWindow Sni = new MultiSelectWindow("Sniper rifles:", "Dragunov", "L84 Mod.", "Back");
1536        Sni.Color = Color.Green;
1537        Sni.ItemSelected += Sni2;
1538        Add(Sni);
1539    }
1540    void Sni2(int s)
1541    {
1542        switch (s)
1543        {
1544
1545            case 0:
1546                asevalinta = "Dragunov";
1547                Pelaajanase();
1548                break;
1549            case 1:
1550                asevalinta = "Barret";
1551                Pelaajanase();
1552                break;
1553            case 2:
1554                Asetukset1();
1555                break;
1556        }
1557    }
1558    void sho()
1559    {
1560        MultiSelectWindow Sni = new MultiSelectWindow("Shotguns:", "Striker", "Spas12", "Back");
1561        Sni.Color = Color.MediumBlue;
1562        Sni.ItemSelected += sho2;
1563        Add(Sni);
1564    }
1565    void sho2(int s)
1566    {
1567        switch (s)
1568        {
1569
1570            case 0:
1571                asevalinta = "Striker";
1572                Pelaajanase();
1573                break;
1574            case 1:
1575                asevalinta = "Spas";
1576                Pelaajanase();
1577                break;
1578            case 2:
1579                Asetukset1();
1580                break;
1581        }
1582    }
1583
1584    void Pelaajanase()
1585    {
1586        MultiSelectWindow Playersweapon;
1587        if (pelaajienmaara == 2)
1588            Playersweapon = new MultiSelectWindow("Who uses this weapon?", "P1", "P2");
1589        else if (pelaajienmaara == 3)
1590            Playersweapon = new MultiSelectWindow("Who uses this weapon?", "P1", "P2", "P3");
1591        else
1592            Playersweapon = new MultiSelectWindow("Who uses this weapon?", "P1", "P2", "P3", "P4");
1593
1594        Playersweapon.Color = Color.Yellow;
1595        Playersweapon.ItemSelected += Pelaajanase2;
1596        Add(Playersweapon);
1597    }
1598    void Pelaajanase2(int s)
1599    {
1600        Pelaaja valittuPallo = pelaajat[s];
1601        if (asevalinta == "HMG")
1602        {
1603            valittuPallo.Ase = "HMG";
1604            valittuPallo.Ampumisnopeus = 800;
1605            valittuPallo.Ammusmittari.MaxValue = 500;
1606            valittuPallo.Ammusmittari.Value = 500;
1607            valittuPallo.Latausnopeus = 6.7;
1608            valittuPallo.Latapati = 500;
1609            valittuPallo.Asekuva = HMG;
1610            aseKuvakkeet[s].Image = HMG;
1611            Alkuvalikko();
1612        }
1613        if (asevalinta == "Dragunov")
1614        {
1615            valittuPallo.Ase = "Dragunov";
1616            valittuPallo.Ampumisnopeus = 1024;
1617            valittuPallo.Ammusmittari.MaxValue = 11;
1618            valittuPallo.Ammusmittari.Value = 11;
1619            valittuPallo.Latausnopeus = 5.3;
1620            valittuPallo.Latapati = 11;
1621            valittuPallo.Asekuva = MGH;
1622            aseKuvakkeet[s].Image = MGH;
1623            Alkuvalikko();
1624        }
1625        if (asevalinta == "Barret")
1626        {
1627            valittuPallo.Ase = "Barret";
1628            valittuPallo.Ampumisnopeus = 1024;
1629            valittuPallo.Ammusmittari.MaxValue = 1;
1630            valittuPallo.Ammusmittari.Value = 1;
1631            valittuPallo.Latausnopeus = 2.0;
1632            valittuPallo.Latapati = 1;
1633            valittuPallo.Asekuva = Sniper;
1634            aseKuvakkeet[s].Image = Sniper;
1635            Alkuvalikko();
1636        }
1637        if (asevalinta == "Striker")
1638        {
1639            valittuPallo.Ase = "Shotgun";
1640            valittuPallo.Ampumisnopeus = 1224;
1641            valittuPallo.Ammusmittari.MaxValue = 11;
1642            valittuPallo.Ammusmittari.Value = 11;
1643            valittuPallo.Latausnopeus = 5.3;
1644            valittuPallo.Latapati = 11;
1645            valittuPallo.Asekuva = Shotgun;
1646            aseKuvakkeet[s].Image = Shotgun;
1647            Alkuvalikko();
1648        }
1649        if (asevalinta == "Spas")
1650        {
1651            valittuPallo.Ase = "Spas";
1652            valittuPallo.Ampumisnopeus = 1224;
1653            valittuPallo.Ammusmittari.MaxValue = 2;
1654            valittuPallo.Ammusmittari.Value = 2;
1655            valittuPallo.Latausnopeus = 1.6;
1656            valittuPallo.Latapati = 2;
1657            valittuPallo.Asekuva = Spas;
1658            aseKuvakkeet[s].Image = Spas;
1659            Alkuvalikko();
1660        }
1661        if (asevalinta == "Ak47u")
1662        {
1663            valittuPallo.Ase = "Ak";
1664            valittuPallo.Ampumisnopeus = 890;
1665            valittuPallo.Ammusmittari.MaxValue = 64;
1666            valittuPallo.Ammusmittari.Value = 64;
1667            valittuPallo.Latausnopeus = 0.8;
1668            valittuPallo.Latapati = 64;
1669            valittuPallo.Asekuva = Ak47u;
1670            aseKuvakkeet[s].Image = Ak47u;
1671            Alkuvalikko();
1672        }
1673        if (asevalinta == "Cal89")
1674        {
1675            valittuPallo.Ase = "Cal89";
1676            valittuPallo.Ampumisnopeus = 1024;
1677            valittuPallo.Ammusmittari.MaxValue = 25;
1678            valittuPallo.Ammusmittari.Value = 25;
1679            valittuPallo.Latausnopeus = 2.1;
1680            valittuPallo.Latapati = 25;
1681            valittuPallo.Asekuva = Caliber;
1682            aseKuvakkeet[s].Image = Caliber;
1683            Alkuvalikko();
1684        }
1685        if (asevalinta == "LMG")
1686        {
1687            valittuPallo.Ase = "LMG Type";
1688            valittuPallo.Ampumisnopeus = 448;
1689            valittuPallo.Ammusmittari.MaxValue = 400;
1690            valittuPallo.Ammusmittari.Value = 400;
1691            valittuPallo.Latausnopeus = 5.0;
1692            valittuPallo.Latapati = 400;
1693            valittuPallo.Asekuva = Light;
1694            aseKuvakkeet[s].Image = Light;
1695            Alkuvalikko();
1696        }
1697        if (asevalinta == "Famas")
1698        {
1699            valittuPallo.Ase = "Famas";
1700            valittuPallo.Ampumisnopeus = 1024;
1701            valittuPallo.Ammusmittari.MaxValue = 100;
1702            valittuPallo.Ammusmittari.Value = 100;
1703            valittuPallo.Latausnopeus = 1.9;
1704            valittuPallo.Latapati = 100;
1705            valittuPallo.Asekuva = Famas;
1706            aseKuvakkeet[s].Image = Famas;
1707            Alkuvalikko();
1708        }
1709    }
1710    #endregion
1711    #endregion
1712    void Pelaajakuoli(Pelaaja p)
1713    {
1714        Remove(p);
1715        kuolemat += 1;
1716        if (Zsurvival)
1717        {
1718            String jaljella = (6 - kuolemat).ToString();
1719            Label elamia = new Label(150, 20, "Lifes left: " + jaljella);
1720            elamia.Y = Screen.Top - 20;
1721            elamia.TextColor = Color.Red;
1722            Add(elamia);
1723            elamia.LifetimeLeft = TimeSpan.FromSeconds(4);
1724            if (kuolemat == 5 + pelaajienmaara)
1725            {
1726                Pause();
1727                toplista();
1728            }
1729            else if (kuolemat > 5)
1730                return;
1731        }
1732        p.kuollut = true;
1733        p.Stop();
1734
1735        if (!Zsurvival)
1736        {
1737            pallo.Pistemittari.Value += 500;
1738            pallo2.Pistemittari.Value += 500;
1739            if (pelaajat.Count >= 3)
1740            {
1741                pallo3.Pistemittari.Value += 500;
1742            }
1743            if (pelaajat.Count == 4)
1744            {
1745                pallo4.Pistemittari.Value += 500;
1746            }
1747            p.Pistemittari.Value -= 1000;
1748
1749        }
1750        if (CTF && pelaajat.Count == 2)
1751        {
1752            punalippu.OnLippu = true;
1753            punalippu.Image = Punalippu;
1754            Sinikuva.Image = p.Asekuva;
1755            p.HasFlag = false;
1756        }
1757
1758        Timer.SingleShot(3.1, delegate
1759        {
1760            int spawninumero = RandomGen.NextInt(p.spawnLista.Count);
1761            p.X = p.spawnLista[spawninumero].X;
1762            p.Y = p.spawnLista[spawninumero].Y;
1763            p.apupallo.Position = pallo.Position;
1764            p.kuollut = false;
1765            Add(p);
1766            Add(p.apupallo, 1);
1767            p.turbomittari.Value = 100.0;
1768            p.elamaMittari.Value = 500.0;
1769            p.Ammusmittari.Value += pallo.Latapati;
1770        });
1771    }
1772    //Kransu
1773    void HKranaatti(Pelaaja Pallo)
1774    {
1775        HKranaatti(Pallo, null);
1776    }
1777
1778    void HKranaatti(Pelaaja Pallo, GamePad padi)
1779    {
1780        if (Pallo.turbomittari < Pallo.turbomittari.MaxValue) return;
1781        if (Pallo.kuollut == true) return;
1782        Pallo.turbomittari.Value = Pallo.turbomittari.MinValue;
1783
1784        PhysicsObject Kransu = new PhysicsObject(20, 20);
1785        Kransu.Image = kransu;
1786        Add(Kransu);
1787        Kransu.Position = Pallo.Position;
1788        Kransu.IgnoresCollisionResponse = true;
1789
1790        if (padi != null)
1791        {
1792            Pallo.viimeisinSuunta = Vector.ComponentProduct(padi.RightThumbDirection.Normalize(), new Vector(pallo.liikkumisnopeus, pallo.liikkumisnopeus));
1793            if (Double.IsNaN(Pallo.viimeisinSuunta.X))
1794                Pallo.viimeisinSuunta.X = 0;
1795            if (Double.IsNaN(Pallo.viimeisinSuunta.Y))
1796                Pallo.viimeisinSuunta.Y = 0;
1797        }
1798        Kransu.Hit(Pallo.viimeisinSuunta * 1.2);
1799        Kransu.IgnoresExplosions = true;
1800        Timer.SingleShot(1.0, delegate
1801        {
1802            ExplosionSystem es = new ExplosionSystem(Boom, 80);
1803            es.Position = Kransu.Position;
1804            es.MaxScale = 30;
1805            es.MinScale = 30;
1806            es.MaxVelocity = 100;
1807            Add(es);
1808            es.AddEffect(Kransu.Position, 80);
1809            Kransu.Destroy();
1810            Explosion es2 = new Explosion(100);
1811            es2.Position = Kransu.Position;
1812            es2.IsVisible = false;
1813            es2.ShockwaveReachesObject += delegate(IPhysicsObject kohde, Vector suunta) { Rajahdusosui(Pallo, kohde, suunta, es2); };
1814            Add(es2);
1815        });
1816    }
1817    void Rajahdusosui(Pelaaja ampuja, IPhysicsObject kohde, Vector v, Explosion es)
1818    {
1819        if (kohde is Pelaaja)
1820        {
1821            Pelaaja kohdePelaaja = kohde as Pelaaja;
1822            if (kohdePelaaja == null) return;
1823            if (kohdePelaaja.Viimeisinrajahdus == es) return;
1824            double etaisyys = Vector.Distance(kohdePelaaja.Position, es.Position);
1825            int damage = (int)Math.Floor(15000 / etaisyys);
1826            kohdePelaaja.elamaMittari.Value -= damage;
1827        }
1828        else if (kohde is Zombi)
1829        {
1830            Zombi kohdezombi = kohde as Zombi;
1831            if (kohdezombi == null) return;
1832            if (kohdezombi.Viimeisinrajahdus == es) return;
1833            double etaisyys = Vector.Distance(kohdezombi.Position, es.Position);
1834            int damage = (int)Math.Floor(15000 / etaisyys);
1835            pallo.Pistemittari.Value += damage;
1836            kohdezombi.elamaMittari.Value -= damage;
1837
1838        }
1839
1840    }
1841    void Tayta(Pelaaja p)
1842    {
1843        if (p.turbomittari < p.turbomittari.MaxValue) return;
1844        if (p.kuollut == true) return;
1845        p.turbomittari.Value = p.turbomittari.MinValue;
1846        Healaus.Play();
1847        ExplosionSystem ss = new ExplosionSystem(Sydan, 100);
1848        ss.MaxScale = 30;
1849        ss.MinScale = 15;
1850        ss.MaxVelocity = 40;
1851        ss.MaxLifetime = 0.6;
1852        Add(ss);
1853        ss.AddEffect(p.Position, 15);
1854        p.elamaMittari.Value += 150;
1855    }
1856    void Luomaa(Vector paikka, double leveys, double korkeus)
1857    {
1858        GameObject maa = new GameObject(leveys, korkeus);
1859        maa.Position = paikka + siirtyma;
1860        maa.Color = Color.DarkGray;
1861        Add(maa, -3);
1862    }
1863
1864    void setspawn(Vector paikka, double leveys, double korkeus, Pelaaja pelaaja)
1865    {
1866        Luomaa(paikka, leveys, korkeus);
1867        pelaaja.spawnLista.Add(paikka + siirtyma);
1868    }
1869
1870    void Luokultapaikka(Vector paikka, double leveys, double korkeus)
1871    {
1872        Luomaa(paikka, leveys, korkeus);
1873        kultaLista.Add(paikka + siirtyma);
1874    }
1875    void Luoelppibonuspaikka(Vector paikka, double leveys, double korkeus)
1876    {
1877        Luomaa(paikka, leveys, korkeus);
1878        elppibonusLista.Add(paikka + siirtyma);
1879    }
1880    void LuoHautausmaa(Vector paikka, double leveys, double korkeus)
1881    {
1882        Luomaa(paikka, leveys, korkeus);
1883        Hautausmaalista.Add(paikka + siirtyma);
1884
1885        Hautausmaa hautausmaa = new Hautausmaa(35, 35);
1886        hautausmaa.Image = Hauta;
1887        hautausmaa.Tag = "Hautausmaa";
1888        hautausmaa.Elpit.LowerLimit += delegate
1889        {
1890            hautausmaa.OnKunnossa = false;
1891            Hautausmaalista.Remove(hautausmaa.Position);
1892            hautausmaa.Image = HautaRikki;
1893            Timer.SingleShot(10, delegate
1894            {
1895                hautausmaa.OnKunnossa = true;
1896                hautausmaa.Image = Hauta;
1897                Hautausmaalista.Add(paikka + siirtyma);
1898                hautausmaa.Elpit.Value = hautausmaa.Elpit.MaxValue;
1899            });
1900
1901        };
1902        hautausmaa.CollisionIgnoreGroup = 2;
1903        hautausmaa.Position = paikka + siirtyma;
1904        hautausmaa.MakeStatic();
1905        Add(hautausmaa, -2);
1906
1907    }
1908    void Spawnkulta(int numero)
1909    {
1910        PhysicsObject Kultapala = new PhysicsObject(35, 35);
1911
1912        Kultapala.X = kultaLista[numero].X;
1913        Kultapala.Y = kultaLista[numero].Y;
1914        Kultapala.MaximumLifetime = TimeSpan.FromSeconds(15);
1915        Kultapala.Image = kulta;
1916        Kultapala.MakeStatic();
1917        Kultapala.Tag = "Kulta";
1918
1919        Add(Kultapala);
1920    }
1921    void Spawnelppibonus(int numero)
1922    {
1923        PhysicsObject Elppilaatikko = new PhysicsObject(35, 35);
1924
1925        Elppilaatikko.X = elppibonusLista[numero].X;
1926        Elppilaatikko.Y = elppibonusLista[numero].Y;
1927        Elppilaatikko.MaximumLifetime = TimeSpan.FromSeconds(20);
1928        Elppilaatikko.Image = elppibonus;
1929        Elppilaatikko.MakeStatic();
1930        Elppilaatikko.Tag = "Elppibonus";
1931
1932        Add(Elppilaatikko);
1933    }
1934    void SpawnZombie(int numero)
1935    {
1936        if (Hautausmaalista.Count == 0) return;
1937        Zombi Zombie = new Zombi(20, 20);
1938
1939        Zombie.X = Hautausmaalista[numero].X;
1940        Zombie.Y = Hautausmaalista[numero].Y;
1941        Zombie.Image = ZOMBI;
1942        Zombie.Tag = "Zombi";
1943        Zombie.CollisionIgnoreGroup = 2;
1944        Zombie.Shape = Shape.Circle;
1945
1946        FollowerBrain zombinAivot = new FollowerBrain("pallo");
1947        zombinAivot.Speed = Zombi.Zombinvauhti;
1948        zombinAivot.TurnWhileMoving = true;
1949        Zombie.Brain = zombinAivot;
1950
1951        Add(Zombie, 3);
1952        Zombie.elamaMittari.LowerLimit += delegate { Zombie.Destroy(); };
1953
1954        Zombi.Zombinvauhti += 1;
1955        Zombi.Zombinelpit += 1;
1956        Zombi.Zombinvahinko += 1;
1957    }
1958    void Spawnvauhtibonus(int numero)
1959    {
1960        PhysicsObject turbolaatikko = new PhysicsObject(35, 35);
1961
1962        turbolaatikko.X = elppibonusLista[numero].X;
1963        turbolaatikko.Y = elppibonusLista[numero].Y;
1964        turbolaatikko.MaximumLifetime = TimeSpan.FromSeconds(20);
1965        turbolaatikko.Image = energiabonus;
1966        turbolaatikko.MakeStatic();
1967        turbolaatikko.Tag = "Turbobonus";
1968        Add(turbolaatikko);
1969    }
1970
1971    void Kullankerays(PhysicsObject olio, PhysicsObject kulta)
1972    {
1973        if (olio is Pelaaja)
1974        {
1975            Pelaaja p = (Pelaaja)olio;
1976            p.Pistemittari.Value += 500;
1977            kulta.Destroy();
1978            Kolikonkerays.Play();
1979        }
1980    }
1981    void Elppibonuskerays(PhysicsObject olio, PhysicsObject elppibonus)
1982    {
1983        if (olio is Pelaaja)
1984        {
1985            Pelaaja p = (Pelaaja)olio;
1986            p.elamaMittari.Value += 150;
1987            elppibonus.Destroy();
1988            Healaus.Play();
1989            ExplosionSystem ss = new ExplosionSystem(Sydan, 100);
1990            ss.MaxScale = 30;
1991            ss.MinScale = 15;
1992            ss.MaxVelocity = 40;
1993            ss.MaxLifetime = 0.6;
1994            Add(ss);
1995            ss.AddEffect(p.Position, 15);
1996        }
1997    }
1998    void Vauhtibonuskerays(PhysicsObject olio, PhysicsObject energiabonus)
1999    {
2000        if (olio is Pelaaja)
2001        {
2002            Pelaaja p = (Pelaaja)olio;
2003            ExplosionSystem ss = new ExplosionSystem(salama, 100);
2004            ss.MaxScale = 30;
2005            ss.MinScale = 20;
2006            ss.MaxVelocity = 150;
2007            ss.MaxLifetime = 0.5;
2008            ss.MinRotation = 0.0;
2009            ss.MaxRotation = 365.0;
2010            ss.MinRotationSpeed = 2.0;
2011            Add(ss);
2012            ss.AddEffect(p.Position, 50);
2013            p.liikkumisnopeus = p.liikkumisnopeus * 2;
2014            energiabonus.Destroy();
2015            Timer.SingleShot(5.0, delegate { p.liikkumisnopeus = p.liikkumisnopeus / 2; });
2016
2017        }
2018    }
2019    void ZombiHyokkaa(Pelaaja olio, PhysicsObject zombi)
2020    {
2021        if (olio is Pelaaja)
2022        {
2023            olio.elamaMittari.Value -= Zombi.Zombinvahinko;
2024        }
2025    }
2026
2027
2028    void LippuTankoKosketus(Pelaaja p, Flag f)
2029    {
2030        if (!f.OnLippu) return;
2031
2032        if (p == pallo && f.OnPunainen)
2033        {
2034            p.HasFlag = true;
2035            Sinikuva.Image = Flag;
2036            f.OnLippu = false;
2037            punalippu.Image = Punatanko;
2038        }
2039        if (p == pallo2 && !f.OnPunainen)
2040        {
2041            p.HasFlag = true;
2042            Punakuva.Image = Flag;
2043            f.OnLippu = false;
2044            sinilippu.Image = Sinitanko;
2045        }
2046        if (p == pallo && !f.OnPunainen && p.HasFlag)
2047        {
2048            p.HasFlag = false;
2049            p.Pistemittari.Value += 2000;
2050            sinilippu.Image = Sinilippu;
2051            punalippu.Image = Punalippu;
2052            punalippu.OnLippu = true;
2053            sinilippu.OnLippu = true;
2054            Sinikuva.Image = p.Asekuva;
2055            ExplosionSystem es = new ExplosionSystem(Redlippu, 5);
2056            es.Position = f.Position;
2057            es.MaxScale = 30;
2058            es.MinScale = 30;
2059            es.MaxVelocity = 50;
2060            Add(es);
2061            es.AddEffect(f.Position, 5);
2062        }
2063        if (p == pallo2 && f.OnPunainen && p.HasFlag)
2064        {
2065            p.HasFlag = false;
2066            p.Pistemittari.Value += 2000;
2067            punalippu.Image = Punalippu;
2068            sinilippu.Image = Sinilippu;
2069            Punakuva.Image = p.Asekuva;
2070            punalippu.OnLippu = true;
2071            sinilippu.OnLippu = true;
2072            ExplosionSystem es = new ExplosionSystem(Blulippu, 5);
2073            es.Position = f.Position;
2074            es.MaxScale = 30;
2075            es.MinScale = 30;
2076            es.MaxVelocity = 50;
2077            Add(es);
2078            es.AddEffect(f.Position, 5);
2079        }
2080    }
2081
2082    void Maxpointsreached(Pelaaja pallow)
2083    {
2084            Label voitto = new Label("The player number " + (pelaajat.FindIndex(p => p == pallow) + 1) + " wins!");
2085            voitto.Color = Color.White;
2086            voitto.MaximumLifetime = new TimeSpan(0, 0, 0, 0, 5000);
2087            voitto.Position = new Vector(0, 100);
2088            voitto.Size = new Vector(300, 50);
2089            Add(voitto);
2090
2091    }
2092    void toplista()
2093    {
2094        HighScoreWindow topIkkuna = new HighScoreWindow(
2095                             "The best survivors",
2096                             "Congrats, you made it to the top list with points %p, please enter your nic.",
2097                             topZombeissa, pallo.Pistemittari.Value);
2098        topIkkuna.Closed += TallennaPisteet;
2099        Add(topIkkuna);
2100    }
2101    void TallennaPisteet(Window sender)
2102    {
2103        DataStorage.Save<ScoreList>(topZombeissa, "pisteet.xml");
2104    }
2105}
Note: See TracBrowser for help on using the repository browser.