source: 2017/27/VeetiK/CaveRun/CaveRun/CaveRun/CaveRun/CaveRun.cs @ 8853

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