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

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