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

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