source: 2012/27/NikoKi/EpicTankBattle/EpicTankBattle/EpicTankBattle/EpicTankBattle.cs @ 4408

Revision 4408, 28.5 KB checked in by nivikinn, 7 years ago (diff)

Talletus.

Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9public class Tankki : PlatformCharacter2
10{
11    public bool liikkumassa = false;
12    public bool saakoampua = true;
13    public bool saakohypata = true;
14    public IntMeter hp = new IntMeter(10, 0, 10);
15    public IntMeter ampumisajastin = new IntMeter(0, 0, 100);
16    public IntMeter hyppymittari = new IntMeter(100, 0, 100);
17    public Tankki(double leveys, double korkeus)
18        : base(leveys, korkeus)
19    {
20        ampumisajastin.UpperLimit += SalliAmpuminen;
21        hyppymittari.UpperLimit += SalliHyppy;
22    }
23    public void SalliAmpuminen()
24    {
25        saakoampua = true;
26    }
27
28    public void SalliHyppy()
29    {
30        saakohypata = true;
31    }
32}
33
34public class Ammus : PhysicsObject
35{
36    public int tuhovoima = 1;
37    public int aika = 1;
38    public Ammus(double leveys, double korkeus)
39        : base(leveys, korkeus)
40    {
41    }
42}
43
44public class EpicTankBattle : PhysicsGame
45{
46    delegate Ammus AmmuksenLuoja();
47
48
49    Image Keltainentankki = LoadImage("Keltainentankki");
50    Image Sininentankki = LoadImage("Sininentankki");
51    Image Vihreatankki = LoadImage("Vihreatankki");
52    Image Punainentankki = LoadImage("Punainentankki");
53    Image Valkoinentankki = LoadImage("Valkoinentankki");
54    Image Mustatankki = LoadImage("Mustatankki");
55    Image Tykki = LoadImage("Tykki");
56    Image RajahdysKuva1 = LoadImage("RajahdysKuva1");
57    Image RajahdysKuva2 = LoadImage("RajahdysKuva2");
58    Image RajahdysKuva3 = LoadImage("RajahdysKuva3");
59    Image RajahdysKuva4 = LoadImage("RajahdysKuva4");
60    Image RajahdysKuva5 = LoadImage("RajahdysKuva5");
61    Image Kuula1 = LoadImage("Kuula1");
62    Image Kuula2 = LoadImage("Kuula2");
63    Image Kuula3 = LoadImage("Kuula3");
64    Image Kuula4 = LoadImage("Kuula4");
65    Image HP = LoadImage("HP");
66    Image HPtausta = LoadImage("HPtausta");
67    Image Tyhjyys = LoadImage("Tyhjyys");
68    SoundEffect TankkiHuti = LoadSoundEffect("TankkiHuti2");
69    SoundEffect TankkiOsuma = LoadSoundEffect("TankkiOsuma2");
70    SoundEffect TankkiTuhoutuminen = LoadSoundEffect("TankkiTuhoutuminen");
71
72    Image[] asekuvat;
73    Tankki P1;
74    Tankki P2;
75    Cannon P1tykki;
76    Cannon P2tykki;
77    Direction tankki1suunta = Direction.Right;
78    Direction tankki2suunta = Direction.Left;
79
80    bool pressure;
81
82    AmmuksenLuoja[] LuoAmmus;
83    int P1ammus = 0;
84    int P2ammus = 0;
85
86    Widget P1ammusruutu;
87    Widget P2ammusruutu;
88    Widget P1kehys;
89    Widget P2kehys;
90
91    Explosion rajahdys =
92    new Explosion(40);
93
94    public override void Begin()
95    {
96        ClearAll();
97
98        MultiSelectWindow alkuValikko = new MultiSelectWindow("EpicTankBattle",
99        "Uusi peli", "Lopeta");
100        Add(alkuValikko);
101       
102        Level.Background.CreateGradient(Color.Mint, Color.Snow);
103        alkuValikko.ItemSelected += PainettiinValikonNappia;
104    }
105
106    void PainettiinValikonNappia(int valinta)
107    {
108        switch (valinta)
109        {
110            case 0:
111                Tankki1VariValikko();
112                break;
113            case 1:
114                Exit();
115                break;
116        }
117    }
118
119    void MaaperaValikko()
120    {
121        MultiSelectWindow MaaperaValikko = new MultiSelectWindow("Valitse kenttä", "Vuori", "Järvi", "Vesiputous", "Tulivuori", "Metsä");
122        Add(MaaperaValikko);
123        MaaperaValikko.ItemSelected += PainettiinMaaperaValikonNappia;
124    }
125    void PainettiinMaaperaValikonNappia(int MaaperanValinta)
126    {
127        ColorTileMap Ruudut;
128
129        string kartta = new string[] { "Maapera", "Maapera2", "Maapera3", "Maapera4", "Maapera5" }[MaaperanValinta];
130
131        Ruudut = ColorTileMap.FromLevelAsset(kartta);
132        Ruudut.SetTileMethod(Color.Black, LuoNelioMulta);
133        Ruudut.SetTileMethod(Color.ForestGreen, LuoNelioRuoho);
134        Ruudut.SetTileMethod(Color.Aqua, LuoNelioVesi);
135        Ruudut.SetTileMethod(Color.Blue, LuoNelioVesiB);
136        Ruudut.SetTileMethod(Color.Red, LuoNelioLaava);
137        Ruudut.SetTileMethod(Color.Gray, LuoNelioKallio);
138        Ruudut.Execute(20, 8);
139
140        Aloitapeli();
141    }
142    void Tankki1VariValikko()
143    {
144        LuoTankit();
145        MultiSelectWindow P1VariValikko = new MultiSelectWindow("Valitse Pelaaja 1 väri",
146        "Vihreä", "Punainen", "Sininen", "Keltainen", "Valkoinen", "Musta");
147        Add(P1VariValikko);
148        P1VariValikko.ItemSelected += PainettiinP1VariValikonNappia;
149    }
150    void PainettiinP1VariValikonNappia(int valinta2)
151    {
152        switch (valinta2)
153        {
154            case 0:
155                P1.Image = LoadImage("Vihreatankki");
156                P1tykki.Image = LoadImage("Tykki");
157                Tankki2VariValikko();
158                break;
159            case 1:
160                P1.Image = LoadImage("Punainentankki");
161                P1tykki.Image = LoadImage("Tykki");
162                Tankki2VariValikko();
163                break;
164            case 2:
165                P1.Image = LoadImage("Sininentankki");
166                P1tykki.Image = LoadImage("Tykki");
167                Tankki2VariValikko();
168                break;
169            case 3:
170                P1.Image = LoadImage("Keltainentankki");
171                P1tykki.Image = LoadImage("Tykki");
172                Tankki2VariValikko();
173                break;
174            case 4:
175                P1.Image = LoadImage("Valkoinentankki");
176                P1tykki.Image = LoadImage("Tykki");
177                Tankki2VariValikko();
178                break;
179            case 5:
180                P1.Image = LoadImage("Mustatankki");
181                P1tykki.Image = LoadImage("Tykki");
182                Tankki2VariValikko();
183                break;
184        }
185    }
186
187    void Tankki2VariValikko()
188    {
189        MultiSelectWindow P2VariValikko = new MultiSelectWindow("Valitse Pelaaja 2 väri",
190        "Vihreä", "Punainen", "Sininen", "Keltainen", "Valkoinen", "Musta");
191        Add(P2VariValikko);
192        P2VariValikko.ItemSelected += PainettiinP2VariValikonNappia;
193    }
194    void PainettiinP2VariValikonNappia(int valinta3)
195    {
196        switch (valinta3)
197        {
198            case 0:
199                P2.Image = LoadImage("Vihreatankki");
200                P2tykki.Image = LoadImage("Tykki");
201                break;
202            case 1:
203                P2.Image = LoadImage("Punainentankki");
204                P2tykki.Image = LoadImage("Tykki");
205                break;
206            case 2:
207                P2.Image = LoadImage("Sininentankki");
208                P2tykki.Image = LoadImage("Tykki");
209                break;
210            case 3:
211                P2.Image = LoadImage("Keltainentankki");
212                P2tykki.Image = LoadImage("Tykki");
213                break;
214            case 4:
215                P2.Image = LoadImage("Valkoinentankki");
216                P2tykki.Image = LoadImage("Tykki");
217                break;
218            case 5:
219                P2.Image = LoadImage("Mustatankki");
220                P2tykki.Image = LoadImage("Tykki");
221                break;
222        }
223        MaaperaValikko();
224    }
225
226    public void LuoTankit()
227    {
228        Camera.ZoomFactor = 3;
229        P1 = new Tankki(25, 24);
230        P1.Tag = "tankki";
231        P1.hp.MaxValue = 100;
232        P1.hp.Value = 100;
233        P1.Color = Color.Transparent;
234        P1.PlatformTolerance = 1;
235        P1.Acceleration = 0.6;
236        P1.MaxVelocity = 3;
237        P1.KineticFriction = 0;
238        P1.X = -Screen.Width / 10;
239        Add(P1);
240
241        P1tykki = new Cannon(65, 6);
242        P1tykki.Tag = "tykki";
243        P1tykki.Color = Color.Transparent;
244        P1tykki.Image = LoadImage("Tyhjyys");
245        P1tykki.Angle = Angle.StraightAngle;
246        P1.Add(P1tykki);
247
248        P2 = new Tankki(25, 24);
249        P2.Tag = "tankki";
250        P2.hp.MaxValue = 100;
251        P2.hp.Value = 100;
252        P2.Color = Color.Transparent;
253        P2.PlatformTolerance = 1;
254        P2.FacingDirection = Direction.Left;
255        P2.X = Screen.Width / 10;
256        Add(P2);
257
258        P2tykki = new Cannon(65, 6);
259        P2tykki.Tag = "tykki";
260        P2tykki.Image = LoadImage("Tyhjyys");
261        P2tykki.Color = Color.Transparent;
262        P2.Add(P2tykki);
263    }
264
265    public void Vesisimulaatio()
266    {
267        foreach (GameObject vesi in GetObjectsWithTag("neliovesi"))
268        {
269            Vector paikka = vesi.Position - new Vector(0, 8);
270            if (GetObjectAt(paikka) == null)
271            {
272                LuoNelioVesi(paikka, 20, 8);
273                LuoNelioVesi(vesi.Position, 20, 8);
274                vesi.Destroy();
275            }
276        }
277    }
278
279    public void Aloitapeli()
280    {
281        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
282        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Begin, "Lopeta peli");
283
284        MediaPlayer.Play("8-Bit it is");
285        MediaPlayer.IsRepeating = true;
286        pressure = false;
287
288        asekuvat = new Image[4];
289        asekuvat[0] = Kuula1;
290        asekuvat[1] = Kuula2;
291        asekuvat[2] = Kuula3;
292        asekuvat[3] = Kuula4;
293
294        AlustaAmmukset();
295
296        Level.Background.CreateGradient(Color.Turquoise, Color.White);
297
298        Timer Vesiajastin = new Timer();
299        Vesiajastin.Interval = 1.0;
300        Vesiajastin.Timeout += Vesisimulaatio;
301        Vesiajastin.Start();
302
303        Gravity = new Vector(0, -2000);
304
305        Camera.StayInLevel = false;
306        Camera.ZoomToLevel();
307
308        PhysicsObject ylaReuna = Level.CreateTopBorder();
309        ylaReuna.Color = Color.Charcoal;
310        ylaReuna.Height = 500;
311        ylaReuna.Bottom = Level.Top;
312        PhysicsObject alaReuna = Level.CreateBottomBorder();
313        alaReuna.Color = Color.Charcoal;
314        alaReuna.Height = 500;
315        alaReuna.Top = Level.Bottom;
316        PhysicsObject vasenReuna = Level.CreateLeftBorder();
317        vasenReuna.Color = Color.Charcoal;
318        PhysicsObject oikeaReuna = Level.CreateRightBorder();
319        oikeaReuna.Color = Color.Charcoal;
320
321        P1kehys = new Widget(400, 235);
322        P1kehys.X = Screen.Left + 200;
323        P1kehys.Y = Screen.Top - 55;
324        P1kehys.Color = Color.White;
325        Add(P1kehys);
326
327        P2kehys = new Widget(400, 235);
328        P2kehys.X = Screen.Right - 200;
329        P2kehys.Y = Screen.Top - 55;
330        P2kehys.Color = Color.White;
331        Add(P2kehys);
332
333        P1ammusruutu = new Widget(50, 50);
334        P1ammusruutu.X = Screen.Left + 325;
335        P1ammusruutu.Y = Screen.Top - 85;
336        VaihdaP1Asekuva();
337        Add(P1ammusruutu);
338
339        P2ammusruutu = new Widget(50, 50);
340        P2ammusruutu.X = Screen.Right - 325;
341        P2ammusruutu.Y = Screen.Top - 85;
342        VaihdaP2Asekuva();
343        Add(P2ammusruutu);
344
345        ProgressBar p1hpPalkki = new ProgressBar(200, 20);
346        p1hpPalkki.BindTo(P1.hp);
347        p1hpPalkki.BarColor = Color.LimeGreen;
348        p1hpPalkki.BorderColor = Color.Black;
349        p1hpPalkki.Color = Color.Silver;
350        p1hpPalkki.X = Screen.Left + 150;
351        p1hpPalkki.Y = Screen.Top - 35;
352        Add(p1hpPalkki);
353
354        ProgressBar P1ammusPalkki = new ProgressBar(200, 20);
355        P1ammusPalkki.BindTo(P1.ampumisajastin);
356        P1ammusPalkki.X = Screen.Left + 150;
357        P1ammusPalkki.Y = Screen.Top - 85;
358        P1ammusPalkki.BarColor = Color.Red;
359        P1ammusPalkki.BorderColor = Color.Black;
360        P1ammusPalkki.Color = Color.Silver;
361        Add(P1ammusPalkki);
362
363        ProgressBar P1hyppyPalkki = new ProgressBar(200, 20);
364        P1hyppyPalkki.BindTo(P1.hyppymittari);
365        P1hyppyPalkki.X = Screen.Left + 150;
366        P1hyppyPalkki.Y = Screen.Top - 135;
367        P1hyppyPalkki.BarColor = Color.HanPurple;
368        P1hyppyPalkki.BorderColor = Color.Black;
369        P1hyppyPalkki.Color = Color.Silver;
370        Add(P1hyppyPalkki);
371
372        ProgressBar P2hyppyPalkki = new ProgressBar(200, 20);
373        P2hyppyPalkki.BindTo(P2.hyppymittari);
374        P2hyppyPalkki.X = Screen.Right - 150;
375        P2hyppyPalkki.Y = Screen.Top - 135;
376        P2hyppyPalkki.BarColor = Color.HanPurple;
377        P2hyppyPalkki.BorderColor = Color.Black;
378        P2hyppyPalkki.Color = Color.Silver;
379        Add(P2hyppyPalkki);
380
381        ProgressBar p2hpPalkki = new ProgressBar(200, 20);
382        p2hpPalkki.BindTo(P2.hp);
383        p2hpPalkki.Angle += Angle.FromDegrees(180);
384        p2hpPalkki.BarColor = Color.LimeGreen;
385        p2hpPalkki.BorderColor = Color.Black;
386        p2hpPalkki.Color = Color.Silver;
387        p2hpPalkki.X = Screen.Right - 150;
388        p2hpPalkki.Y = Screen.Top - 35;
389        Add(p2hpPalkki);
390
391        ProgressBar P2ammusPalkki = new ProgressBar(200, 20);
392        P2ammusPalkki.BindTo(P2.ampumisajastin);
393        P2ammusPalkki.X = Screen.Right - 150;
394        P2ammusPalkki.Y = Screen.Top - 85;
395        P2ammusPalkki.Angle += Angle.FromDegrees(180);
396        P2ammusPalkki.BarColor = Color.Red;
397        P2ammusPalkki.BorderColor = Color.Black;
398        P2ammusPalkki.Color = Color.Silver;
399        Add(P2ammusPalkki);
400
401        P1.hp.LowerLimit += delegate
402        {
403            if (P2.IsDestroyed) return;
404
405            LuoRajahdys(P1.Position, RajahdysKuva5, TankkiTuhoutuminen);
406            P1.Destroy();
407            p1hpPalkki.Destroy();
408            p2hpPalkki.Destroy();
409            P1hyppyPalkki.Destroy();
410            P2hyppyPalkki.Destroy();
411            P1ammusPalkki.Destroy();
412            P2ammusPalkki.Destroy();
413            P1ammusruutu.Destroy();
414            P2ammusruutu.Destroy();
415            P1kehys.Destroy();
416            P2kehys.Destroy();
417            P2.hp.ClearTriggers();
418            MessageDisplay.Add("Pelaaja1 kuoli");
419            Timer.SingleShot(5.0, delegate
420            {
421                ClearAll();
422                Begin();
423            });
424        };
425
426        P2.hp.LowerLimit += delegate
427        {
428            if (P1.IsDestroyed) return;
429
430            LuoRajahdys(P2.Position, RajahdysKuva5, TankkiTuhoutuminen);
431            P2.Destroy();
432            p1hpPalkki.Destroy();
433            p2hpPalkki.Destroy();
434            P1hyppyPalkki.Destroy();
435            P2hyppyPalkki.Destroy();
436            P1ammusPalkki.Destroy();
437            P2ammusPalkki.Destroy();
438            P1ammusruutu.Destroy();
439            P2ammusruutu.Destroy();
440            P1kehys.Destroy();
441            P2kehys.Destroy();
442            P1.hp.ClearTriggers();
443            MessageDisplay.Add("Pelaaja2 kuoli");
444            Timer.SingleShot(5.0, delegate
445            {
446                ClearAll();
447                Begin();
448            });
449        };
450
451        AddCollisionHandler(P1, "neliolaava", Tankkiosuulaavaan);
452        AddCollisionHandler(P2, "neliolaava", Tankkiosuulaavaan);
453
454        AddCollisionHandler(P1, "neliovesi", Tankkiosuuveteen);
455        AddCollisionHandler(P2, "neliovesi", Tankkiosuuveteen);
456
457        AddCollisionHandler(P1, "neliovesiB", Tankkiosuuveteen);
458        AddCollisionHandler(P2, "neliovesiB", Tankkiosuuveteen);
459
460        P1.X = -750;
461        P1.Y = -20;
462        P2.X = 750;
463        P2.Y = -20;
464
465        Nappaimisto();
466
467        Timer hyppyajastin = new Timer();
468        hyppyajastin.Interval = 0.01;
469        hyppyajastin.Timeout += delegate
470        {
471            if (P1 != null) P1.hyppymittari.Value++;
472            if (P2 != null) P2.hyppymittari.Value++;
473        };
474        hyppyajastin.Start();
475
476        Timer ajastin = new Timer();
477        ajastin.Interval = 0.01;
478        ajastin.Timeout += delegate
479        {
480            if (P1 != null) P1.ampumisajastin.Value++;
481            if (P2 != null) P2.ampumisajastin.Value++;
482        };
483        ajastin.Start();
484
485        Timer vesiajastin = new Timer();
486        vesiajastin.Interval = 3;
487        vesiajastin.Timeout += delegate
488        {
489            foreach (PhysicsObject vesi in GetObjectsWithTag("neliovesi"))
490            {
491                List<GameObject> osuma = GetObjectsAt(vesi.Position + new Vector(0, -8));
492                if (osuma.Count <= 1)
493                {
494                    vesi.Position += new Vector(0, -8);
495                }
496            }
497        };
498        vesiajastin.Start();
499
500    }
501
502    void Tankkiosuulaavaan(PhysicsObject Tankki, PhysicsObject Laava)
503    {
504        if (Tankki == P1)
505        {
506            P1.hp.Value -= 1;
507        }
508        if (Tankki == P2)
509        {
510            P2.hp.Value -= 1;
511        }
512    }
513
514    void Tankkiosuuveteen(PhysicsObject Tankki, PhysicsObject neliovesi)
515    {
516        Tankki.Velocity *= Tankki.Tag.ToString() == "ammus" ? 0.95 : 0.8;
517        Tankki.Hit(new Vector(0, 42));
518    }
519
520    private void AlustaAmmukset()
521    {
522        LuoAmmus = new AmmuksenLuoja[4];
523        LuoAmmus[0] = LuoPerusAmmus;
524        LuoAmmus[1] = LuoKakkosAmmus;
525        LuoAmmus[2] = LuoKolmosAmmus;
526        LuoAmmus[3] = LuoNelosAmmus;
527    }
528
529    void LuoNelioMulta(Vector paikka, double leveys, double korkeus)
530    {
531        PhysicsObject neliomulta = PhysicsObject.CreateStaticObject(leveys, korkeus);
532        neliomulta.Position = paikka;
533        neliomulta.Color = Color.Brown;
534        neliomulta.CollisionIgnoreGroup = 1;
535        neliomulta.KineticFriction = 0;
536        neliomulta.Tag = "neliomulta";
537        Add(neliomulta);
538    }
539
540    void LuoNelioRuoho(Vector paikka, double leveys, double korkeus)
541    {
542        PhysicsObject nelioruoho = PhysicsObject.CreateStaticObject(leveys, korkeus);
543        nelioruoho.Position = paikka;
544        nelioruoho.Color = Color.BrownGreen;
545        nelioruoho.CollisionIgnoreGroup = 1;
546        nelioruoho.KineticFriction = 0;
547        nelioruoho.Tag = "nelioruoho";
548        Add(nelioruoho);
549    }
550
551    void LuoNelioVesi(Vector paikka, double leveys, double korkeus)
552    {
553        PhysicsObject neliovesi = PhysicsObject.CreateStaticObject(leveys, korkeus);
554        neliovesi.Position = paikka;
555        neliovesi.Color = Color.Blue;                                                                   
556        neliovesi.CollisionIgnoreGroup = 0;
557        neliovesi.IgnoresCollisionResponse = true;
558        neliovesi.KineticFriction = 0;
559        neliovesi.Tag = "neliovesi";
560        Add(neliovesi, -1);
561    }
562
563    void LuoNelioVesiB(Vector paikka, double leveys, double korkeus)
564    {
565        PhysicsObject neliovesiB = PhysicsObject.CreateStaticObject(leveys, korkeus);
566        neliovesiB.Position = paikka;
567        neliovesiB.Color = Color.Blue;                                                                   
568        neliovesiB.CollisionIgnoreGroup = 0;
569        neliovesiB.IgnoresCollisionResponse = true;
570        neliovesiB.KineticFriction = 0;
571        neliovesiB.Tag = "neliovesiB";
572        Add(neliovesiB, -1);
573    }
574
575    void LuoNelioLaava(Vector paikka, double leveys, double korkeus)
576    {
577        PhysicsObject neliolaava = PhysicsObject.CreateStaticObject(leveys, korkeus);
578        neliolaava.Position = paikka;
579        neliolaava.Color = Color.Red;
580        neliolaava.CollisionIgnoreGroup = 0;
581        neliolaava.IgnoresCollisionResponse = true;
582        neliolaava.KineticFriction = 0;
583        neliolaava.Tag = "neliolaava";
584        Add(neliolaava, -1);
585    }
586
587    void LuoNelioKallio(Vector paikka, double leveys, double korkeus)
588    {
589        PhysicsObject neliokallio = PhysicsObject.CreateStaticObject(leveys, korkeus);
590        neliokallio.Position = paikka;
591        neliokallio.Color = Color.Charcoal;
592        neliokallio.CollisionIgnoreGroup = 1;
593        neliokallio.KineticFriction = 0;
594        neliokallio.Tag = "neliokallio";
595        Add(neliokallio);
596    }
597
598    void Nappaimisto()
599    {
600        Vector vasemmalle = new Vector(-1400, 1400);
601        Vector oikealle = new Vector(1400, 1400);
602        Vector hyppy = new Vector(0, 25000);
603
604        Keyboard.Listen(Key.A, ButtonState.Down, LiikutaP1, null, P1, vasemmalle);
605        Keyboard.Listen(Key.D, ButtonState.Down, LiikutaP1, null, P1, oikealle);
606
607        Keyboard.Listen(Key.Left, ButtonState.Down, LiikutaP2, null, P2, vasemmalle);
608        Keyboard.Listen(Key.Right, ButtonState.Down, LiikutaP2, null, P2, oikealle);
609
610        Keyboard.Listen(Key.W, ButtonState.Down, KaannaTykki1, null, P1tykki, 2);
611        Keyboard.Listen(Key.S, ButtonState.Down, KaannaTykki1, null, P1tykki, -2);
612
613        Keyboard.Listen(Key.Down, ButtonState.Down, KaannaTykki2, null, P2tykki, 2);
614        Keyboard.Listen(Key.Up, ButtonState.Down, KaannaTykki2, null, P2tykki, -2);
615
616        Keyboard.Listen(Key.LeftControl, ButtonState.Down, Ammu, null, P1, P1tykki);
617        Keyboard.Listen(Key.RightControl, ButtonState.Down, Ammu, null, P2, P2tykki);
618
619        Keyboard.Listen(Key.LeftShift, ButtonState.Pressed, VaihdaP1, null);
620        Keyboard.Listen(Key.RightShift, ButtonState.Pressed, VaihdaP2, null);
621
622        Keyboard.Listen(Key.Tab, ButtonState.Pressed, Hyppaa, null, P1, hyppy);
623        Keyboard.Listen(Key.Enter, ButtonState.Pressed, Hyppaa, null, P2, hyppy);
624    }
625
626    void Hyppaa(Tankki tankki, Vector hyppy)
627    {
628        if (tankki == P1 && P1.saakohypata)
629        {
630            tankki.Push(hyppy);
631            P1.hyppymittari.Value = 0;
632            P1.saakohypata = false;
633        }
634       
635        if (tankki == P2 && P2.saakohypata == true)
636        {
637            P2.hyppymittari.Value = 0;
638            P2.saakohypata = false;
639            tankki.Push(hyppy);
640        }
641    }
642
643
644    void LiikutaP1(Tankki tankki, Vector liike)
645    {
646        if (Keyboard.GetKeyState(Key.A) == ButtonState.Down && Keyboard.GetKeyState(Key.D) == ButtonState.Down)
647            return;
648
649        if (liike.X < 0)
650        {
651            if (tankki == P1 && tankki1suunta == Direction.Right)
652            {
653                tankki1suunta = Direction.Left;
654                Vector v = Vector.FromAngle(P1tykki.Angle);
655                P1tykki.Angle = new Vector(-v.X, v.Y).Angle;
656            }
657        }
658
659        else if (liike.X > 0)
660        {
661            if (tankki == P1 && tankki1suunta == Direction.Left)
662            {
663                tankki1suunta = Direction.Right;
664                Vector v = Vector.FromAngle(P1tykki.Angle);
665                P1tykki.Angle = new Vector(-v.X, v.Y).Angle;
666            }
667        }
668        tankki.Push(liike);
669    }
670
671    void LiikutaP2(Tankki tankki, Vector liike)
672    {
673        if (Keyboard.GetKeyState(Key.Left) == ButtonState.Down && Keyboard.GetKeyState(Key.Right) == ButtonState.Down)
674            return;
675
676        if (liike.X < 0)
677        {
678            if (tankki == P2 && tankki2suunta == Direction.Right)
679            {
680                tankki2suunta = Direction.Left;
681                Vector v = Vector.FromAngle(P2tykki.Angle);
682                P2tykki.Angle = new Vector(-v.X, v.Y).Angle;
683            }
684        }
685
686        else if (liike.X > 0)
687        {
688            if (tankki == P2 && tankki2suunta == Direction.Left)
689            {
690                tankki2suunta = Direction.Right;
691                Vector v = Vector.FromAngle(P2tykki.Angle);
692                P2tykki.Angle = new Vector(-v.X, v.Y).Angle;
693            }
694        }
695        tankki.Push(liike);
696    }
697
698    void KaannaTykki1(Cannon tykki, int suunta)
699    {
700        double tykinkulma = tykki.Angle.Degrees;
701        double uusikulma;
702
703        if (tankki1suunta == Direction.Right)
704            uusikulma = tykinkulma + suunta;
705        else
706            uusikulma = tykinkulma - suunta;
707
708        if ((tankki1suunta == Direction.Right && uusikulma <= -90 && uusikulma >= -180) ||
709            (tankki1suunta == Direction.Left && uusikulma <= 0 && uusikulma >= -90))
710        {
711            tykki.Angle = Angle.FromDegrees(uusikulma);
712        }
713    }
714
715    void KaannaTykki2(Cannon tykki, int suunta)
716    {
717        double tykinkulma = tykki.Angle.Degrees;
718        double uusikulma;
719
720        if (tankki2suunta == Direction.Right)
721            uusikulma = tykinkulma - suunta;
722        else
723            uusikulma = tykinkulma + suunta;
724
725        if ((tankki2suunta == Direction.Right && uusikulma <= -90 && uusikulma >= -180) ||
726            (tankki2suunta == Direction.Left && uusikulma <= 0 && uusikulma >= -90))
727        {
728            tykki.Angle = Angle.FromDegrees(uusikulma);
729        }
730    }
731
732    void Ammu(PhysicsObject pelaaja, Cannon tykki)
733    {
734        Ammus ammus = null;
735
736        if (pelaaja == P1 && P1.saakoampua)
737        {
738            ammus = LuoAmmus[P1ammus]();
739            P1.ampumisajastin.MaxValue = ammus.aika;
740            P1.ampumisajastin.Value = 0;
741            P1.saakoampua = false;
742        }
743
744        if (pelaaja == P2 && P2.saakoampua)
745        {
746            ammus = LuoAmmus[P2ammus]();
747            P2.ampumisajastin.MaxValue = ammus.aika;
748            P2.ampumisajastin.Value = 0;
749            P2.saakoampua = false;
750        }
751
752        if (ammus != null)
753        {
754            ammus.Position = pelaaja.Position - Vector.FromLengthAndAngle(tykki.Width / 2, tykki.Angle);
755            ammus.Tag = "ammus";
756            Add(ammus);
757            ammus.Hit(-2000 * Vector.FromAngle(tykki.Angle));
758            AddCollisionHandler(ammus, "neliovesi", Tankkiosuuveteen);
759            AddCollisionHandler(ammus, "neliovesiB", Tankkiosuuveteen);
760            AddCollisionHandler(ammus, "neliomulta", Osuumaahan);
761            AddCollisionHandler(ammus, "nelioruoho", Osuumaahan);
762            AddCollisionHandler(ammus, "neliolaava", Osuulaavaan);
763            AddCollisionHandler(ammus, "neliokallio", Osuukallioon);
764            AddCollisionHandler(ammus, "ammus", Osuuammukseen);
765            AddCollisionHandler(ammus, "", CollisionHandler.DestroyObject); // seiniä varten                                           
766            AddCollisionHandler<PhysicsObject, Tankki>(ammus, "tankki", OsuuPelaajaan);
767        }
768    }
769
770    void OsuuPelaajaan(PhysicsObject ammus, Tankki pelaaja)
771    {
772        pelaaja.hp.Value -= ((Ammus)ammus).tuhovoima;
773        if (pelaaja.hp < 35 && !pressure)
774        {
775            pressure = true;
776            MediaPlayer.Play("8-bit it is (pressure)");
777        }
778        ammus.Destroy();
779        LuoRajahdys(ammus.Position, RajahdysKuva2, TankkiOsuma);
780    }
781
782    void Osuumaahan(PhysicsObject Ammus, PhysicsObject Maa)
783    {
784        Ammus.Destroy();
785        Maa.Destroy();
786        LuoRajahdys(Maa.Position, RajahdysKuva1, TankkiHuti);
787    }
788
789    void Osuuammukseen(PhysicsObject Ammus, PhysicsObject Ammus2)
790    {
791        Ammus.Destroy();
792        Ammus2.Destroy();
793        LuoRajahdys(Ammus.Position, RajahdysKuva3, TankkiOsuma);
794    }
795
796    void Osuukallioon(PhysicsObject Ammus, PhysicsObject Kallio)
797    {
798        Ammus.Destroy();
799        LuoRajahdys(Ammus.Position, RajahdysKuva2, TankkiOsuma);
800    }
801
802    void Osuulaavaan(PhysicsObject Ammus, PhysicsObject laava)
803    {
804        Ammus.Destroy();
805        LuoRajahdys(Ammus.Position, RajahdysKuva4, TankkiHuti);
806    }
807
808    void LuoRajahdys(Vector RajahdysPaikka, Image RajahdysKuva, SoundEffect RajahdysAani)
809    {
810        Explosion Rajahdys = new Explosion(100);
811        Rajahdys.Position = RajahdysPaikka;
812        Rajahdys.Image = RajahdysKuva;
813        Rajahdys.Sound = RajahdysAani;
814        Rajahdys.Speed = 500.0;
815        Rajahdys.MaxRadius = 90;
816        Rajahdys.UseShockWave = false;
817        Add(Rajahdys);
818    }
819
820    void VaihdaP1()
821    {
822        P1ammus++;
823        if (P1ammus >= LuoAmmus.Length) P1ammus = 0;
824        VaihdaP1Asekuva();
825    }
826
827    void VaihdaP1Asekuva()
828    {
829        Image kuva = asekuvat[P1ammus];
830        P1ammusruutu.Image = kuva;
831        P1ammusruutu.Width = kuva.Width;
832        P1ammusruutu.Height = kuva.Height;
833    }
834
835    void VaihdaP2()
836    {
837        P2ammus++;
838        if (P2ammus >= LuoAmmus.Length) P2ammus = 0;
839        VaihdaP2Asekuva();
840    }
841
842    void VaihdaP2Asekuva()
843    {
844        Image kuva = asekuvat[P2ammus];
845        P2ammusruutu.Image = kuva;
846        P2ammusruutu.Width = kuva.Width;
847        P2ammusruutu.Height = kuva.Height;
848    }
849
850    Ammus LuoPerusAmmus()
851    {
852        Ammus ammus = new Ammus(8, 8);
853        ammus.tuhovoima = 1;
854        ammus.aika = 15;
855        ammus.Image = Kuula1;
856        return ammus;
857    }
858
859    Ammus LuoKakkosAmmus()
860    {
861        Ammus ammus = new Ammus(12, 12);
862        ammus.tuhovoima = 4;
863        ammus.aika = 30;
864        ammus.Image = Kuula2;
865        ammus.Mass = 1.3;
866        return ammus;
867    }
868
869    Ammus LuoKolmosAmmus()
870    {
871        Ammus ammus = new Ammus(18, 18);
872        ammus.Image = Kuula3;
873        ammus.tuhovoima = 8;
874        ammus.aika = 45;
875        ammus.Mass = 1.7;
876        return ammus;
877    }
878
879    Ammus LuoNelosAmmus()
880    {
881        Ammus ammus = new Ammus(22, 22);
882        ammus.Image = Kuula4;
883        ammus.tuhovoima = 12;
884        ammus.aika = 60;
885        ammus.Mass = 3;
886        return ammus;
887    }
888}
Note: See TracBrowser for help on using the repository browser.