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

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