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

Revision 3944, 26.1 KB checked in by jotapoti, 7 years ago (diff)

Lähes valmis versio.

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