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

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