source: 2016/26/VeetiK/CaveRun/CaveRun/CaveRun/CaveRun/CaveRun.cs @ 7561

Revision 7561, 11.4 KB checked in by vekoski, 4 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 CaveRun : PhysicsGame
10
11{
12    const int RUUDUN_KOKO = 30;
13
14    double nopeus = 1000;
15
16    PhysicsObject pelaaja;
17    GameObject taskulamppu;
18    AssaultRifle pelaajanAse;
19
20    Image laakelaatikonKuva = LoadImage("Lääkelaatikko");
21    Image taustaKuva = LoadImage("bgTest");
22    Image AseKuva = LoadImage("gun");
23    Image AvainKuva = LoadImage("Avain");
24    Image[] ZombiKuvat = LoadImages("Zombi1", "Zombi2");
25    Image[] Pelaajakuvat = LoadImages("Pelaaja1", "Pelaaja2");
26    Image luodinKuva = LoadImage("Luoti");
27    SoundEffect AseAani = LoadSoundEffect("Laatikkomusa");
28
29    DoubleMeter pelaajanHP;
30
31    List<PhysicsObject> keys = new List<PhysicsObject>();
32
33    public override void Begin()
34    {
35        IsFullScreen = true;
36        SmoothTextures = false;
37        luokentta();
38
39        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
40        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
41        MediaPlayer.Play("Taustamusiikki");
42        MediaPlayer.IsRepeating = true;
43    }
44    void luokentta()
45    {
46        ColorTileMap ruudut = ColorTileMap.FromLevelAsset("Map1");
47        ruudut.SetTileMethod(Color.FromHexCode("404040"), LuoPelaaja);
48        ruudut.SetTileMethod(Color.Black, LuoTaso);
49        ruudut.SetTileMethod(Color.Orange, LuoOvi);
50        ruudut.SetTileMethod(Color.FromHexCode("FF001D"), LuoLääkelaatikko);
51        ruudut.SetTileMethod(Color.FromHexCode("FF00D4"), LuoZombi);
52        ruudut.SetTileMethod(Color.FromHexCode("0008FF"), LuoAvain);
53        ruudut.SetTileMethod(Color.Red, LuoLääkelaatikko);
54        ruudut.SetTileMethod(Color.Red, LuoLääkelaatikko);
55        ruudut.SetTileMethod(Color.FromHexCode("FFF600"), LuoSalaOvi);
56        ruudut.SetTileMethod(Color.FromHexCode("00FF3B"), LuoAse);
57        ruudut.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
58        Level.Background.Image = taustaKuva;
59        Level.Background.TileToLevel();
60        Level.Background.Color = Color.Brown;
61       
62
63    }
64
65    void AloitaAlusta(string message)
66    {
67        ClearAll();
68        Level.Background.Color = Color.Black;
69        pelaajanAse = null;
70
71        YesNoWindow restartWindow = new YesNoWindow(message, "Aloita alusta", "Poistu pelistä");
72        restartWindow.Yes += delegate
73        {
74            ClearAll();
75            Begin();
76        };
77        restartWindow.No += Exit;
78        Add(restartWindow);
79    }
80
81    void LuoPelaaja(Vector paikka, double leveys, double korkeus)
82    {
83        pelaaja = new PhysicsObject(leveys / 0.5, korkeus / 0.5);
84        pelaaja.Position = paikka;
85        Add(pelaaja);
86        pelaaja.Animation = new Animation(Pelaajakuvat);
87        pelaaja.Animation.FPS = 3;
88        pelaaja.Animation.Start();
89        pelaaja.Tag = "pelaaja";
90        pelaaja.LinearDamping = 0.85;
91        pelaaja.AngularDamping = 0.85;
92        Camera.Follow(pelaaja);
93        Camera.ZoomFactor = 1.5;
94        taskulamppu = new GameObject(LoadImage("flashlight"));
95        Add(taskulamppu, 2);
96        pelaajanHP = new DoubleMeter(100.0, 0, 100.0);
97        pelaajanHP.LowerLimit += delegate { AloitaAlusta("Kuolit"); };
98
99        ProgressBar elamaPalkki = new ProgressBar(160, 20);
100        elamaPalkki.BarColor = Color.Red;
101        elamaPalkki.BorderColor = Color.White;
102        elamaPalkki.Position = new Vector(Screen.Right - elamaPalkki.Width - 20, Screen.Top - elamaPalkki.Height / 2 - 40);
103        elamaPalkki.BindTo(pelaajanHP);
104        Add(elamaPalkki);
105
106        AddCollisionHandler(pelaaja, "zombi", delegate(PhysicsObject p, PhysicsObject kohde) {
107            pelaajanHP.Value -= 50.0;       
108        });
109
110
111        Keyboard.Listen(Key.Left, ButtonState.Down,
112        LiikutaPelaajaa, null, new Vector(-1000, 0));
113        Keyboard.Listen(Key.Right, ButtonState.Down,
114        LiikutaPelaajaa, null, new Vector(1000, 0));
115        Keyboard.Listen(Key.Up, ButtonState.Down,
116        LiikutaPelaajaa, null, new Vector(0, 1000));
117        Keyboard.Listen(Key.Down, ButtonState.Down,
118        LiikutaPelaajaa, null, new Vector(0, -1000));
119
120        Keyboard.Listen(Key.Left, ButtonState.Released,
121        LiikutaPelaajaa, null, new Vector(0, 0));
122        Keyboard.Listen(Key.Right, ButtonState.Released,
123        LiikutaPelaajaa, null, new Vector(0, 0));
124        Keyboard.Listen(Key.Up, ButtonState.Released,
125        LiikutaPelaajaa, null, new Vector(0, 0));
126        Keyboard.Listen(Key.Down, ButtonState.Released,
127        LiikutaPelaajaa, null, new Vector(0, 0));
128        Keyboard.Listen(Key.Space, ButtonState.Down, AmmuAseella, "Ammu");
129
130        //ControllerOne.Listen(Button.DPadLeft, ButtonState.Down,
131        //LiikutaPelaajaa, null, new Vector(-1000, 0));
132        //ControllerOne.Listen(Button.DPadRight, ButtonState.Down,
133        //LiikutaPelaajaa, null, new Vector(1000, 0));
134        //ControllerOne.Listen(Button.DPadUp, ButtonState.Down,
135        //LiikutaPelaajaa, null, new Vector(0, 1000));
136        //ControllerOne.Listen(Button.DPadDown, ButtonState.Down,
137        //LiikutaPelaajaa, null, new Vector(0, -1000));
138        ControllerOne.ListenAnalog(AnalogControl.RightTrigger, 0.1, AmmuOhjaimella, null);
139       
140       
141
142        ControllerOne.ListenAnalog(AnalogControl.LeftStick, 0.1, LiikutaPelaajaaTatilla, null);
143        ControllerOne.ListenAnalog(AnalogControl.RightStick, 0.1,KäännäPelaajaaTatilla, null);
144
145        ControllerOne.ListenAnalog(AnalogControl.LeftTrigger, 0.0, Juoksu, null);
146
147
148    }
149
150    void LuoTaso(Vector paikka, double leveys, double korkeus)
151    {
152        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
153        taso.Position = paikka;
154        taso.Color = Color.Brown;
155        taso.CollisionIgnoreGroup = 1;
156        taso.Tag = "seina";
157        Add(taso);
158    }
159
160    void Juoksu (AnalogState liipasin)
161    {
162        nopeus = 1000 + 2000 * liipasin.State;
163    }
164    void LuoOvi(Vector paikka, double leveys, double korkeus)
165    {
166        PhysicsObject LuoOvi = new PhysicsObject(leveys, 10);
167        LuoOvi.Position = paikka;
168        LuoOvi.Color = Color.Red;
169        Add(LuoOvi);
170        LuoOvi.MakeStatic();
171
172        AddCollisionHandler(LuoOvi, "pelaaja", delegate(PhysicsObject ovi, PhysicsObject p) {
173            if (keys.Count == 0)
174            {
175                // seuraava kenttä / voitit pelin
176                // VoititPelin();
177                AloitaAlusta("Voitit pelin");
178            }
179            else 
180            {
181                MessageDisplay.Add("Tarvitset avaimet");
182            }
183        });
184    }
185
186    void LuoLääkelaatikko(Vector paikka, double leveys, double korkeus)
187    {
188        PhysicsObject Lääkelaatikko = new PhysicsObject(40, 40);
189        Lääkelaatikko.Position = paikka;
190        Lääkelaatikko.Color = Color.Orange;
191        Lääkelaatikko.Image = laakelaatikonKuva;
192        Lääkelaatikko.IgnoresCollisionResponse = true;
193        Add(Lääkelaatikko);
194
195        AddCollisionHandler(Lääkelaatikko, "pelaaja", delegate(PhysicsObject l, PhysicsObject p) {
196            AseAani.Play();
197            l.Destroy();
198            pelaajanHP.Value = pelaajanHP.MaxValue;
199        });
200    }
201
202
203    void LuoZombi(Vector paikka, double leveys, double korkeus)
204    {
205        PhysicsObject Zombi = new PhysicsObject(leveys / 1.5, korkeus / 1.5);
206        Zombi.Position = paikka;
207        Zombi.Color = Color.Orange;
208        Zombi.Animation = new Animation(ZombiKuvat);
209        Zombi.Animation.FPS = 3;
210        Zombi.Animation.Start();
211        Zombi.Tag = "zombi";
212        Add(Zombi);
213
214        LabyrinthWandererBrain labyrinttiAivot = new LabyrinthWandererBrain(RUUDUN_KOKO);
215        labyrinttiAivot.Speed = 100.0;
216        labyrinttiAivot.LabyrinthWallTag = "seina";
217        labyrinttiAivot.TurnWhileMoving = true;
218        Zombi.Brain = labyrinttiAivot;
219    }
220
221void LuoAse(Vector paikka, double leveys, double korkeus)
222    {
223        PhysicsObject Ase = new PhysicsObject(60, 40);
224        Ase.Position = paikka;
225        Ase.Color = Color.Orange;
226        Ase.Image = AseKuva;
227        Ase.IgnoresCollisionResponse = true;
228        Add(Ase);
229
230
231
232        AddCollisionHandler(Ase, "pelaaja", delegate(PhysicsObject a, PhysicsObject p)
233        {
234            MessageDisplay.Add("Löysit aseen");
235
236            AseAani.Play();
237            pelaajanAse = new AssaultRifle(30, 10);
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254            //Ammusten määrä aluksi:
255            pelaajanAse.Ammo.Value = 10;
256            // pelaajanAse.InfiniteAmmo = false;
257
258
259
260            //Mitä tapahtuu kun ammus osuu johonkin?
261            pelaajanAse.ProjectileCollision = AmmusOsui;
262
263            pelaaja.Add(pelaajanAse);
264            pelaajanAse.IsVisible = false;
265
266            a.Destroy();
267
268
269
270        });
271    }
272
273    void LuoAvain(Vector paikka, double leveys, double korkeus)
274    {
275        PhysicsObject Avain = new PhysicsObject(40, 40);
276        Avain.Position = paikka;
277        Avain.Color = Color.Orange;
278        Avain.IgnoresCollisionResponse = true;
279        Add(Avain);
280        Avain.Image = AvainKuva;
281        keys.Add(Avain);
282
283        AddCollisionHandler(Avain, "pelaaja", delegate(PhysicsObject a, PhysicsObject p) {
284            MessageDisplay.Add ("Löysit avaimen");
285            AseAani.Play();
286            a.Destroy();
287            keys.Remove(a);
288
289            // viesti "Sait avaimen"?
290        });
291    }
292
293    void LuoSalaOvi(Vector paikka, double leveys, double korkeus)
294    {
295       
296        PhysicsObject SalaOvi = new PhysicsObject (40, 40);
297        SalaOvi.Position = paikka;
298        SalaOvi.Color = Color.Brown;
299        SalaOvi.IgnoresCollisionResponse = true;
300        Add(SalaOvi);
301
302    }
303
304    void LiikutaPelaajaa(Vector vektori)
305    {
306        if (vektori == Vector.Zero)
307        {
308            pelaaja.Stop();
309            return;
310        }
311
312        pelaaja.Angle = vektori.Angle;
313        pelaaja.Push(vektori);
314    }
315
316    void LiikutaPelaajaaTatilla(AnalogState tatinTila)
317    {
318        if (tatinTila.StateVector == Vector.Zero)
319        {
320            pelaaja.Stop();
321            return;
322        }
323
324        pelaaja.Push(tatinTila.StateVector * nopeus);
325    }
326
327    protected override void Update(Time time)
328    {
329        taskulamppu.Position = pelaaja.Position;
330        taskulamppu.Angle = pelaaja.Angle;
331        base.Update(time);
332    }
333
334    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
335    {
336        //ammus.Destroy();
337    }
338    void AmmuAseella()
339    {
340        if (pelaajanAse == null) return;
341
342        PhysicsObject ammus = pelaajanAse.Shoot();
343
344        if (ammus != null)
345        {
346            //ammus.Size *= 3;
347            ammus.Image = luodinKuva;
348            ammus.Size = new Vector(25 / 2.0, 8 / 2.0);
349            //ammus.MaximumLifetime = TimeSpan.FromSeconds(2.0);
350
351            AddCollisionHandler(ammus, delegate(PhysicsObject a, PhysicsObject b)
352            {
353                a.Destroy();
354
355                if (b.Tag.ToString() == "zombi")
356                {
357                    b.Destroy();
358                }
359            });
360           
361        }
362
363
364    }
365
366    void AmmuOhjaimella(AnalogState liipaisimenTila)
367    {
368        if (liipaisimenTila.State > 0.95) {
369        AmmuAseella();
370        }
371    }
372
373    void KäännäPelaajaaTatilla(AnalogState tatinTila)
374    { 
375        pelaaja.Angle = tatinTila.StateVector.Angle; 
376    }
377
378}
Note: See TracBrowser for help on using the repository browser.