source: 2015/koodauskerho/OttoR/BattleArena/BattleArena/BattleArena/BattleArena.cs @ 7167

Revision 7167, 17.8 KB checked in by empaheik, 5 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 BattleArena : PhysicsGame
10{
11    const double nopeus = 200;
12    const double hyppyNopeus = 750;
13    const int RUUDUN_KOKO = 40;
14
15    PlatformCharacter pelaaja1;
16
17    int pelaaja1hahmo = 0;
18
19    int vahinko = 0;
20
21
22    private Image[] Flight = LoadImages("monsters/consumer", "monsters/consumer2", "monsters/consumer3");
23
24
25    DoubleMeter elamaLaskuri;
26
27   
28    Image ShadowKuva = LoadImage("monsters/shadow");
29    Image DirtKuva = LoadImage("blocks/dirt");
30    Image TaintedGrassKuva = LoadImage("blocks/taintedgrass");
31    Image BassoKuva = LoadImage("blocks/Basso");
32    Image FreakKuva = LoadImage("blocks/Freak");
33    Image pelaajanKuva = LoadImage("characters/bad/paha");
34    Image pelaajanAseenKuva = LoadImage("characters/normi/rifle");
35    Image tahtiKuva = LoadImage("tahti");
36    Image tasoKuva = LoadImage("tasoKuva");
37    Image FireFlowerKuva = LoadImage("blocks/fireFlower");
38    Image GrassKuva = LoadImage("blocks/grass");
39    Image tahti1Kuva = LoadImage("blocks/boomBox");
40    Image ConsumerKuva = LoadImage("monsters/consumer");
41    Image FuelKuva = LoadImage("blocks/fuel1");
42   
43    class monster : PlatformCharacter
44    {
45        private IntMeter elamaLaskuri = new IntMeter(28, 0, 28);
46        public IntMeter ElamaLaskuri { get { return elamaLaskuri; } }
47
48        public monster(double leveys, double korkeus)
49            : base(leveys, korkeus)
50        {
51            elamaLaskuri.LowerLimit += delegate { this.Destroy(); };
52        }
53    }
54    class monster1 : PlatformCharacter
55    {
56        private IntMeter elamaLaskuri = new IntMeter(4, 0, 4);
57        public IntMeter ElamaLaskuri { get { return elamaLaskuri; } }
58
59        public monster1(double leveys, double korkeus)
60            : base(leveys, korkeus)
61        {
62            elamaLaskuri.LowerLimit += delegate { this.Destroy(); };
63        }
64    }
65    public override void Begin()
66    {
67        Gravity = new Vector(0, -1000);
68
69       
70       
71        LuoAlkuvalikko();
72
73        SmoothTextures = false;
74    }
75
76   
77    void LuoAlkuvalikko()
78    {
79        MultiSelectWindow alkuValikko = new MultiSelectWindow("Pelin alkuvalikko",
80        "Aloita peli", "Lopeta");
81        Add(alkuValikko);
82        alkuValikko.AddItemHandler(0, ValikkoValitseHahmo);
83   
84       
85        alkuValikko.AddItemHandler(1, Exit);
86    }
87
88    void ValikkoValitseHahmo()
89    {
90        MultiSelectWindow hahmoValikko = new MultiSelectWindow("Hahmon valinta",
91        "normi", "bad", "boom", "kk", "hero", "klown", "fire", "neon");
92        Add(hahmoValikko);
93        hahmoValikko.AddItemHandler(0, delegate { ValitseHahmo("normi"); });
94        hahmoValikko.AddItemHandler(1, delegate { ValitseHahmo("bad"); });
95        hahmoValikko.AddItemHandler(2, delegate { ValitseHahmo("boom"); });
96        hahmoValikko.AddItemHandler(3, delegate { ValitseHahmo("kk"); });
97        hahmoValikko.AddItemHandler(4, delegate { ValitseHahmo("hero"); });
98        hahmoValikko.AddItemHandler(5, delegate { ValitseHahmo("klown"); });
99        hahmoValikko.AddItemHandler(6, delegate { ValitseHahmo("fire"); });
100        hahmoValikko.AddItemHandler(7, delegate { ValitseHahmo("neon"); });
101       
102    }
103
104    void ValitseHahmo(String hahmonNimi)
105    {
106        switch (hahmonNimi)
107        {
108            case "bad":
109                pelaaja1hahmo = 1;
110                break;
111            case "boom":
112                pelaaja1hahmo = 2;
113                break;
114            case "kk":
115                pelaaja1hahmo = 3;
116                break;
117            case "hero":
118                pelaaja1hahmo = 4;
119                break;
120            case "klown":
121                pelaaja1hahmo = 5;
122                break;
123            case "fire":
124                pelaaja1hahmo = 6;
125                break;
126            case "neon":
127                pelaaja1hahmo = 7;
128                break;
129            default:
130                pelaaja1hahmo = 0;
131                break;
132        }
133
134        pelaajanKuva = LoadImage("characters/" + hahmonNimi + "/hahmo");
135
136        LuoKentta();
137
138    }
139
140    void LuoKentta()
141    {
142        TileMap kentta = TileMap.FromLevelAsset("kentta1");
143        kentta.SetTileMethod('#', LisaaTaso);
144        kentta.SetTileMethod('D', LisaaDirt);
145        kentta.SetTileMethod('*', LisaaTahti);
146        kentta.SetTileMethod('N', LisaaPelaaja);
147        kentta.SetTileMethod('F', LisaaFireFlower);
148        kentta.SetTileMethod('f', LisaaFreak);
149        kentta.SetTileMethod('G', LisaaGrass);
150        kentta.SetTileMethod('B', LisaaboomBox);
151        kentta.SetTileMethod('X', LisaaBasso);
152        kentta.SetTileMethod('T', LisaaTaintedGrass);
153        kentta.SetTileMethod('S', LisaaShadow);
154        kentta.SetTileMethod('C', LisaaConsumer);
155        kentta.SetTileMethod('d', LisaaFuel);
156
157        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
158        Level.CreateBorders();
159        Level.Background.CreateGradient(Color.White, Color.SkyBlue);
160
161        Timer ajastin = new Timer();
162        ajastin.Interval = 1.5;
163        //ajastin.Timeout += UusiaShadoweja;
164        ajastin.Start();
165
166
167        LisaaNappaimet();
168        LuoElamaLaskuri();
169
170        Camera.Follow(pelaaja1);
171        Camera.ZoomFactor = 1.2;
172        Camera.StayInLevel = true;
173    }
174
175    void LisaaTaso(Vector paikka, double leveys, double korkeus)
176    {
177        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
178        taso.Position = paikka;
179        taso.Color = Color.Green;
180        taso.Image = tasoKuva;
181        Add(taso);
182    }
183    void LisaaFireFlower(Vector paikka, double leveys, double korkeus)
184    {
185        PhysicsObject fireFlower = PhysicsObject.CreateStaticObject(leveys, korkeus);
186        fireFlower.Position = paikka;
187        fireFlower.Image = FireFlowerKuva;
188        fireFlower.IgnoresCollisionResponse = true;
189        Add(fireFlower, 2);
190    }
191    void LisaaGrass(Vector paikka, double leveys, double korkeus)
192    {
193        PhysicsObject Grass = PhysicsObject.CreateStaticObject(leveys, korkeus);
194        Grass.Position = paikka;
195        Grass.Image = GrassKuva;
196        Add(Grass);
197    }
198    void LisaaDirt(Vector paikka, double leveys, double korkeus)
199    {
200        PhysicsObject Dirt = PhysicsObject.CreateStaticObject(leveys, korkeus);
201        Dirt.Position = paikka;
202        Dirt.Image = DirtKuva;
203        Add(Dirt);
204    }
205    void LisaaTaintedGrass(Vector paikka, double leveys, double korkeus)
206    {
207        PhysicsObject TaintedGrass = PhysicsObject.CreateStaticObject(leveys, korkeus);
208        TaintedGrass.Position = paikka;
209        TaintedGrass.Image = TaintedGrassKuva;
210        Add(TaintedGrass);
211    }
212    void LisaaFuel(Vector paikka, double leveys, double korkeus)
213    {
214        PhysicsObject Fuel = PhysicsObject.CreateStaticObject(leveys, korkeus);
215        Fuel.Position = paikka;
216        Fuel.Image = FuelKuva;
217        Add(Fuel);
218    }
219    void LisaaTahti(Vector paikka, double leveys, double korkeus)
220    {
221        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys, korkeus);
222        tahti.IgnoresCollisionResponse = true;
223        tahti.Position = paikka;
224        tahti.Image = tahtiKuva;
225        tahti.Tag = "tahti";
226        Add(tahti);
227    }
228    void LisaaboomBox(Vector paikka, double leveys, double korkeus)
229    {
230        PhysicsObject boomBox = PhysicsObject.CreateStaticObject(leveys, korkeus);
231        boomBox.IgnoresCollisionResponse = true;
232        boomBox.Position = paikka;
233        boomBox.Image = tahti1Kuva;
234        boomBox.Tag = "boomBox";
235        Add(boomBox);
236    }
237    void LisaaFreak(Vector paikka, double leveys, double korkeus)
238    {
239        PhysicsObject Freak = PhysicsObject.CreateStaticObject(leveys, korkeus);
240        Freak.IgnoresCollisionResponse = true;
241        Freak.Position = paikka;
242        Freak.Image = FreakKuva;
243        Freak.Tag = "Freak";
244        Add(Freak);
245    }
246    void LisaaBasso(Vector paikka, double leveys, double korkeus)
247    {
248        PhysicsObject Basso = PhysicsObject.CreateStaticObject(leveys, korkeus);
249        Basso.IgnoresCollisionResponse = true;
250        Basso.Position = paikka;
251        Basso.Image = BassoKuva;
252        Basso.Tag = "Basso";
253        Add(Basso);
254    }
255
256
257    void LisaaShadow(Vector paikka, double leveys, double korkeus)
258    {
259        UusiaShadoveja(paikka, new Vector(leveys, korkeus));
260
261        Timer ajastin = new Timer();
262        ajastin.Interval = RandomGen.NextDouble(3, 10);
263        ajastin.Start();
264        ajastin.Timeout += delegate
265        {
266            UusiaShadoveja(paikka, new Vector(leveys,korkeus));           
267        };
268
269
270    }
271    void UusiaShadoveja(Vector paikka, Vector koko)
272    {
273        monster Shadow = new monster(koko.X,koko.Y);
274        Shadow.Image = ShadowKuva;
275        Shadow.Position = paikka;
276        Shadow.Mass = 3.5;
277        Shadow.Tag = "Shadow";
278        Shadow.CanMoveOnAir = true;
279
280        PlatformWandererBrain tasoAivot = new PlatformWandererBrain();
281        tasoAivot.Speed = 150;
282        tasoAivot.JumpSpeed = 620;
283        tasoAivot.TriesToJump = true;
284        tasoAivot.FallsOffPlatforms = true;
285
286        //AddCollisionHandler(Shadow, )
287        Shadow.Brain = tasoAivot;
288        Add(Shadow);
289    }
290    void LisaaConsumer(Vector paikka, double leveys, double korkeus)
291    {
292        PhysicsObject Consumer = new  PhysicsObject(leveys, korkeus);
293        Consumer.Image = ConsumerKuva;
294        Consumer.Position = paikka;
295        Consumer.Mass = 1.0;
296        Consumer.Tag = "monster1";
297        AddCollisionHandler(Consumer, "ammus", delegate(PhysicsObject a, PhysicsObject b) { Consumer.Destroy(); });
298        Consumer.IgnoresPhysicsLogics = true;
299        Consumer.IgnoresCollisionResponse = true;
300        FollowerBrain seuraajanaivot= new FollowerBrain(pelaaja1);
301        seuraajanaivot.Speed = 150;
302        Consumer.Brain = seuraajanaivot;
303        Consumer.Animation = new Animation(Flight);
304        Consumer.Animation.Start();
305        Add(Consumer);
306
307       
308    }
309    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
310    {
311        pelaaja1 = new PlatformCharacter(leveys, korkeus);
312        pelaaja1.Position = paikka;
313        pelaaja1.Mass = 4.0;
314       
315        pelaaja1.Image = pelaajanKuva;
316       
317
318        switch (pelaaja1hahmo)
319        {
320            case 1:
321                pelaajanAseenKuva = LoadImage("characters/bad/AK");
322                pelaaja1.Weapon = new AssaultRifle(50, 10);
323                pelaaja1.Weapon.FireRate = 6.0;
324                pelaaja1.Weapon.Power.Value = 340;
325                pelaaja1.Weapon.Power.DefaultValue = 340;
326                pelaaja1.Weapon.Image = pelaajanAseenKuva;
327                vahinko = 6;
328                break;
329            case 2:
330                pelaajanAseenKuva = LoadImage("characters/boom/kranaatinheitin");
331                pelaaja1.Weapon = new AssaultRifle(50, 10);
332                pelaaja1.Weapon.FireRate = 0.5;
333                pelaaja1.Weapon.Power.Value = 230;
334                pelaaja1.Weapon.Power.DefaultValue = 230;
335                pelaaja1.Weapon.Image = pelaajanAseenKuva;
336               
337                break;
338            case 3:
339                pelaajanAseenKuva = LoadImage("characters/kk/heavy");
340                pelaaja1.Weapon = new AssaultRifle(50, 10);
341                pelaaja1.Weapon.FireRate = 15.0;
342                pelaaja1.Weapon.Power.Value = 300;
343                pelaaja1.Weapon.Power.DefaultValue = 300;
344                pelaaja1.Weapon.Image = pelaajanAseenKuva;
345                vahinko = 2;
346                break;
347            case 4:
348                pelaajanAseenKuva = LoadImage("characters/hero/nice");
349                pelaaja1.Weapon = new AssaultRifle(50, 10);
350                pelaaja1.Weapon.FireRate = 4.0;
351                pelaaja1.Weapon.Power.Value = 250;
352                pelaaja1.Weapon.Power.DefaultValue = 250;
353                pelaaja1.Weapon.Image = pelaajanAseenKuva;
354                vahinko = 10;
355                break;
356            case 5:
357                pelaajanAseenKuva = LoadImage("characters/klown/sniper");
358                pelaaja1.Weapon = new AssaultRifle(50, 10);
359                pelaaja1.Weapon.FireRate = 0.5;
360                pelaaja1.Weapon.Power.Value = 500;
361                pelaaja1.Weapon.Power.DefaultValue = 500;
362                pelaaja1.Weapon.Image = pelaajanAseenKuva;
363                vahinko = 65;
364                break;
365            case 6:
366                pelaajanAseenKuva = LoadImage("characters/fire/flamer");
367                pelaaja1.Weapon = new AssaultRifle(50, 10);
368                pelaaja1.Weapon.FireRate = 3.0;
369                pelaaja1.Weapon.Power.Value = 500;
370                pelaaja1.Weapon.Power.DefaultValue = 500;
371                pelaaja1.Weapon.Image = pelaajanAseenKuva;
372                break;
373            case 7:
374                pelaajanAseenKuva = LoadImage("characters/neon/rainbow");
375                pelaaja1.Weapon = new AssaultRifle(50, 10);
376                pelaaja1.Weapon.FireRate = 10.0;
377                pelaaja1.Weapon.Power.Value = 400;
378                pelaaja1.Weapon.Power.DefaultValue = 400;
379                pelaaja1.Weapon.Image = pelaajanAseenKuva;
380                vahinko = 6;
381                break;
382            default:
383                pelaajanAseenKuva = LoadImage("characters/normi/rifle");
384                pelaaja1.Weapon = new AssaultRifle(50, 10);
385                pelaaja1.Weapon.FireRate = 3.0;
386                pelaaja1.Weapon.Power.Value = 300;
387                pelaaja1.Weapon.Power.DefaultValue = 300;
388                pelaaja1.Weapon.Image = pelaajanAseenKuva;
389                vahinko = 12;
390                break;
391        }
392
393        pelaaja1.Weapon.ProjectileCollision = AmmusOsui;
394       
395        Add(pelaaja1, 1);
396
397        AddCollisionHandler(pelaaja1, "tahti", TormaaTahteen);
398        AddCollisionHandler(pelaaja1, "boomBox", TormaaBoxiin);
399        AddCollisionHandler(pelaaja1, "Basso", TormaaBassoon);
400        AddCollisionHandler(pelaaja1, "Freak", TormaaFreakiin);
401        AddCollisionHandler(pelaaja1, "Shadow", TormaaShadowiin);
402    }
403
404    void LuoElamaLaskuri()
405    {
406        elamaLaskuri = new DoubleMeter(100);
407        elamaLaskuri.MaxValue = 100;
408        elamaLaskuri.LowerLimit += ElamaLoppui;
409       
410        ProgressBar elamaPalkki = new ProgressBar(150, 20);
411        elamaPalkki.X = Screen.Left + 550;
412        elamaPalkki.Y = Screen.Top - 20;
413        elamaPalkki.BindTo(elamaLaskuri);
414        Add(elamaPalkki);
415       
416        //Taustaväri:
417        elamaPalkki.Color = Color.Transparent;
418       
419        //Palkin väri:
420        elamaPalkki.BarColor = Color.Red;
421       
422        //Reunan väri:
423        elamaPalkki.BorderColor = Color.Black;
424    }
425    void ElamaLoppui()
426    {
427        MessageDisplay.Add("RIP");
428        pelaaja1.Destroy();
429    }
430
431    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
432    {
433        ammus.Destroy();
434
435        if (kohde is monster)
436        {
437            ((monster)kohde).ElamaLaskuri.Value-=vahinko;
438        }
439        if (kohde is monster1)
440        {
441            ((monster1)kohde).ElamaLaskuri.Value-=vahinko;
442        }
443
444    }
445    void LisaaNappaimet()
446    {
447        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
448        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
449
450        Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
451        Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, nopeus);
452        Keyboard.Listen(Key.Up, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
453        Keyboard.Listen(Key.Space, ButtonState.Down, Ammu, "Pelaaja ampuu");
454
455        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
456
457        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
458        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
459        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
460
461        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
462    }
463
464    void Ammu()
465    {
466
467        PhysicsObject ammus = pelaaja1.Weapon.Shoot();
468
469        if (ammus != null)
470        {
471            ammus.Size *= 0.3;
472            ammus.Width *= 2.0;
473            ammus.Image = LoadImage("ammusKuva");
474            ammus.Tag = "ammus";
475            ammus.MaximumLifetime = TimeSpan.FromSeconds(2.0);
476        }
477    }
478
479    void Liikuta(PlatformCharacter hahmo, double nopeus)
480    {
481        hahmo.Walk(nopeus);
482    }
483
484    void Hyppaa(PlatformCharacter hahmo, double nopeus)
485    {
486        hahmo.Jump(nopeus);
487    }
488
489    void TormaaTahteen(PhysicsObject hahmo, PhysicsObject tahti)
490    {
491        MediaPlayer.Stop();
492        MessageDisplay.Add("Gentlemen");
493        MediaPlayer.Play("music/taustamusiikki");   
494    }
495    void TormaaBoxiin(PhysicsObject hahmo, PhysicsObject boomBox)
496    {
497       //MediaPlayer.Stop();
498        MessageDisplay.Add("A Happy day");
499        MediaPlayer.Play("music/boombox");
500    }
501
502    void TormaaBassoon(PhysicsObject hahmo, PhysicsObject Basso)
503    {
504        //MediaPlayer.Stop();
505        MessageDisplay.Add("Warrior of the night");
506        MediaPlayer.Play("music/warrior");
507       
508    }
509    void TormaaFreakiin(PhysicsObject hahmo, PhysicsObject Freak)
510    {
511        //MediaPlayer.Stop();
512        MessageDisplay.Add("Freak It");
513        MediaPlayer.Play("music/freak it");
514
515    }
516
517    void TormaaShadowiin(PhysicsObject hahmo, PhysicsObject Shadow)
518    {
519        elamaLaskuri.Value -= 15;
520    }
521 
522}
Note: See TracBrowser for help on using the repository browser.