source: 2015/koodauskerho/AarniAR/GunDown/GunDown/GunDown/GunDown.cs @ 7417

Revision 7417, 15.3 KB checked in by aajualal, 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 GunDown : PhysicsGame
10{
11    const double nopeus = 200;
12    const double hyppyNopeus = 700;
13    const int RUUDUN_KOKO = 40;
14    DoubleMeter elamaLaskuri;
15    int kenttaNro = 1;
16
17    bool voiTehdaPommin = true;
18
19    PlatformCharacter pelaaja1;
20    PlasmaCannon pelaajan1Ase;
21    GameObject kursori;
22
23    Image pelaajanKuva = LoadImage("MainChar");
24    Image[] pelaajarunkuva = LoadImages("MainCharRun1", "MainCharRun2");
25    Image[] crabdemonmoveKuva = LoadImages("CrabDemon1", "CrabDemon2", "CrabDemon3");
26    Image crabKuva = LoadImage("CrabDemon1");
27    Image tahtiKuva = LoadImage("DiamondGem");
28    Image aseenkuvaOikea = LoadImage("Revolver");
29    Image aseenkuvaVasen = LoadImage("RevolverLft");
30    Image cursorinkuva = LoadImage("Cursor");
31    Image bulletKuva = LoadImage("RevBullet");
32    Image boxkuva = LoadImage("Box");
33    Image pelaajajumpKuva = LoadImage("MainCharJump");
34    Image bombKuva = LoadImage("Bomb");
35    Image crackstoneKuva = LoadImage("CrackedStone");
36    Image exitKuva = LoadImage("CaveExit");
37    Image stoneKuva = LoadImage("Stone");
38    Image topKuva = LoadImage("StoneTop");
39    Image chestKuva = LoadImage("ClosedChest");
40    Image chestopenKuva = LoadImage("OpenChest");
41    Image spikeKuva = LoadImage("Spikes");
42    Image fullhpKuva = LoadImage("HP100%");
43    Image nohpKuva = LoadImage("HP0%");
44    Image flamerKuva = LoadImage("Flamer");
45    Image flameshotKuva = LoadImage("Flame");
46    Image medkitKuva = LoadImage("MedKit");
47    Image slimekuva = LoadImage("SlimeNew");
48
49
50    SoundEffect maaliAani = LoadSoundEffect("maali");
51    SoundEffect GunShot = LoadSoundEffect("GunShto");
52    SoundEffect dedAani = LoadSoundEffect("ded");
53    SoundEffect deathAani = LoadSoundEffect("pacman_death");
54
55    public override void Begin()
56    {
57
58        MultiSelectWindow alkuValikko = new MultiSelectWindow("Gun Down: The Cave Adventure",
59"Aloita peli", "Lopeta");
60        Add(alkuValikko);
61        MediaPlayer.Play("title");
62        MediaPlayer.IsRepeating = true;
63
64        alkuValikko.AddItemHandler(0, SeuraavaKentta);
65        alkuValikko.AddItemHandler(1, Exit);
66        SmoothTextures = false;
67
68       
69       
70        MessageDisplay.Add("You have fallen down. Your story begins here!");
71
72       
73
74       
75    }
76
77    void LuoKentta()
78    {
79        TileMap kentta = TileMap.FromLevelAsset("kentta"+kenttaNro);
80        kentta.SetTileMethod('#', LisaaTaso);
81        kentta.SetTileMethod('*', LisaaTahti);
82        kentta.SetTileMethod('N', LisaaPelaaja);
83        kentta.SetTileMethod('E', LisaaExit);
84        kentta.SetTileMethod('S', LisaaCrackStone);
85        kentta.SetTileMethod('T', LisaaStonetop);
86        kentta.SetTileMethod('D', LisaaCrabDemon);
87        kentta.SetTileMethod('C', LisaaChest);
88        kentta.SetTileMethod('s', LisaaSpike);
89        kentta.SetTileMethod('F', LisaaFlamer);
90        kentta.SetTileMethod('M', LisaaMedKit);
91        kentta.SetTileMethod('G', LisaaSlime);
92
93        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
94        Level.CreateBorders();
95        Level.Background.Color = (Color.DarkGray);
96        LuoElamaLaskuri();
97
98        Gravity = new Vector(0, -1000);
99
100        kursori = new GameObject(20, 20);
101        kursori.Image = cursorinkuva;
102        Add(kursori);
103    }
104
105    void LisaaTaso(Vector paikka, double leveys, double korkeus)
106    {
107        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
108        taso.Position = paikka;
109        taso.Image = stoneKuva;
110        Add(taso);
111    }
112
113    void LisaaTahti(Vector paikka, double leveys, double korkeus)
114    {
115        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys*0.5, korkeus*0.5);
116        tahti.IgnoresCollisionResponse = true;
117        tahti.Position = paikka;
118        tahti.Image = tahtiKuva;
119        tahti.Tag = "tahti";
120        Add(tahti);
121    }
122
123    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
124    {
125        pelaaja1 = new PlatformCharacter(leveys * 0.5, korkeus);
126        pelaaja1.Position = paikka;
127        pelaaja1.Mass = 4.0;
128        pelaaja1.AnimIdle = pelaajanKuva;
129        pelaaja1.AnimWalk = new Animation(pelaajarunkuva);
130        pelaaja1.AnimWalk.FPS = 5;
131        pelaaja1.AnimJump = pelaajajumpKuva;
132
133        AddCollisionHandler(pelaaja1, "tahti", TormaaTahteen);
134        AddCollisionHandler(pelaaja1, "vihu", TormaaVihu);
135        AddCollisionHandler(pelaaja1, "Chest", TormaaChest);
136        AddCollisionHandler(pelaaja1, "spike", TormaaSpike);
137        AddCollisionHandler(pelaaja1, "StageExit", TormasiMaaliin);
138        AddCollisionHandler(pelaaja1, "MedKit", TormaaMedKit);
139        Add(pelaaja1);
140
141        pelaajan1Ase = new PlasmaCannon(18, 10);
142        pelaajan1Ase.InfiniteAmmo = true;
143        pelaajan1Ase.Image = aseenkuvaOikea;
144        pelaajan1Ase.FireRate = 4;
145        pelaajan1Ase.X = 3;
146        pelaajan1Ase.Y = -3;
147        pelaajan1Ase.ProjectileCollision = Ammusosuuvihuun;
148
149       
150
151        pelaaja1.Add(pelaajan1Ase);
152
153    }
154
155    void LisaaNappaimet()
156    {
157        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
158        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
159
160        Keyboard.Listen(Key.A, ButtonState.Down, Liikuta, "Move Left", pelaaja1, -nopeus);
161        Keyboard.Listen(Key.D, ButtonState.Down, Liikuta, "Move Right", pelaaja1, nopeus);
162        Keyboard.Listen(Key.Space, ButtonState.Pressed, Hyppaa, "Jump", pelaaja1, hyppyNopeus);
163        Keyboard.Listen(Key.E, ButtonState.Pressed, AsetaPommi, "Bomb", pelaaja1);
164        Mouse.ListenMovement(0.0, Tahtaa, "Aim");
165        Mouse.Listen(MouseButton.Left, ButtonState.Pressed, AmmuAseella, "Shoot", pelaajan1Ase);
166
167
168
169        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Exit the game");
170
171        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
172        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
173        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
174
175        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
176    }
177
178    void Liikuta(PlatformCharacter hahmo, double nopeus)
179    {
180        hahmo.Walk(nopeus);
181    }
182
183    void Hyppaa(PlatformCharacter hahmo, double nopeus)
184    {
185        hahmo.Jump(nopeus);
186    }
187
188    void TormaaTahteen(PhysicsObject hahmo, PhysicsObject tahti)
189    {
190        maaliAani.Play();
191       
192        tahti.Destroy();
193    }
194    void Tahtaa(AnalogState hiirenLiike)
195    {
196        Vector suunta = (Mouse.PositionOnWorld - pelaajan1Ase.AbsolutePosition).Normalize();
197        pelaajan1Ase.Angle = suunta.Angle;
198
199        kursori.Position = Mouse.PositionOnWorld;
200        if (kursori.X < pelaaja1.X)
201        {
202            pelaajan1Ase.Image = aseenkuvaVasen;
203        }
204        else
205        {
206            pelaajan1Ase.Image = aseenkuvaOikea;
207        }
208    }
209    void AmmuAseella(PlasmaCannon ase)
210    {
211        if (pelaaja1.IsDestroyed)
212            return;
213        GunShot.Play();
214
215        PhysicsObject ammus = ase.Shoot();
216        //TimeSpan aika = new TimeSpan(0, 0, 2);
217        //ammus.MaximumLifetime = aika;
218
219        //ammus. += Ammusosuuvihuun;
220
221        if (ammus != null)
222        {
223            ammus.Size *= 1;
224            ammus.Image = bulletKuva;
225            ammus.Tag = "Bullet";
226            ammus.MaximumLifetime = TimeSpan.FromSeconds(0.5);
227        }
228    }
229    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
230    {
231        ammus.Destroy();
232
233       
234           
235       
236    }
237    void LisaaCrackStone(Vector paikka, double leveys, double korkeus)
238    {
239        PhysicsObject cstone = PhysicsObject.CreateStaticObject(leveys, korkeus);
240        cstone.Position = paikka;
241        cstone.Image = crackstoneKuva;
242        cstone.Tag = "CrackStone";
243        Add(cstone);
244    }
245
246    void AsetaPommi(PlatformCharacter pelaaja1)
247    {
248        LisaaPommi();
249
250    }
251    void LisaaPommi()
252    {
253        if (voiTehdaPommin)
254        {
255            voiTehdaPommin = false;
256            PhysicsObject pommi = new PhysicsObject(20, 20);
257            pommi.Position = pelaaja1.Position;
258            pommi.Image = bombKuva;
259            Add(pommi);
260            Timer.SingleShot(1.0, delegate { rajahda(pommi); voiTehdaPommin = true; });
261        }
262    }
263    void rajahda(PhysicsObject pommi)
264    {
265        Explosion rajahdys = new Explosion(100);
266        rajahdys.Position = pommi.Position;
267        rajahdys.ShockwaveReachesObject += tuhoacrackseina;
268        Add(rajahdys);
269        pommi.Destroy();
270
271
272    }
273    void tuhoacrackseina(IPhysicsObject CrackStone, Vector suunta)
274    {
275
276        if ((string)CrackStone.Tag == "CrackStone")
277        {
278            CrackStone.Destroy();
279        }
280
281    }
282    void LisaaExit(Vector paikka, double leveys, double korkeus)
283    {
284        PhysicsObject exit = PhysicsObject.CreateStaticObject(leveys, korkeus);
285        exit.Position = paikka;
286        exit.Image = exitKuva;
287        exit.Tag = "StageExit";
288        Add(exit);
289    }
290    void LisaaStonetop(Vector paikka, double leveys, double korkeus)
291    {
292        PhysicsObject top = PhysicsObject.CreateStaticObject(leveys, korkeus);
293        top.Position = paikka;
294        top.Image = topKuva;
295        Add(top);
296    }
297    void LisaaCrabDemon(Vector paikka, double leveys, double korkeus)
298    {
299
300        Vihu crab = new Vihu(leveys, korkeus * 0.5);
301        crab.AnimWalk = new Animation(crabdemonmoveKuva);
302        crab.AnimWalk.FPS = 5;
303        crab.Mass = 4.0;
304        crab.Position = paikka;
305        crab.CollisionIgnoreGroup = 5;
306        crab.Tag = "vihu";
307        Add(crab);
308
309        PlatformWandererBrain tasoAivot = new PlatformWandererBrain();
310        tasoAivot.Speed = 200;
311
312        crab.Brain = tasoAivot;
313    }
314    class Vihu : PlatformCharacter
315    {
316        private IntMeter elamaLaskuri = new IntMeter(3, 0, 3);
317        public IntMeter ElamaLaskuri { get { return elamaLaskuri; } }
318
319        public Vihu(double leveys, double korkeus)
320            : base(leveys, korkeus)
321        {
322            elamaLaskuri.LowerLimit += delegate { this.Destroy(); };
323        }
324    }
325    void TormaaVihu(PhysicsObject Tormaaja, PhysicsObject kohde)
326    {
327        elamaLaskuri.Value -= 2;
328        if (pelaaja1.Weapon != null)
329            pelaaja1.Weapon.Destroy();
330        MessageDisplay.Add("Ouch!");
331    }
332    void LisaaChest(Vector paikka, double leveys, double korkeus)
333    {
334        PhysicsObject chest = PhysicsObject.CreateStaticObject(leveys, korkeus);
335        chest.Position = paikka;
336        chest.Image = chestKuva;
337        chest.Tag = "Chest";
338        Add(chest);
339    }
340    void TormaaChest(PhysicsObject Tormaaja, PhysicsObject kohde)
341    {
342        if (kohde.Image == chestKuva)
343        {
344
345            PhysicsObject diamond = new PhysicsObject(20, 20);
346            diamond.Position = pelaaja1.Position;
347            diamond.Image = tahtiKuva;
348            diamond.Tag = "tahti";
349            Add(diamond);
350            kohde.Image = chestopenKuva;
351            MessageDisplay.Add("You opened the chest. There was a Diamond inside!");
352        }
353    }
354   void  Ammusosuuvihuun(PhysicsObject Tormaaja, PhysicsObject kohde)
355    {
356        Tormaaja.Destroy();
357
358        if ((string)kohde.Tag == "vihu")
359        {
360
361            kohde.Destroy();
362        }
363
364    }
365    void LisaaSpike(Vector paikka, double leveys, double korkeus)
366    {
367        PhysicsObject spike = PhysicsObject.CreateStaticObject(leveys, korkeus -3);
368        spike.Position = paikka;
369        spike.Image = spikeKuva;
370        spike.Tag = "spike";
371        Add(spike);
372    }
373    void TormaaSpike(PhysicsObject Tormaaja, PhysicsObject kohde)
374    {
375        ElamaLoppui();
376       
377       
378    }
379    void LuoElamaLaskuri()
380    {
381        elamaLaskuri = new DoubleMeter(10);
382        elamaLaskuri.MaxValue = 10;
383        elamaLaskuri.LowerLimit += ElamaLoppui;
384   
385
386        ProgressBar elamaPalkki = new ProgressBar(20, 20);
387        //elamaPalkki.X = Screen.Left + 150;
388        elamaPalkki.Y = 40;
389        elamaPalkki.BindTo(elamaLaskuri);
390        elamaPalkki.Image = (nohpKuva);
391        elamaPalkki.BarImage = (fullhpKuva);
392        pelaaja1.Add(elamaPalkki);
393    }
394    void ElamaLoppui()
395    {
396        MessageDisplay.Add("You Died...");
397        pelaaja1.Destroy();
398        dedAani.Play();
399        deathAani.Play();
400        MediaPlayer.Stop();
401        Timer.SingleShot(1.5, delegate { SeuraavaKentta(); });
402    }
403    void LisaaFlamer(Vector paikka, double leveys, double korkeus)
404    {
405
406        Vihu flamer = new Vihu(leveys*0.5, korkeus);
407
408        flamer.Image = flamerKuva;
409        flamer.Mass = 4.0;
410        flamer.Position = paikka;
411 
412        flamer.MakeStatic();
413        flamer.CollisionIgnoreGroup = 5;
414       
415        Add(flamer);
416        Timer Ajastin = new Timer();
417        Ajastin.Interval = 0.9;
418        Ajastin.Timeout += delegate
419        {
420            PhysicsObject Ammus = new PhysicsObject(20,10);
421            Ammus.Image = flameshotKuva;
422            Ammus.Position = flamer.Position;
423            Ammus.IgnoresGravity = true;
424            Ammus.Velocity = new Vector(-300,0);
425            Add(Ammus);
426            Ammus.Tag = "vihu";
427            Ammus.CollisionIgnoreGroup = 5;
428            AddCollisionHandler(Ammus, FlameOsuu);
429        };
430        Ajastin.Start();
431        flamer.Destroyed += Ajastin.Stop;
432    }
433    void SeuraavaKentta()
434    {
435        ClearAll();
436        MediaPlayer.Play("03 - Brinstar");
437        MediaPlayer.IsRepeating = true;
438
439        if (kenttaNro == 1) LuoKentta();
440        else if (kenttaNro == 2) LuoKentta();
441        else if (kenttaNro == 3) LuoKentta();
442        else if (kenttaNro == 4) LuoKentta();
443        else if (kenttaNro > 4) Exit();
444
445        LisaaNappaimet();
446
447        Camera.Follow(pelaaja1);
448        Camera.ZoomFactor = 2.2;
449        Camera.StayInLevel = true;
450
451    }
452    void TormasiMaaliin(PhysicsObject pelaaja, PhysicsObject maali)
453    {
454        //Kasvatetaan kenttänumeroa yhdellä ja siirrytään seuraavaan kenttään:
455        kenttaNro++;
456        SeuraavaKentta();
457    }
458    void FlameOsuu(PhysicsObject Tormaaja, PhysicsObject Kohde)
459    {
460        Tormaaja.Destroy();
461    }
462    void LisaaMedKit(Vector paikka, double leveys, double korkeus)
463    {
464        PhysicsObject med = PhysicsObject.CreateStaticObject(leveys, korkeus);
465        med.Position = paikka;
466        med.Image = medkitKuva;
467        med.Tag = "MedKit";
468        Add(med);
469    }
470    void TormaaMedKit(PhysicsObject Tormaaja, PhysicsObject Kohde)
471    {
472        elamaLaskuri.Value += 5;
473        maaliAani.Play();
474        Kohde.Destroy();
475    }
476    void LisaaSlime(Vector paikka, double leveys, double korkeus)
477    {
478
479        Vihu slime = new Vihu(leveys, korkeus * 0.5);
480        slime.Image = slimekuva;
481       
482        slime.Mass = 4.0;
483        slime.Position = paikka;
484        slime.Tag = "vihu";
485        slime.CollisionIgnoreGroup = 5;
486        Add(slime);
487
488        PlatformWandererBrain tasoAivot = new PlatformWandererBrain();
489        tasoAivot.Speed = 100;
490
491        slime.Brain = tasoAivot;
492    }
493}
Note: See TracBrowser for help on using the repository browser.