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

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