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

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