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

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