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

Revision 3678, 15.6 KB checked in by nivikinn, 9 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 IntMeter hp = new IntMeter(10, 0, 10);
13    public Tankki(double leveys, double korkeus)
14        : base(leveys, korkeus)
15    {
16    }
17}
18
19public class Ammus : PhysicsObject
20{
21    public int tuhovoima = 1;
22    public Ammus(double leveys, double korkeus)
23        : base(leveys, korkeus)
24    {
25    }
26}
27
28public class EpicTankBattle : PhysicsGame
29{
30    delegate Ammus AmmuksenLuoja();
31
32
33    Image Keltainentankki = LoadImage("Keltainentankki");
34    Image Sininentankki = LoadImage("Sininentankki");
35    Image Vihreatankki = LoadImage("Vihreatankki");
36    Image Punainentankki = LoadImage("Punainentankki");
37    Image Valkoinentankki = LoadImage("Valkoinentankki");
38    Image Mustatankki = LoadImage("Mustatankki");
39    Image Tykki = LoadImage("Tykki");
40    Image Rajahdys = LoadImage("Rajahdys");
41    Image Kuula1 = LoadImage("Kuula1");
42    Image Kuula2 = LoadImage("Kuula2");
43    Image Kuula3 = LoadImage("Kuula3");
44    Image Kuula4 = LoadImage("Kuula4");
45    Image HP = LoadImage("HP");
46    Image HPtausta = LoadImage("HPtausta");
47
48
49
50    Tankki P1;
51    Tankki P2;
52    Cannon P1tykki;
53    Cannon P2tykki;
54    Direction tankki1suunta = Direction.Right;
55    Direction tankki2suunta = Direction.Left;
56
57    AmmuksenLuoja[] LuoAmmus;
58    int P1ammus = 0;
59    int P2ammus = 0;
60
61    ExplosionSystem rajahdys =
62    new ExplosionSystem(LoadImage("Rajahdys"), 1000);
63
64    public override void Begin()
65    {
66        MediaPlayer.Play("Musiikki");
67        MediaPlayer.IsRepeating = true;
68
69        AlustaAmmukset();
70        rajahdys.MaxScale = 0.01;
71        rajahdys.MaxLifetime = 0.001;
72        Add(rajahdys);
73
74        Level.Background.CreateGradient(Color.Silver, Color.Brown);
75        MultiSelectWindow alkuValikko = new MultiSelectWindow("EpicTankBattle",
76        "Aloita peli", "Lopeta");
77        Add(alkuValikko);
78        alkuValikko.ItemSelected += PainettiinValikonNappia;
79
80        Gravity = new Vector(0, -2000);
81
82        ColorTileMap Ruudut = ColorTileMap.FromLevelAsset("Maapera");
83        Ruudut.SetTileMethod(Color.Black, LuoNelio);
84        Ruudut.Execute(20, 10);
85
86        PhysicsObject ylaReuna = Level.CreateTopBorder();
87        ylaReuna.Color = Color.Brown;
88        PhysicsObject alaReuna = Level.CreateBottomBorder();
89        alaReuna.Color = Color.Brown;
90        PhysicsObject vasenReuna = Level.CreateLeftBorder();
91        vasenReuna.Color = Color.Silver;
92        PhysicsObject oikeaReuna = Level.CreateRightBorder();
93        oikeaReuna.Color = Color.Silver;
94
95       
96        Camera.StayInLevel = false;
97        Camera.ZoomToLevel();
98
99        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
100        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
101
102        P1 = new Tankki(40, 25);
103        P1.Tag = "tankki";
104        P1.hp.MaxValue = 50;
105        P1.hp.Value = 50;
106       // P1.Image = Punainentankki;
107        P1.Color = Color.Transparent;
108        P1.PlatformTolerance = 1;
109        P1.Acceleration = 0.6;
110        P1.MaxVelocity = 3;
111        P1.KineticFriction = 0;
112       
113
114        ProgressBar p1hpPalkki = new ProgressBar(150, 10);
115        p1hpPalkki.BindTo(P1.hp);
116        p1hpPalkki.BarColor = Color.Green;
117        p1hpPalkki.BorderColor = Color.White;
118        p1hpPalkki.Color = Color.Red;
119        p1hpPalkki.X = Screen.Left + 150;
120        p1hpPalkki.Y = Screen.Top - 70;
121        Add(p1hpPalkki);
122
123        P1tykki = new Cannon(60, 7);
124        P1tykki.Tag = "tykki";
125       // P1tykki.Image = LoadImage("tykki");
126        P1tykki.Color = Color.Transparent;
127        P1tykki.Angle = Angle.StraightAngle;
128        P1.Add(P1tykki);
129
130       
131
132        P2 = new Tankki(40, 25);
133        P2.Tag = "tankki";
134        P2.hp.MaxValue = 50;
135        P2.hp.Value = 50;
136       // P2.Image = Vihreatankki;
137        P2.Color = Color.Transparent;
138        P2.PlatformTolerance = 1;
139        P2.FacingDirection = Direction.Left;
140        Add(P2);
141       
142
143        ProgressBar p2hpPalkki = new ProgressBar(150, 10);
144        p2hpPalkki.BindTo(P2.hp);
145        p2hpPalkki.Angle += Angle.FromDegrees(180);
146        p2hpPalkki.BarColor = Color.Green;
147        p2hpPalkki.BorderColor = Color.White;
148        p2hpPalkki.Color = Color.Red;
149        p2hpPalkki.X = Screen.Right - 150;
150        p2hpPalkki.Y = Screen.Top - 70;
151        Add(p2hpPalkki);
152
153        P1.hp.LowerLimit += delegate
154        {
155            P1.Destroy();
156            p1hpPalkki.Destroy();
157            p2hpPalkki.Destroy();
158            MessageDisplay.Add("Pelaaja1 kuoli");
159            Timer.SingleShot(5.0, delegate
160            {
161                ClearAll();
162                Begin();
163            });
164        };
165        Add(P1);
166        P2.hp.LowerLimit += delegate
167        {
168            P2.Destroy();
169            p1hpPalkki.Destroy();
170            p2hpPalkki.Destroy();
171            MessageDisplay.Add("Pelaaja2 kuoli");
172            Timer.SingleShot(5.0, delegate
173            {
174                ClearAll();
175                Begin();
176            });
177        };
178        Add(P1);
179
180        P1.X = -700;
181        P1.Y = 10;
182        P2.X = 700;
183        P2.Y = 10;
184
185        P2tykki = new Cannon(60, 7);
186        P2tykki.Tag = "tykki";
187       // P2tykki.Image = LoadImage("tykki");
188        P1tykki.Color = Color.Transparent;
189        P2.Add(P2tykki);
190
191        Nappaimisto();
192    }
193
194    private void AlustaAmmukset()
195    {
196        LuoAmmus = new AmmuksenLuoja[4];
197        LuoAmmus[0] = LuoPerusAmmus;
198        LuoAmmus[1] = LuoKakkosAmmus;
199        LuoAmmus[2] = LuoKolmosAmmus;
200        LuoAmmus[3] = LuoNelosAmmus;
201    }
202
203    void LuoNelio(Vector paikka, double leveys, double korkeus)
204    {
205        PhysicsObject nelio = PhysicsObject.CreateStaticObject(leveys, korkeus);
206        nelio.Position = paikka;
207        nelio.Color = Color.Brown;
208        nelio.CollisionIgnoreGroup = 1;
209        nelio.KineticFriction = 0;
210        nelio.Tag = "nelio";
211        Add(nelio);
212    }
213
214    void LiikutaP1(PlatformCharacter2 P1, Vector liike)
215    {
216
217        // LiikutaP1.Velocity = LiikutaP1.Velocity + Liike;
218
219    }
220
221    void Nappaimisto()
222    {
223        Vector vasemmalle = new Vector(-1400, 1400);
224        Vector oikealle = new Vector(1400, 1400);
225
226        Keyboard.Listen(Key.A, ButtonState.Down, Liikuta, null, P1, vasemmalle);
227        Keyboard.Listen(Key.D, ButtonState.Down, Liikuta, null, P1, oikealle);
228
229        Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, null, P2, vasemmalle);
230        Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, null, P2, oikealle);
231
232        Keyboard.Listen(Key.LeftControl, ButtonState.Down, Ammu, null, P1);
233        Keyboard.Listen(Key.RightControl, ButtonState.Down, Ammu, null, P2);
234
235        Keyboard.Listen(Key.W, ButtonState.Down, KaannaTykki1, null, P1tykki, 2);
236        Keyboard.Listen(Key.S, ButtonState.Down, KaannaTykki1, null, P1tykki, -2);
237
238        Keyboard.Listen(Key.Down, ButtonState.Down, KaannaTykki2, null, P2tykki, 2);
239        Keyboard.Listen(Key.Up, ButtonState.Down, KaannaTykki2, null, P2tykki, -2);
240
241        Keyboard.Listen(Key.LeftControl, ButtonState.Pressed, Ammu, null, P1, P1tykki);
242        Keyboard.Listen(Key.RightControl, ButtonState.Pressed, Ammu, null, P2, P2tykki);
243
244        Keyboard.Listen(Key.LeftShift, ButtonState.Pressed, VaihdaP1, null);
245        Keyboard.Listen(Key.RightShift, ButtonState.Pressed, VaihdaP2, null);
246
247    }
248
249    void Liikuta(Tankki tankki, Vector liike)
250    {
251        if (Keyboard.GetKeyState(Key.Left) == ButtonState.Down && Keyboard.GetKeyState(Key.Right) == ButtonState.Down)
252            return;
253
254        if (Keyboard.GetKeyState(Key.A) == ButtonState.Down && Keyboard.GetKeyState(Key.D) == ButtonState.Down)
255            return;
256
257        if (liike.X < 0)
258        {
259            if (tankki == P1 && tankki1suunta == Direction.Right)
260            {
261                tankki1suunta = Direction.Left;
262                Vector v = Vector.FromAngle(P1tykki.Angle);
263                P1tykki.Angle = new Vector(-v.X, v.Y).Angle;
264            }
265            if (tankki == P2 && tankki2suunta == Direction.Right)
266            {
267                tankki2suunta = Direction.Left;
268                Vector v = Vector.FromAngle(P2tykki.Angle);
269                P2tykki.Angle = new Vector(-v.X, v.Y).Angle;
270            }
271
272        }
273
274        else if (liike.X > 0)
275        {
276            if (tankki == P1 && tankki1suunta == Direction.Left)
277            {
278                tankki1suunta = Direction.Right;
279                Vector v = Vector.FromAngle(P1tykki.Angle);
280                P1tykki.Angle = new Vector(-v.X, v.Y).Angle;
281            }
282            if (tankki == P2 && tankki2suunta == Direction.Left)
283            {
284                tankki2suunta = Direction.Right;
285                Vector v = Vector.FromAngle(P2tykki.Angle);
286                P2tykki.Angle = new Vector(-v.X, v.Y).Angle;
287            }
288        }
289
290        // Tankki.Walk(Direction.Left);
291        tankki.Push(liike);
292    }
293
294    void Ammu(PlatformCharacter2 Tankki)
295    {
296        //    Tankki.Shoot(1000000);
297    }
298
299    void KaannaTykki1(Cannon tykki, int suunta)
300    {
301        double tykinkulma = tykki.Angle.Degrees;
302        double uusikulma;
303
304        if (tankki1suunta == Direction.Right)
305            uusikulma = tykinkulma + suunta;
306        else
307            uusikulma = tykinkulma - suunta;
308
309        if ((tankki1suunta == Direction.Right && uusikulma <= -90 && uusikulma >= -180) ||
310            (tankki1suunta == Direction.Left && uusikulma <= 0 && uusikulma >= -90))
311        {
312            tykki.Angle = Angle.FromDegrees(uusikulma);
313        }
314    }
315
316    void KaannaTykki2(Cannon tykki, int suunta)
317    {
318        double tykinkulma = tykki.Angle.Degrees;
319        double uusikulma;
320
321        if (tankki2suunta == Direction.Right)
322            uusikulma = tykinkulma - suunta;
323        else
324            uusikulma = tykinkulma + suunta;
325
326        if ((tankki2suunta == Direction.Right && uusikulma <= -90 && uusikulma >= -180) ||
327            (tankki2suunta == Direction.Left && uusikulma <= 0 && uusikulma >= -90))
328        {
329            tykki.Angle = Angle.FromDegrees(uusikulma);
330        }
331    }
332
333    void Ammu(PhysicsObject pelaaja, Cannon tykki)
334    {
335        PhysicsObject ammus;
336
337        if (pelaaja == P1)
338        {
339            ammus = LuoAmmus[P1ammus]();
340        }
341        else
342        {
343            ammus = LuoAmmus[P2ammus]();
344        }
345
346        ammus.Position = pelaaja.Position - Vector.FromLengthAndAngle(tykki.Width / 2, tykki.Angle);
347        //ammus.LifetimeLeft = TimeSpan.FromMilliseconds(500);
348        Add(ammus);
349
350        ammus.Hit(-2000 * Vector.FromAngle(tykki.Angle));
351        AddCollisionHandler(ammus, "nelio", Osuumaahan);
352        AddCollisionHandler(ammus, "", CollisionHandler.DestroyObject); // seiniä varten
353        AddCollisionHandler<PhysicsObject, Tankki>(ammus, "tankki", OsuuPelaajaan);
354    }
355
356    void Osuumaahan(PhysicsObject Ammus, PhysicsObject Maa)
357    {
358        Ammus.Destroy();
359        Maa.Destroy();
360        rajahdys.AddEffect(Maa.Position, 20);
361    }
362
363    void VaihdaP1()
364    {
365        P1ammus++;
366        if (P1ammus >= LuoAmmus.Length) P1ammus = 0;
367    }
368
369    void VaihdaP2()
370    {
371        P2ammus++;
372        if (P2ammus >= LuoAmmus.Length) P2ammus = 0;
373    }
374
375    Ammus LuoPerusAmmus()
376    {
377        Ammus ammus = new Ammus(10, 10);
378        ammus.tuhovoima = 2;
379        ammus.Image = Kuula1;
380        return ammus;
381    }
382
383    Ammus LuoKakkosAmmus()
384    {
385        Ammus ammus = new Ammus(15, 15);
386        ammus.tuhovoima = 4;
387        ammus.Image = Kuula2;
388        ammus.Mass = 1.3;
389        return ammus;
390    }
391
392    Ammus LuoKolmosAmmus()
393    {
394        Ammus ammus = new Ammus(20, 20);
395        ammus.Image = Kuula3;
396        ammus.tuhovoima = 8;
397        ammus.Mass = 1.7;
398        return ammus;
399    }
400
401    Ammus LuoNelosAmmus()
402    {
403        Ammus ammus = new Ammus(20, 35);
404        ammus.Image = Kuula4;
405        ammus.tuhovoima = 12;
406        ammus.Mass = 3;
407        return ammus;
408    }
409
410    void OsuuPelaajaan(PhysicsObject ammus, Tankki pelaaja)
411    {
412        pelaaja.hp.Value--;
413    }
414
415    void AlustaRajahdys()
416    {
417        //rajahdyssysteemi = new ExplosionSystem(Rajahdys, 5000);
418        //rajahdyssysteemi.MinScale = 1;
419        //rajahdyssysteemi.MaxScale = 5;
420        //Add(rajahdyssysteemi);
421    }
422    void PainettiinValikonNappia(int valinta)
423    {
424        switch (valinta)
425        {
426            case 0:
427                Tankki1VariValikko();
428                break;
429            case 1:
430                Exit();
431                break;
432        }
433
434
435
436    }
437    void Tankki1VariValikko()
438    {
439        MultiSelectWindow P1VariValikko = new MultiSelectWindow("Valitse Pelaaja 1 väri",
440        "Punainen", "Vihreä", "Sininen", "Keltainen", "Valkoinen", "Musta");
441        Add(P1VariValikko);
442        P1VariValikko.ItemSelected += PainettiinP1VariValikonNappia;
443    }
444    void PainettiinP1VariValikonNappia(int valinta2)
445    {
446        switch (valinta2)
447        {
448            case 0:
449                P1.Image = LoadImage("Punainentankki");
450                P1tykki.Image = LoadImage("Tykki");
451                Tankki2VariValikko();
452
453                break;
454            case 1:
455                P1.Image = LoadImage("Vihreatankki");
456                P1tykki.Image = LoadImage("Tykki");
457                Tankki2VariValikko();
458                break;
459            case 2:
460                P1.Image = LoadImage("Sininentankki");
461                P1tykki.Image = LoadImage("Tykki");
462                Tankki2VariValikko();
463                break;
464            case 3:
465                P1.Image = LoadImage("Keltainentankki");
466                P1tykki.Image = LoadImage("Tykki");
467                Tankki2VariValikko();
468                break;
469            case 4:
470                P1.Image = LoadImage("Valkoinentankki");
471                P1tykki.Image = LoadImage("Tykki");
472                Tankki2VariValikko();
473                break;
474            case 5:
475                P1.Image = LoadImage("Mustatankki");
476                P1tykki.Image = LoadImage("Tykki");
477                Tankki2VariValikko();
478                break;
479        }
480
481    }
482
483    void Tankki2VariValikko()
484    {
485        MultiSelectWindow P2VariValikko = new MultiSelectWindow("Valitse Pelaaja 2 väri",
486        "Punainen", "Vihreä", "Sininen", "Keltainen", "Valkoinen", "Musta");
487        Add(P2VariValikko);
488        P2VariValikko.ItemSelected += PainettiinP2VariValikonNappia;
489    }
490    void PainettiinP2VariValikonNappia(int valinta3)
491    {
492        switch (valinta3)
493        {
494            case 0:
495                P2.Image = LoadImage("Punainentankki");
496                P1tykki.Image = LoadImage("Tykki");
497                break;
498            case 1:
499                P2.Image = LoadImage("Vihreatankki");
500                P2tykki.Image = LoadImage("Tykki");
501                break;
502            case 2:
503                P2.Image = LoadImage("Sininentankki");
504                P2tykki.Image = LoadImage("Tykki");
505                break;
506            case 3:
507                P2.Image = LoadImage("Keltainentankki");
508                P2tykki.Image = LoadImage("Tykki");
509                break;
510            case 4:
511                P2.Image = LoadImage("Valkoinentankki");
512                P2tykki.Image = LoadImage("Tykki");
513                break;
514            case 5:
515                P2.Image = LoadImage("Mustatankki");
516                P2tykki.Image = LoadImage("Tykki");
517                break;
518        }
519
520    }
521}
522
523
Note: See TracBrowser for help on using the repository browser.