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

Revision 4334, 28.2 KB checked in by juiitamm, 8 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
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 ajastin = new IntMeter(0, 0, 100);
16    public IntMeter hyppyajastin = new IntMeter(100, 0, 100);
17    public Tankki(double leveys, double korkeus)
18        : base(leveys, korkeus)
19    {
20        ajastin.UpperLimit += lataa;
21    }
22    public void lataa()
23    {
24        saakoampua = true;
25    }
26    public void lataahyppya()
27    {
28        saakohypata = true;
29    }
30
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, 250);
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, 250);
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 - 100;
333        VaihdaP1Asekuva();
334        Add(P1ammusruutu);
335
336        P2ammusruutu = new Widget(50, 50);
337        P2ammusruutu.X = Screen.Right - 325;
338        P2ammusruutu.Y = Screen.Top - 100;
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.LightGray;
347        p1hpPalkki.X = Screen.Left + 150;
348        p1hpPalkki.Y = Screen.Top - 50;
349        Add(p1hpPalkki);
350
351        ProgressBar P1ammusPalkki = new ProgressBar(200, 20);
352        P1ammusPalkki.BindTo(P1.ajastin);
353        P1ammusPalkki.X = Screen.Left + 150;
354        P1ammusPalkki.Y = Screen.Top - 100;
355        P1ammusPalkki.BarColor = Color.Red;
356        P1ammusPalkki.BorderColor = Color.Black;
357        P1ammusPalkki.Color = Color.LightGray;
358        Add(P1ammusPalkki);
359
360        ProgressBar P1hyppyPalkki = new ProgressBar(200, 20);
361        P1hyppyPalkki.BindTo(P1.hyppyajastin);
362        P1hyppyPalkki.X = Screen.Left + 150;
363        P1hyppyPalkki.Y = Screen.Top - 150;
364        P1hyppyPalkki.BarColor = Color.Yellow;
365        P1hyppyPalkki.BorderColor = Color.Black;
366        P1hyppyPalkki.Color = Color.LightGray;
367        Add(P1hyppyPalkki);
368
369        ProgressBar P2hyppyPalkki = new ProgressBar(200, 20);
370        P2hyppyPalkki.BindTo(P1.hyppyajastin);
371        P2hyppyPalkki.X = Screen.Right - 150;
372        P2hyppyPalkki.Y = Screen.Top - 150;
373        P2hyppyPalkki.BarColor = Color.Yellow;
374        P2hyppyPalkki.BorderColor = Color.Black;
375        P2hyppyPalkki.Color = Color.LightGray;
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.LightGray;
384        p2hpPalkki.X = Screen.Right - 150;
385        p2hpPalkki.Y = Screen.Top - 50;
386        Add(p2hpPalkki);
387
388        ProgressBar P2ammusPalkki = new ProgressBar(200, 20);
389        P2ammusPalkki.BindTo(P2.ajastin);
390        P2ammusPalkki.X = Screen.Right - 150;
391        P2ammusPalkki.Y = Screen.Top - 100;
392        P2ammusPalkki.Angle += Angle.FromDegrees(180);
393        P2ammusPalkki.BarColor = Color.Red;
394        P2ammusPalkki.BorderColor = Color.Black;
395        P2ammusPalkki.Color = Color.LightGray;
396        Add(P2ammusPalkki);
397
398        P1.hp.LowerLimit += delegate
399        {
400            LuoRajahdys(P1.Position, RajahdysKuva5, TankkiTuhoutuminen);
401            P1.Destroy();
402            P1 = null;
403            p1hpPalkki.Destroy();
404            p2hpPalkki.Destroy();
405            P1hyppyPalkki.Destroy();
406            P2hyppyPalkki.Destroy();
407            P1ammusPalkki.Destroy();
408            P2ammusPalkki.Destroy();
409            P1ammusruutu.Destroy();
410            P2ammusruutu.Destroy();
411            P1kehys.Destroy();
412            P2kehys.Destroy();
413            MessageDisplay.Add("Pelaaja1 kuoli");
414            Timer.SingleShot(5.0, delegate
415            {
416                ClearAll();
417                Begin();
418            });
419        };
420     
421        P2.hp.LowerLimit += delegate
422        {
423            LuoRajahdys(P2.Position, RajahdysKuva5, TankkiTuhoutuminen);
424            P2.Destroy();
425            P2 = null;
426            p1hpPalkki.Destroy();
427            p2hpPalkki.Destroy();
428            P1hyppyPalkki.Destroy();
429            P2hyppyPalkki.Destroy();
430            P1ammusPalkki.Destroy();
431            P2ammusPalkki.Destroy();
432            P1ammusruutu.Destroy();
433            P2ammusruutu.Destroy();
434            P1kehys.Destroy();
435            P2kehys.Destroy();
436            MessageDisplay.Add("Pelaaja2 kuoli");
437            Timer.SingleShot(5.0, delegate
438            {
439                ClearAll();
440                Begin();
441            });
442        };
443
444        AddCollisionHandler(P1, "neliolaava", Tankkiosuulaavaan);
445        AddCollisionHandler(P2, "neliolaava", Tankkiosuulaavaan);
446
447        AddCollisionHandler(P1, "neliovesi", Tankkiosuuveteen);
448        AddCollisionHandler(P2, "neliovesi", Tankkiosuuveteen);
449
450        AddCollisionHandler(P1, "neliovesiB", Tankkiosuuveteen);
451        AddCollisionHandler(P2, "neliovesiB", Tankkiosuuveteen);
452
453        P1.X = -750;
454        P1.Y = 10;
455        P2.X = 750;
456        P2.Y = 10;
457
458        Nappaimisto();
459
460        Timer hyppyajastin = new Timer();
461        hyppyajastin.Interval = 0.01;
462        hyppyajastin.Timeout += delegate
463        {
464            if (P1 != null) P1.hyppyajastin.Value++;
465            if (P2 != null) P2.hyppyajastin.Value++;
466        };
467
468        Timer ajastin = new Timer();
469        ajastin.Interval = 0.01;
470        ajastin.Timeout += delegate
471        {
472            if (P1 != null) P1.ajastin.Value++;
473            if (P2 != null) P2.ajastin.Value++;
474        };
475        ajastin.Start();
476
477        Timer vesiajastin = new Timer();
478        vesiajastin.Interval = 3;
479        vesiajastin.Timeout += delegate
480        {
481            foreach (PhysicsObject vesi in GetObjectsWithTag("neliovesi"))
482            {
483                List<GameObject> osuma = GetObjectsAt(vesi.Position + new Vector(0, -8));
484                if (osuma.Count <= 1)
485                {
486                    vesi.Position += new Vector(0, -8);
487                }
488            }
489        };
490        vesiajastin.Start();
491       
492    }
493
494    void Tankkiosuulaavaan(PhysicsObject Tankki, PhysicsObject Laava)
495    {
496        if (Tankki == P1)
497        {
498            P1.hp.Value -= 2;
499        }
500        if (Tankki == P2)
501        {
502            P2.hp.Value -= 2;
503        }
504    }
505
506    void Tankkiosuuveteen(PhysicsObject Tankki, PhysicsObject neliovesi)
507    {
508        Tankki.Velocity *= Tankki.Tag == "ammus"? 0.95 : 0.8;
509        Tankki.Hit(new Vector(0, 42));
510    }
511
512    private void AlustaAmmukset()
513    {
514        LuoAmmus = new AmmuksenLuoja[4];
515        LuoAmmus[0] = LuoPerusAmmus;
516        LuoAmmus[1] = LuoKakkosAmmus;
517        LuoAmmus[2] = LuoKolmosAmmus;
518        LuoAmmus[3] = LuoNelosAmmus;
519    }
520
521    void LuoNelioMulta(Vector paikka, double leveys, double korkeus)
522    {
523        PhysicsObject neliomulta = PhysicsObject.CreateStaticObject(leveys, korkeus);
524        neliomulta.Position = paikka;
525        neliomulta.Color = Color.Brown;
526        neliomulta.CollisionIgnoreGroup = 1;
527        neliomulta.KineticFriction = 0;
528        neliomulta.Tag = "neliomulta";
529        Add(neliomulta);
530    }
531
532    void LuoNelioRuoho(Vector paikka, double leveys, double korkeus)
533    {
534        PhysicsObject nelioruoho = PhysicsObject.CreateStaticObject(leveys, korkeus);
535        nelioruoho.Position = paikka;
536        nelioruoho.Color = Color.BrownGreen;
537        nelioruoho.CollisionIgnoreGroup = 1;
538        nelioruoho.KineticFriction = 0;
539        nelioruoho.Tag = "nelioruoho";
540        Add(nelioruoho);
541    }
542
543    void LuoNelioVesi(Vector paikka, double leveys, double korkeus)
544    {
545        PhysicsObject neliovesi = PhysicsObject.CreateStaticObject(leveys, korkeus);
546        neliovesi.Position = paikka;
547        neliovesi.Color = Color.Blue; //new Color(0, 0, 255, 128);
548        neliovesi.CollisionIgnoreGroup = 0;
549        neliovesi.IgnoresCollisionResponse = true;
550        neliovesi.KineticFriction = 0;
551        neliovesi.Tag = "neliovesi";
552        Add(neliovesi, -1);
553    }
554
555    void LuoNelioVesiB(Vector paikka, double leveys, double korkeus)
556    {
557        PhysicsObject neliovesiB = PhysicsObject.CreateStaticObject(leveys, korkeus);
558        neliovesiB.Position = paikka;
559        neliovesiB.Color = Color.Blue; //new Color(0, 0, 255, 128);
560        neliovesiB.CollisionIgnoreGroup = 0;
561        neliovesiB.IgnoresCollisionResponse = true;
562        neliovesiB.KineticFriction = 0;
563        neliovesiB.Tag = "neliovesiB";
564        Add(neliovesiB, -1);
565    }
566
567    void LuoNelioLaava(Vector paikka, double leveys, double korkeus)
568    {
569        PhysicsObject neliolaava = PhysicsObject.CreateStaticObject(leveys, korkeus);
570        neliolaava.Position = paikka;
571        neliolaava.Color = Color.Red;
572        neliolaava.CollisionIgnoreGroup = 0;
573        neliolaava.IgnoresCollisionResponse = true;
574        neliolaava.KineticFriction = 0;
575        neliolaava.Tag = "neliolaava";
576        Add(neliolaava, -1);
577    }
578
579    void LuoNelioKallio(Vector paikka, double leveys, double korkeus)
580    {
581        PhysicsObject neliokallio = PhysicsObject.CreateStaticObject(leveys, korkeus);
582        neliokallio.Position = paikka;
583        neliokallio.Color = Color.Charcoal;
584        neliokallio.CollisionIgnoreGroup = 1;
585        neliokallio.KineticFriction = 0;
586        neliokallio.Tag = "neliokallio";
587        Add(neliokallio);
588    }
589
590    void Nappaimisto()
591    {
592        Vector vasemmalle = new Vector(-1400, 1500);
593        Vector oikealle = new Vector(1400, 1500);
594        Vector hyppy = new Vector(0, 20000);
595
596        Keyboard.Listen(Key.A, ButtonState.Down, LiikutaP1, null, P1, vasemmalle);
597        Keyboard.Listen(Key.D, ButtonState.Down, LiikutaP1, null, P1, oikealle);
598
599        Keyboard.Listen(Key.Left, ButtonState.Down, LiikutaP2, null, P2, vasemmalle);
600        Keyboard.Listen(Key.Right, ButtonState.Down, LiikutaP2, null, P2, oikealle);
601
602        Keyboard.Listen(Key.W, ButtonState.Down, KaannaTykki1, null, P1tykki, 2);
603        Keyboard.Listen(Key.S, ButtonState.Down, KaannaTykki1, null, P1tykki, -2);
604
605        Keyboard.Listen(Key.Down, ButtonState.Down, KaannaTykki2, null, P2tykki, 2);
606        Keyboard.Listen(Key.Up, ButtonState.Down, KaannaTykki2, null, P2tykki, -2);
607
608        Keyboard.Listen(Key.LeftControl, ButtonState.Down, Ammu, null, P1, P1tykki);
609        Keyboard.Listen(Key.RightControl, ButtonState.Down, Ammu, null, P2, P2tykki);
610
611        Keyboard.Listen(Key.LeftShift, ButtonState.Pressed, VaihdaP1, null);
612        Keyboard.Listen(Key.RightShift, ButtonState.Pressed, VaihdaP2, null);
613
614        Keyboard.Listen(Key.Tab, ButtonState.Pressed, HyppaaP1, null, P1, hyppy);
615        Keyboard.Listen(Key.Enter, ButtonState.Pressed, HyppaaP2, null, P2, hyppy);
616    }
617
618    void HyppaaP1( Tankki tankki, Vector hyppy)
619    {
620        tankki.Push(hyppy);
621        if (tankki == P1 && P1.saakohypata)
622        {
623            P1.hyppyajastin.Value = 0;
624            P1.saakohypata = false;
625        }
626    }
627
628    void HyppaaP2(Tankki tankki, Vector hyppy)
629    {
630        tankki.Push(hyppy);
631        if (tankki == P2 && P2.saakohypata)
632        {
633            P2.hyppyajastin.Value = 0;
634            P2.saakohypata = false;
635        }
636    }
637
638    void LiikutaP1(Tankki tankki, Vector liike)
639    {
640        if (Keyboard.GetKeyState(Key.A) == ButtonState.Down && Keyboard.GetKeyState(Key.D) == ButtonState.Down)
641            return;
642
643        if (liike.X < 0)
644        {
645            if (tankki == P1 && tankki1suunta == Direction.Right)
646            {
647                tankki1suunta = Direction.Left;
648                Vector v = Vector.FromAngle(P1tykki.Angle);
649                P1tykki.Angle = new Vector(-v.X, v.Y).Angle;
650            }
651        }
652
653        else if (liike.X > 0)
654        {
655            if (tankki == P1 && tankki1suunta == Direction.Left)
656            {
657                tankki1suunta = Direction.Right;
658                Vector v = Vector.FromAngle(P1tykki.Angle);
659                P1tykki.Angle = new Vector(-v.X, v.Y).Angle;
660            }
661        }
662        tankki.Push(liike);
663    }
664
665    void LiikutaP2(Tankki tankki, Vector liike)
666    {
667        if (Keyboard.GetKeyState(Key.Left) == ButtonState.Down && Keyboard.GetKeyState(Key.Right) == ButtonState.Down)
668            return;
669
670        if (liike.X < 0)
671        {
672            if (tankki == P2 && tankki2suunta == Direction.Right)
673            {
674                tankki2suunta = Direction.Left;
675                Vector v = Vector.FromAngle(P2tykki.Angle);
676                P2tykki.Angle = new Vector(-v.X, v.Y).Angle;
677            }
678        }
679
680        else if (liike.X > 0)
681        {
682            if (tankki == P2 && tankki2suunta == Direction.Left)
683            {
684                tankki2suunta = Direction.Right;
685                Vector v = Vector.FromAngle(P2tykki.Angle);
686                P2tykki.Angle = new Vector(-v.X, v.Y).Angle;
687            }
688        }
689        tankki.Push(liike);
690    }
691
692    void KaannaTykki1(Cannon tykki, int suunta)
693    {
694        double tykinkulma = tykki.Angle.Degrees;
695        double uusikulma;
696
697        if (tankki1suunta == Direction.Right)
698            uusikulma = tykinkulma + suunta;
699        else
700            uusikulma = tykinkulma - suunta;
701
702        if ((tankki1suunta == Direction.Right && uusikulma <= -90 && uusikulma >= -180) ||
703            (tankki1suunta == Direction.Left && uusikulma <= 0 && uusikulma >= -90))
704        {
705            tykki.Angle = Angle.FromDegrees(uusikulma);
706        }
707    }
708
709    void KaannaTykki2(Cannon tykki, int suunta)
710    {
711        double tykinkulma = tykki.Angle.Degrees;
712        double uusikulma;
713
714        if (tankki2suunta == Direction.Right)
715            uusikulma = tykinkulma - suunta;
716        else
717            uusikulma = tykinkulma + suunta;
718
719        if ((tankki2suunta == Direction.Right && uusikulma <= -90 && uusikulma >= -180) ||
720            (tankki2suunta == Direction.Left && uusikulma <= 0 && uusikulma >= -90))
721        {
722            tykki.Angle = Angle.FromDegrees(uusikulma);
723        }
724    }
725
726    void Ammu(PhysicsObject pelaaja, Cannon tykki)
727    {
728        Ammus ammus = null;
729
730        if (pelaaja == P1 && P1.saakoampua)
731        {
732            ammus = LuoAmmus[P1ammus]();
733            P1.ajastin.MaxValue = ammus.aika;
734            P1.ajastin.Value = 0;
735            P1.saakoampua = false;
736        }
737
738        if (pelaaja == P2 && P2.saakoampua)
739        {
740            ammus = LuoAmmus[P2ammus]();
741            P2.ajastin.MaxValue = ammus.aika;
742            P2.ajastin.Value = 0;
743            P2.saakoampua = false;
744        }
745
746        if (ammus != null)
747        {
748            ammus.Position = pelaaja.Position - Vector.FromLengthAndAngle(tykki.Width / 2, tykki.Angle);
749            ammus.Tag = "ammus";
750            Add(ammus);
751            ammus.Hit(-2000 * Vector.FromAngle(tykki.Angle));
752            AddCollisionHandler(ammus, "neliovesi", Tankkiosuuveteen);
753            AddCollisionHandler(ammus, "neliovesiB", Tankkiosuuveteen);
754            AddCollisionHandler(ammus, "neliomulta", Osuumaahan);
755            AddCollisionHandler(ammus, "nelioruoho", Osuumaahan);
756            AddCollisionHandler(ammus, "neliolaava", Osuulaavaan);
757            AddCollisionHandler(ammus, "neliokallio", Osuukallioon);
758            AddCollisionHandler(ammus, "ammus", Osuuammukseen);
759            AddCollisionHandler(ammus, "", CollisionHandler.DestroyObject); // seiniä varten
760            AddCollisionHandler<PhysicsObject, Tankki>(ammus, "tankki", OsuuPelaajaan);
761        }
762    }
763
764    void OsuuPelaajaan(PhysicsObject ammus, Tankki pelaaja)
765    {
766        pelaaja.hp.Value -= ((Ammus)ammus).tuhovoima;
767        if (pelaaja.hp < 50 && !pressure)
768        {
769            pressure = true;
770            MediaPlayer.Play("8-bit it is (pressure)");
771        }
772        ammus.Destroy();
773        LuoRajahdys(ammus.Position, RajahdysKuva2, TankkiOsuma);
774    }
775
776    void Osuumaahan(PhysicsObject Ammus, PhysicsObject Maa)
777    {
778        Ammus.Destroy();
779        Maa.Destroy();
780        LuoRajahdys(Maa.Position, RajahdysKuva1, TankkiHuti);
781    }
782
783    //void Osuuveteen(PhysicsObject Ammus, PhysicsObject Ammus2);
784    //    Ammus.Destroy();
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.