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

Revision 7304, 10.4 KB checked in by aajualal, 3 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
15    bool voiTehdaPommin = true;
16
17    PlatformCharacter pelaaja1;
18    PlasmaCannon pelaajan1Ase;
19    GameObject kursori;
20
21    Image pelaajanKuva = LoadImage("MainChar");
22    Image[] pelaajarunkuva = LoadImages("MainCharRun1", "MainCharRun2");
23    Image[] crabdemonmoveKuva = LoadImages("CrabDemon1", "CrabDemon2", "CrabDemon3");
24    Image crabKuva = LoadImage("CrabDemon1");
25    Image tahtiKuva = LoadImage("DiamondGem");
26    Image aseenkuvaOikea = LoadImage("Revolver");
27    Image aseenkuvaVasen = LoadImage("RevolverLft");
28    Image cursorinkuva = LoadImage("Cursor");
29    Image bulletKuva = LoadImage("RevBullet");
30    Image boxkuva = LoadImage("Box");
31    Image pelaajajumpKuva = LoadImage("MainCharJump");
32    Image bombKuva = LoadImage("Bomb");
33    Image crackstoneKuva = LoadImage("CrackedStone");
34    Image exitKuva = LoadImage("CaveExit");
35    Image stoneKuva = LoadImage("Stone");
36    Image topKuva = LoadImage("StoneTop");
37    Image chestKuva = LoadImage("ClosedChest");
38    Image chestopenKuva = LoadImage("OpenChest");
39
40    SoundEffect maaliAani = LoadSoundEffect("maali");
41
42    public override void Begin()
43    {
44        Gravity = new Vector(0, -1000);
45
46        SmoothTextures = false;
47
48        LuoKentta();
49
50        MessageDisplay.Add("You have fallen down. Your story begins here!");
51
52        LisaaNappaimet();
53
54        Camera.Follow(pelaaja1);
55        Camera.ZoomFactor = 2.2;
56        Camera.StayInLevel = true;
57    }
58
59    void LuoKentta()
60    {
61        TileMap kentta = TileMap.FromLevelAsset("kentta1");
62        kentta.SetTileMethod('#', LisaaTaso);
63        kentta.SetTileMethod('*', LisaaTahti);
64        kentta.SetTileMethod('N', LisaaPelaaja);
65        kentta.SetTileMethod('E', LisaaExit);
66        kentta.SetTileMethod('S', LisaaCrackStone);
67        kentta.SetTileMethod('T', LisaaStonetop);
68        kentta.SetTileMethod('D', LisaaCrabDemon);
69        kentta.SetTileMethod('C', LisaaChest);
70        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
71        Level.CreateBorders();
72        Level.Background.Color = (Color.DarkGray);
73
74
75
76        kursori = new GameObject(20, 20);
77        kursori.Image = cursorinkuva;
78        Add(kursori);
79    }
80
81    void LisaaTaso(Vector paikka, double leveys, double korkeus)
82    {
83        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
84        taso.Position = paikka;
85        taso.Image = stoneKuva;
86        Add(taso);
87    }
88
89    void LisaaTahti(Vector paikka, double leveys, double korkeus)
90    {
91        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys*0.5, korkeus*0.5);
92        tahti.IgnoresCollisionResponse = true;
93        tahti.Position = paikka;
94        tahti.Image = tahtiKuva;
95        tahti.Tag = "tahti";
96        Add(tahti);
97    }
98
99    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
100    {
101        pelaaja1 = new PlatformCharacter(leveys * 0.5, korkeus);
102        pelaaja1.Position = paikka;
103        pelaaja1.Mass = 4.0;
104        pelaaja1.AnimIdle = pelaajanKuva;
105        pelaaja1.AnimWalk = new Animation(pelaajarunkuva);
106        pelaaja1.AnimWalk.FPS = 5;
107        pelaaja1.AnimJump = pelaajajumpKuva;
108
109        AddCollisionHandler(pelaaja1, "tahti", TormaaTahteen);
110        AddCollisionHandler(pelaaja1, "vihu", TormaaVihu);
111        AddCollisionHandler(pelaaja1, "Chest", TormaaChest);
112        Add(pelaaja1);
113
114        pelaajan1Ase = new PlasmaCannon(18, 10);
115        pelaajan1Ase.InfiniteAmmo = true;
116        pelaajan1Ase.Image = aseenkuvaOikea;
117        pelaajan1Ase.FireRate = 3;
118        pelaajan1Ase.X = 3;
119        pelaajan1Ase.Y = -3;
120        pelaajan1Ase.ProjectileCollision = Ammusosuuvihuun;
121
122       
123
124        pelaaja1.Add(pelaajan1Ase);
125
126    }
127
128    void LisaaNappaimet()
129    {
130        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
131        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
132
133        Keyboard.Listen(Key.A, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
134        Keyboard.Listen(Key.D, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, nopeus);
135        Keyboard.Listen(Key.Space, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
136        Keyboard.Listen(Key.E, ButtonState.Pressed, AsetaPommi, "Pelaaja asettaa pommin", pelaaja1);
137        Mouse.ListenMovement(0.0, Tahtaa, "Tähtää aseella");
138        Mouse.Listen(MouseButton.Left, ButtonState.Down, AmmuAseella, "Pelaaja Ampuu", pelaajan1Ase);
139
140
141
142        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
143
144        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
145        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
146        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
147
148        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
149    }
150
151    void Liikuta(PlatformCharacter hahmo, double nopeus)
152    {
153        hahmo.Walk(nopeus);
154    }
155
156    void Hyppaa(PlatformCharacter hahmo, double nopeus)
157    {
158        hahmo.Jump(nopeus);
159    }
160
161    void TormaaTahteen(PhysicsObject hahmo, PhysicsObject tahti)
162    {
163        maaliAani.Play();
164       
165        tahti.Destroy();
166    }
167    void Tahtaa(AnalogState hiirenLiike)
168    {
169        Vector suunta = (Mouse.PositionOnWorld - pelaajan1Ase.AbsolutePosition).Normalize();
170        pelaajan1Ase.Angle = suunta.Angle;
171
172        kursori.Position = Mouse.PositionOnWorld;
173        if (kursori.X < pelaaja1.X)
174        {
175            pelaajan1Ase.Image = aseenkuvaVasen;
176        }
177        else
178        {
179            pelaajan1Ase.Image = aseenkuvaOikea;
180        }
181    }
182    void AmmuAseella(PlasmaCannon ase)
183    {
184        if (pelaaja1.IsDestroyed)
185            return;
186
187        PhysicsObject ammus = ase.Shoot();
188        //TimeSpan aika = new TimeSpan(0, 0, 2);
189        //ammus.MaximumLifetime = aika;
190
191        //ammus. += Ammusosuuvihuun;
192
193        if (ammus != null)
194        {
195            ammus.Size *= 1;
196            ammus.Image = bulletKuva;
197            ammus.Tag = "Bullet";
198            ammus.MaximumLifetime = TimeSpan.FromSeconds(0.5);
199        }
200    }
201    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
202    {
203        ammus.Destroy();
204
205       
206           
207       
208    }
209    void LisaaCrackStone(Vector paikka, double leveys, double korkeus)
210    {
211        PhysicsObject cstone = PhysicsObject.CreateStaticObject(leveys, korkeus);
212        cstone.Position = paikka;
213        cstone.Image = crackstoneKuva;
214        cstone.Tag = "CrackStone";
215        Add(cstone);
216    }
217
218    void AsetaPommi(PlatformCharacter pelaaja1)
219    {
220        LisaaPommi();
221
222    }
223    void LisaaPommi()
224    {
225        if (voiTehdaPommin)
226        {
227            voiTehdaPommin = false;
228            PhysicsObject pommi = new PhysicsObject(20, 20);
229            pommi.Position = pelaaja1.Position;
230            pommi.Image = bombKuva;
231            Add(pommi);
232            Timer.SingleShot(1.0, delegate { rajahda(pommi); voiTehdaPommin = true; });
233        }
234    }
235    void rajahda(PhysicsObject pommi)
236    {
237        Explosion rajahdys = new Explosion(100);
238        rajahdys.Position = pommi.Position;
239        rajahdys.ShockwaveReachesObject += tuhoacrackseina;
240        Add(rajahdys);
241        pommi.Destroy();
242
243
244    }
245    void tuhoacrackseina(IPhysicsObject CrackStone, Vector suunta)
246    {
247
248        if ((string)CrackStone.Tag == "CrackStone")
249        {
250            CrackStone.Destroy();
251        }
252
253    }
254    void LisaaExit(Vector paikka, double leveys, double korkeus)
255    {
256        PhysicsObject exit = PhysicsObject.CreateStaticObject(leveys, korkeus);
257        exit.Position = paikka;
258        exit.Image = exitKuva;
259        Add(exit);
260    }
261    void LisaaStonetop(Vector paikka, double leveys, double korkeus)
262    {
263        PhysicsObject top = PhysicsObject.CreateStaticObject(leveys, korkeus);
264        top.Position = paikka;
265        top.Image = topKuva;
266        Add(top);
267    }
268    void LisaaCrabDemon(Vector paikka, double leveys, double korkeus)
269    {
270
271        Vihu crab = new Vihu(leveys, korkeus * 0.5);
272        crab.AnimWalk = new Animation(crabdemonmoveKuva);
273        crab.AnimWalk.FPS = 5;
274        crab.Mass = 4.0;
275        crab.Position = paikka;
276        crab.Tag = "vihu";
277        Add(crab);
278
279        PlatformWandererBrain tasoAivot = new PlatformWandererBrain();
280        tasoAivot.Speed = 100;
281
282        crab.Brain = tasoAivot;
283    }
284    class Vihu : PlatformCharacter
285    {
286        private IntMeter elamaLaskuri = new IntMeter(3, 0, 3);
287        public IntMeter ElamaLaskuri { get { return elamaLaskuri; } }
288
289        public Vihu(double leveys, double korkeus)
290            : base(leveys, korkeus)
291        {
292            elamaLaskuri.LowerLimit += delegate { this.Destroy(); };
293        }
294    }
295    void TormaaVihu(PhysicsObject Tormaaja, PhysicsObject kohde)
296    {
297        pelaaja1.Destroy();
298        if (pelaaja1.Weapon != null)
299            pelaaja1.Weapon.Destroy();
300        MessageDisplay.Add("You Died. Your story ends here...");
301    }
302    void LisaaChest(Vector paikka, double leveys, double korkeus)
303    {
304        PhysicsObject chest = PhysicsObject.CreateStaticObject(leveys, korkeus);
305        chest.Position = paikka;
306        chest.Image = chestKuva;
307        chest.Tag = "Chest";
308        Add(chest);
309    }
310    void TormaaChest(PhysicsObject Tormaaja, PhysicsObject kohde)
311    {
312        if (kohde.Image == chestKuva)
313        {
314
315            PhysicsObject diamond = new PhysicsObject(20, 20);
316            diamond.Position = pelaaja1.Position;
317            diamond.Image = tahtiKuva;
318            diamond.Tag = "tahti";
319            Add(diamond);
320            kohde.Image = chestopenKuva;
321            MessageDisplay.Add("You opened the chest. There was a Diamond inside!");
322        }
323    }
324   void  Ammusosuuvihuun(PhysicsObject Tormaaja, PhysicsObject kohde)
325    {
326        Tormaaja.Destroy();
327
328        if ((string)kohde.Tag == "vihu")
329        {
330
331            kohde.Destroy();
332        }
333
334    }
335}
Note: See TracBrowser for help on using the repository browser.