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

Revision 4347, 28.3 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 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 = false;
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            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.hyppyajastin.Value++;
469            if (P2 != null) P2.hyppyajastin.Value++;
470        };
471
472        Timer ajastin = new Timer();
473        ajastin.Interval = 0.01;
474        ajastin.Timeout += delegate
475        {
476            if (P1 != null) P1.ajastin.Value++;
477            if (P2 != null) P2.ajastin.Value++;
478        };
479        ajastin.Start();
480
481        Timer vesiajastin = new Timer();
482        vesiajastin.Interval = 3;
483        vesiajastin.Timeout += delegate
484        {
485            foreach (PhysicsObject vesi in GetObjectsWithTag("neliovesi"))
486            {
487                List<GameObject> osuma = GetObjectsAt(vesi.Position + new Vector(0, -8));
488                if (osuma.Count <= 1)
489                {
490                    vesi.Position += new Vector(0, -8);
491                }
492            }
493        };
494        vesiajastin.Start();
495       
496    }
497
498    void Tankkiosuulaavaan(PhysicsObject Tankki, PhysicsObject Laava)
499    {
500        if (Tankki == P1)
501        {
502            P1.hp.Value -= 2;
503        }
504        if (Tankki == P2)
505        {
506            P2.hp.Value -= 2;
507        }
508    }
509
510    void Tankkiosuuveteen(PhysicsObject Tankki, PhysicsObject neliovesi)
511    {
512        Tankki.Velocity *= Tankki.Tag.ToString() == "ammus"? 0.95 : 0.8;
513        Tankki.Hit(new Vector(0, 42));
514    }
515
516    private void AlustaAmmukset()
517    {
518        LuoAmmus = new AmmuksenLuoja[4];
519        LuoAmmus[0] = LuoPerusAmmus;
520        LuoAmmus[1] = LuoKakkosAmmus;
521        LuoAmmus[2] = LuoKolmosAmmus;
522        LuoAmmus[3] = LuoNelosAmmus;
523    }
524
525    void LuoNelioMulta(Vector paikka, double leveys, double korkeus)
526    {
527        PhysicsObject neliomulta = PhysicsObject.CreateStaticObject(leveys, korkeus);
528        neliomulta.Position = paikka;
529        neliomulta.Color = Color.Brown;
530        neliomulta.CollisionIgnoreGroup = 1;
531        neliomulta.KineticFriction = 0;
532        neliomulta.Tag = "neliomulta";
533        Add(neliomulta);
534    }
535
536    void LuoNelioRuoho(Vector paikka, double leveys, double korkeus)
537    {
538        PhysicsObject nelioruoho = PhysicsObject.CreateStaticObject(leveys, korkeus);
539        nelioruoho.Position = paikka;
540        nelioruoho.Color = Color.BrownGreen;
541        nelioruoho.CollisionIgnoreGroup = 1;
542        nelioruoho.KineticFriction = 0;
543        nelioruoho.Tag = "nelioruoho";
544        Add(nelioruoho);
545    }
546
547    void LuoNelioVesi(Vector paikka, double leveys, double korkeus)
548    {
549        PhysicsObject neliovesi = PhysicsObject.CreateStaticObject(leveys, korkeus);
550        neliovesi.Position = paikka;
551        neliovesi.Color = Color.Blue; //new Color(0, 0, 255, 128);
552        neliovesi.CollisionIgnoreGroup = 0;
553        neliovesi.IgnoresCollisionResponse = true;
554        neliovesi.KineticFriction = 0;
555        neliovesi.Tag = "neliovesi";
556        Add(neliovesi, -1);
557    }
558
559    void LuoNelioVesiB(Vector paikka, double leveys, double korkeus)
560    {
561        PhysicsObject neliovesiB = PhysicsObject.CreateStaticObject(leveys, korkeus);
562        neliovesiB.Position = paikka;
563        neliovesiB.Color = Color.Blue; //new Color(0, 0, 255, 128);
564        neliovesiB.CollisionIgnoreGroup = 0;
565        neliovesiB.IgnoresCollisionResponse = true;
566        neliovesiB.KineticFriction = 0;
567        neliovesiB.Tag = "neliovesiB";
568        Add(neliovesiB, -1);
569    }
570
571    void LuoNelioLaava(Vector paikka, double leveys, double korkeus)
572    {
573        PhysicsObject neliolaava = PhysicsObject.CreateStaticObject(leveys, korkeus);
574        neliolaava.Position = paikka;
575        neliolaava.Color = Color.Red;
576        neliolaava.CollisionIgnoreGroup = 0;
577        neliolaava.IgnoresCollisionResponse = true;
578        neliolaava.KineticFriction = 0;
579        neliolaava.Tag = "neliolaava";
580        Add(neliolaava, -1);
581    }
582
583    void LuoNelioKallio(Vector paikka, double leveys, double korkeus)
584    {
585        PhysicsObject neliokallio = PhysicsObject.CreateStaticObject(leveys, korkeus);
586        neliokallio.Position = paikka;
587        neliokallio.Color = Color.Charcoal;
588        neliokallio.CollisionIgnoreGroup = 1;
589        neliokallio.KineticFriction = 0;
590        neliokallio.Tag = "neliokallio";
591        Add(neliokallio);
592    }
593
594    void Nappaimisto()
595    {
596        Vector vasemmalle = new Vector(-1400, 1500);
597        Vector oikealle = new Vector(1400, 1500);
598        Vector hyppy = new Vector(0, 20000);
599
600        Keyboard.Listen(Key.A, ButtonState.Down, LiikutaP1, null, P1, vasemmalle);
601        Keyboard.Listen(Key.D, ButtonState.Down, LiikutaP1, null, P1, oikealle);
602
603        Keyboard.Listen(Key.Left, ButtonState.Down, LiikutaP2, null, P2, vasemmalle);
604        Keyboard.Listen(Key.Right, ButtonState.Down, LiikutaP2, null, P2, oikealle);
605
606        Keyboard.Listen(Key.W, ButtonState.Down, KaannaTykki1, null, P1tykki, 2);
607        Keyboard.Listen(Key.S, ButtonState.Down, KaannaTykki1, null, P1tykki, -2);
608
609        Keyboard.Listen(Key.Down, ButtonState.Down, KaannaTykki2, null, P2tykki, 2);
610        Keyboard.Listen(Key.Up, ButtonState.Down, KaannaTykki2, null, P2tykki, -2);
611
612        Keyboard.Listen(Key.LeftControl, ButtonState.Down, Ammu, null, P1, P1tykki);
613        Keyboard.Listen(Key.RightControl, ButtonState.Down, Ammu, null, P2, P2tykki);
614
615        Keyboard.Listen(Key.LeftShift, ButtonState.Pressed, VaihdaP1, null);
616        Keyboard.Listen(Key.RightShift, ButtonState.Pressed, VaihdaP2, null);
617
618        Keyboard.Listen(Key.Tab, ButtonState.Pressed, HyppaaP1, null, P1, hyppy);
619        Keyboard.Listen(Key.Enter, ButtonState.Pressed, HyppaaP2, null, P2, hyppy);
620    }
621
622    void HyppaaP1( Tankki tankki, Vector hyppy)
623    {
624        tankki.Push(hyppy);
625        if (tankki == P1 && P1.saakohypata)
626        {
627            P1.hyppyajastin.Value = 0;
628            P1.saakohypata = false;
629        }
630    }
631
632    void HyppaaP2(Tankki tankki, Vector hyppy)
633    {
634        tankki.Push(hyppy);
635        if (tankki == P2 && P2.saakohypata)
636        {
637            P2.hyppyajastin.Value = 0;
638            P2.saakohypata = false;
639        }
640    }
641
642    void LiikutaP1(Tankki tankki, Vector liike)
643    {
644        if (Keyboard.GetKeyState(Key.A) == ButtonState.Down && Keyboard.GetKeyState(Key.D) == ButtonState.Down)
645            return;
646
647        if (liike.X < 0)
648        {
649            if (tankki == P1 && tankki1suunta == Direction.Right)
650            {
651                tankki1suunta = Direction.Left;
652                Vector v = Vector.FromAngle(P1tykki.Angle);
653                P1tykki.Angle = new Vector(-v.X, v.Y).Angle;
654            }
655        }
656
657        else if (liike.X > 0)
658        {
659            if (tankki == P1 && tankki1suunta == Direction.Left)
660            {
661                tankki1suunta = Direction.Right;
662                Vector v = Vector.FromAngle(P1tykki.Angle);
663                P1tykki.Angle = new Vector(-v.X, v.Y).Angle;
664            }
665        }
666        tankki.Push(liike);
667    }
668
669    void LiikutaP2(Tankki tankki, Vector liike)
670    {
671        if (Keyboard.GetKeyState(Key.Left) == ButtonState.Down && Keyboard.GetKeyState(Key.Right) == ButtonState.Down)
672            return;
673
674        if (liike.X < 0)
675        {
676            if (tankki == P2 && tankki2suunta == Direction.Right)
677            {
678                tankki2suunta = Direction.Left;
679                Vector v = Vector.FromAngle(P2tykki.Angle);
680                P2tykki.Angle = new Vector(-v.X, v.Y).Angle;
681            }
682        }
683
684        else if (liike.X > 0)
685        {
686            if (tankki == P2 && tankki2suunta == Direction.Left)
687            {
688                tankki2suunta = Direction.Right;
689                Vector v = Vector.FromAngle(P2tykki.Angle);
690                P2tykki.Angle = new Vector(-v.X, v.Y).Angle;
691            }
692        }
693        tankki.Push(liike);
694    }
695
696    void KaannaTykki1(Cannon tykki, int suunta)
697    {
698        double tykinkulma = tykki.Angle.Degrees;
699        double uusikulma;
700
701        if (tankki1suunta == Direction.Right)
702            uusikulma = tykinkulma + suunta;
703        else
704            uusikulma = tykinkulma - suunta;
705
706        if ((tankki1suunta == Direction.Right && uusikulma <= -90 && uusikulma >= -180) ||
707            (tankki1suunta == Direction.Left && uusikulma <= 0 && uusikulma >= -90))
708        {
709            tykki.Angle = Angle.FromDegrees(uusikulma);
710        }
711    }
712
713    void KaannaTykki2(Cannon tykki, int suunta)
714    {
715        double tykinkulma = tykki.Angle.Degrees;
716        double uusikulma;
717
718        if (tankki2suunta == Direction.Right)
719            uusikulma = tykinkulma - suunta;
720        else
721            uusikulma = tykinkulma + suunta;
722
723        if ((tankki2suunta == Direction.Right && uusikulma <= -90 && uusikulma >= -180) ||
724            (tankki2suunta == Direction.Left && uusikulma <= 0 && uusikulma >= -90))
725        {
726            tykki.Angle = Angle.FromDegrees(uusikulma);
727        }
728    }
729
730    void Ammu(PhysicsObject pelaaja, Cannon tykki)
731    {
732        Ammus ammus = null;
733
734        if (pelaaja == P1 && P1.saakoampua)
735        {
736            ammus = LuoAmmus[P1ammus]();
737            P1.ajastin.MaxValue = ammus.aika;
738            P1.ajastin.Value = 0;
739            P1.saakoampua = false;
740        }
741
742        if (pelaaja == P2 && P2.saakoampua)
743        {
744            ammus = LuoAmmus[P2ammus]();
745            P2.ajastin.MaxValue = ammus.aika;
746            P2.ajastin.Value = 0;
747            P2.saakoampua = false;
748        }
749
750        if (ammus != null)
751        {
752            ammus.Position = pelaaja.Position - Vector.FromLengthAndAngle(tykki.Width / 2, tykki.Angle);
753            ammus.Tag = "ammus";
754            Add(ammus);
755            ammus.Hit(-2000 * Vector.FromAngle(tykki.Angle));
756            AddCollisionHandler(ammus, "neliovesi", Tankkiosuuveteen);
757            AddCollisionHandler(ammus, "neliovesiB", Tankkiosuuveteen);
758            AddCollisionHandler(ammus, "neliomulta", Osuumaahan);
759            AddCollisionHandler(ammus, "nelioruoho", Osuumaahan);
760            AddCollisionHandler(ammus, "neliolaava", Osuulaavaan);
761            AddCollisionHandler(ammus, "neliokallio", Osuukallioon);
762            AddCollisionHandler(ammus, "ammus", Osuuammukseen);
763            AddCollisionHandler(ammus, "", CollisionHandler.DestroyObject); // seiniä varten
764            AddCollisionHandler<PhysicsObject, Tankki>(ammus, "tankki", OsuuPelaajaan);
765        }
766    }
767
768    void OsuuPelaajaan(PhysicsObject ammus, Tankki pelaaja)
769    {
770        pelaaja.hp.Value -= ((Ammus)ammus).tuhovoima;
771        if (pelaaja.hp < 50 && !pressure)
772        {
773            pressure = true;
774            MediaPlayer.Play("8-bit it is (pressure)");
775        }
776        ammus.Destroy();
777        LuoRajahdys(ammus.Position, RajahdysKuva2, TankkiOsuma);
778    }
779
780    void Osuumaahan(PhysicsObject Ammus, PhysicsObject Maa)
781    {
782        Ammus.Destroy();
783        Maa.Destroy();
784        LuoRajahdys(Maa.Position, RajahdysKuva1, TankkiHuti);
785    }
786
787    //void Osuuveteen(PhysicsObject Ammus, PhysicsObject Ammus2);
788    //    Ammus.Destroy();
789
790    void Osuuammukseen(PhysicsObject Ammus, PhysicsObject Ammus2)
791    {
792        Ammus.Destroy();
793        Ammus2.Destroy();
794        LuoRajahdys(Ammus.Position, RajahdysKuva3, TankkiOsuma);
795    }
796
797    void Osuukallioon(PhysicsObject Ammus, PhysicsObject Kallio)
798    {
799        Ammus.Destroy();
800        LuoRajahdys(Ammus.Position, RajahdysKuva2, TankkiOsuma);
801    }
802
803    void Osuulaavaan(PhysicsObject Ammus, PhysicsObject laava)
804    {
805        Ammus.Destroy();
806        LuoRajahdys(Ammus.Position, RajahdysKuva4, TankkiHuti);
807    }
808
809    void LuoRajahdys(Vector RajahdysPaikka, Image RajahdysKuva, SoundEffect RajahdysAani)
810    {
811        Explosion Rajahdys = new Explosion(100);
812        Rajahdys.Position = RajahdysPaikka;
813        Rajahdys.Image = RajahdysKuva;
814        Rajahdys.Sound = RajahdysAani;
815        Rajahdys.Speed = 500.0;
816        Rajahdys.MaxRadius = 90;
817        Rajahdys.UseShockWave = false;
818        Add(Rajahdys);
819    }
820
821    void VaihdaP1()
822    {
823        P1ammus++;
824        if (P1ammus >= LuoAmmus.Length) P1ammus = 0;
825        VaihdaP1Asekuva();
826    }
827
828    void VaihdaP1Asekuva()
829    {
830        Image kuva = asekuvat[P1ammus];
831        P1ammusruutu.Image = kuva;
832        P1ammusruutu.Width = kuva.Width;
833        P1ammusruutu.Height = kuva.Height;
834    }
835
836    void VaihdaP2()
837    {
838        P2ammus++;
839        if (P2ammus >= LuoAmmus.Length) P2ammus = 0;
840        VaihdaP2Asekuva();
841    }
842
843    void VaihdaP2Asekuva()
844    {
845        Image kuva = asekuvat[P2ammus];
846        P2ammusruutu.Image = kuva;
847        P2ammusruutu.Width = kuva.Width;
848        P2ammusruutu.Height = kuva.Height;
849    }
850
851    Ammus LuoPerusAmmus()
852    {
853        Ammus ammus = new Ammus(8, 8);
854        ammus.tuhovoima = 1;
855        ammus.aika = 15;
856        ammus.Image = Kuula1;
857        return ammus;
858    }
859
860    Ammus LuoKakkosAmmus()
861    {
862        Ammus ammus = new Ammus(12, 12);
863        ammus.tuhovoima = 4;
864        ammus.aika = 30;
865        ammus.Image = Kuula2;
866        ammus.Mass = 1.3;
867        return ammus;
868    }
869
870    Ammus LuoKolmosAmmus()
871    {
872        Ammus ammus = new Ammus(18, 18);
873        ammus.Image = Kuula3;
874        ammus.tuhovoima = 8;
875        ammus.aika = 45;
876        ammus.Mass = 1.7;
877        return ammus;
878    }
879
880    Ammus LuoNelosAmmus()
881    {
882        Ammus ammus = new Ammus(22, 22);
883        ammus.Image = Kuula4;
884        ammus.tuhovoima = 12;
885        ammus.aika = 60;
886        ammus.Mass = 3;
887        return ammus;
888    }
889}
Note: See TracBrowser for help on using the repository browser.