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

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