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

Revision 7519, 11.4 KB checked in by vekoski, 6 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 / 1.1, korkeus / 1.1);
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        col
97        pelaajanHP = new DoubleMeter(100.0, 0, 100.0);
98        pelaajanHP.LowerLimit += delegate { AloitaAlusta("Kuolit"); };
99
100        ProgressBar elamaPalkki = new ProgressBar(160, 20);
101        elamaPalkki.BarColor = Color.Red;
102        elamaPalkki.BorderColor = Color.White;
103        elamaPalkki.Position = new Vector(Screen.Right - elamaPalkki.Width - 20, Screen.Top - elamaPalkki.Height / 2 - 40);
104        elamaPalkki.BindTo(pelaajanHP);
105        Add(elamaPalkki);
106
107        AddCollisionHandler(pelaaja, "zombi", delegate(PhysicsObject p, PhysicsObject kohde) {
108            pelaajanHP.Value -= 50.0;       
109        });
110
111
112        Keyboard.Listen(Key.Left, ButtonState.Down,
113        LiikutaPelaajaa, null, new Vector(-1000, 0));
114        Keyboard.Listen(Key.Right, ButtonState.Down,
115        LiikutaPelaajaa, null, new Vector(1000, 0));
116        Keyboard.Listen(Key.Up, ButtonState.Down,
117        LiikutaPelaajaa, null, new Vector(0, 1000));
118        Keyboard.Listen(Key.Down, ButtonState.Down,
119        LiikutaPelaajaa, null, new Vector(0, -1000));
120
121        Keyboard.Listen(Key.Left, ButtonState.Released,
122        LiikutaPelaajaa, null, new Vector(0, 0));
123        Keyboard.Listen(Key.Right, ButtonState.Released,
124        LiikutaPelaajaa, null, new Vector(0, 0));
125        Keyboard.Listen(Key.Up, ButtonState.Released,
126        LiikutaPelaajaa, null, new Vector(0, 0));
127        Keyboard.Listen(Key.Down, ButtonState.Released,
128        LiikutaPelaajaa, null, new Vector(0, 0));
129        Keyboard.Listen(Key.Space, ButtonState.Down, AmmuAseella, "Ammu");
130
131        //ControllerOne.Listen(Button.DPadLeft, ButtonState.Down,
132        //LiikutaPelaajaa, null, new Vector(-1000, 0));
133        //ControllerOne.Listen(Button.DPadRight, ButtonState.Down,
134        //LiikutaPelaajaa, null, new Vector(1000, 0));
135        //ControllerOne.Listen(Button.DPadUp, ButtonState.Down,
136        //LiikutaPelaajaa, null, new Vector(0, 1000));
137        //ControllerOne.Listen(Button.DPadDown, ButtonState.Down,
138        //LiikutaPelaajaa, null, new Vector(0, -1000));
139        ControllerOne.ListenAnalog(AnalogControl.RightTrigger, 0.1, AmmuOhjaimella, null);
140       
141       
142
143        ControllerOne.ListenAnalog(AnalogControl.LeftStick, 0.1, LiikutaPelaajaaTatilla, null);
144        ControllerOne.ListenAnalog(AnalogControl.RightStick, 0.1,KäännäPelaajaaTatilla, null);
145
146        ControllerOne.ListenAnalog(AnalogControl.LeftTrigger, 0.0, Juoksu, null);
147
148
149    }
150
151    void LuoTaso(Vector paikka, double leveys, double korkeus)
152    {
153        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
154        taso.Position = paikka;
155        taso.Color = Color.Brown;
156        taso.CollisionIgnoreGroup = 1;
157        taso.Tag = "seina";
158        Add(taso);
159    }
160
161    void Juoksu (AnalogState liipasin)
162    {
163        nopeus = 1000 + 2000 * liipasin.State;
164    }
165    void LuoOvi(Vector paikka, double leveys, double korkeus)
166    {
167        PhysicsObject LuoOvi = new PhysicsObject(leveys, 10);
168        LuoOvi.Position = paikka;
169        LuoOvi.Color = Color.Red;
170        Add(LuoOvi);
171        LuoOvi.MakeStatic();
172
173        AddCollisionHandler(LuoOvi, "pelaaja", delegate(PhysicsObject ovi, PhysicsObject p) {
174            if (keys.Count == 0)
175            {
176                // seuraava kenttä / voitit pelin
177                // VoititPelin();
178                AloitaAlusta("Voitit pelin");
179            }
180            else 
181            {
182                MessageDisplay.Add("Tarvitset avaimet");
183            }
184        });
185    }
186
187    void LuoLääkelaatikko(Vector paikka, double leveys, double korkeus)
188    {
189        PhysicsObject Lääkelaatikko = new PhysicsObject(40, 40);
190        Lääkelaatikko.Position = paikka;
191        Lääkelaatikko.Color = Color.Orange;
192        Lääkelaatikko.Image = laakelaatikonKuva;
193        Lääkelaatikko.IgnoresCollisionResponse = true;
194        Add(Lääkelaatikko);
195
196        AddCollisionHandler(Lääkelaatikko, "pelaaja", delegate(PhysicsObject l, PhysicsObject p) {
197            AseAani.Play();
198            l.Destroy();
199            pelaajanHP.Value = pelaajanHP.MaxValue;
200        });
201    }
202
203
204    void LuoZombi(Vector paikka, double leveys, double korkeus)
205    {
206        PhysicsObject Zombi = new PhysicsObject(leveys / 1.5, korkeus / 1.5);
207        Zombi.Position = paikka;
208        Zombi.Color = Color.Orange;
209        Zombi.Animation = new Animation(ZombiKuvat);
210        Zombi.Animation.FPS = 3;
211        Zombi.Animation.Start();
212        Zombi.Tag = "zombi";
213        Add(Zombi);
214
215        LabyrinthWandererBrain labyrinttiAivot = new LabyrinthWandererBrain(RUUDUN_KOKO);
216        labyrinttiAivot.Speed = 100.0;
217        labyrinttiAivot.LabyrinthWallTag = "seina";
218        labyrinttiAivot.TurnWhileMoving = true;
219        Zombi.Brain = labyrinttiAivot;
220    }
221
222void LuoAse(Vector paikka, double leveys, double korkeus)
223    {
224        PhysicsObject Ase = new PhysicsObject(40, 40);
225        Ase.Position = paikka;
226        Ase.Color = Color.Orange;
227        Ase.Image = AseKuva;
228        Ase.IgnoresCollisionResponse = true;
229        Add(Ase);
230
231
232
233        AddCollisionHandler(Ase, "pelaaja", delegate(PhysicsObject a, PhysicsObject p)
234        {
235            MessageDisplay.Add("Löysit aseen");
236
237            AseAani.Play();
238            pelaajanAse = new AssaultRifle(30, 10);
239
240            //Ammusten määrä aluksi:
241            pelaajanAse.InfiniteAmmo = true;
242
243            //Mitä tapahtuu kun ammus osuu johonkin?
244            pelaajanAse.ProjectileCollision = AmmusOsui;
245
246            pelaaja.Add(pelaajanAse);
247            pelaajanAse.IsVisible = false;
248
249            a.Destroy();
250
251
252
253        });
254    }
255
256    void LuoAvain(Vector paikka, double leveys, double korkeus)
257    {
258        PhysicsObject Avain = new PhysicsObject(40, 40);
259        Avain.Position = paikka;
260        Avain.Color = Color.Orange;
261        Avain.IgnoresCollisionResponse = true;
262        Add(Avain);
263        Avain.Image = AvainKuva;
264        keys.Add(Avain);
265
266        AddCollisionHandler(Avain, "pelaaja", delegate(PhysicsObject a, PhysicsObject p) {
267            MessageDisplay.Add ("Löysit avaimen");
268            AseAani.Play();
269            a.Destroy();
270            keys.Remove(a);
271
272            // viesti "Sait avaimen"?
273        });
274    }
275
276    void LuoSalaOvi(Vector paikka, double leveys, double korkeus)
277    {
278       
279        PhysicsObject SalaOvi = new PhysicsObject (40, 40);
280        SalaOvi.Position = paikka;
281        SalaOvi.Color = Color.Brown;
282        SalaOvi.IgnoresCollisionResponse = true;
283        Add(SalaOvi);
284
285    }
286
287    void LiikutaPelaajaa(Vector vektori)
288    {
289        if (vektori == Vector.Zero)
290        {
291            pelaaja.Stop();
292            return;
293        }
294
295        pelaaja.Angle = vektori.Angle;
296        pelaaja.Push(vektori);
297    }
298
299    void LiikutaPelaajaaTatilla(AnalogState tatinTila)
300    {
301        if (tatinTila.StateVector == Vector.Zero)
302        {
303            pelaaja.Stop();
304            return;
305        }
306
307        pelaaja.Push(tatinTila.StateVector * nopeus);
308    }
309
310    protected override void Update(Time time)
311    {
312        taskulamppu.Position = pelaaja.Position;
313        taskulamppu.Angle = pelaaja.Angle;
314        base.Update(time);
315    }
316
317    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
318    {
319        //ammus.Destroy();
320    }
321    void AmmuAseella()
322    {
323        if (pelaajanAse == null) return;
324
325        PhysicsObject ammus = pelaajanAse.Shoot();
326
327        if (ammus != null)
328        {
329            //ammus.Size *= 3;
330            ammus.Image = luodinKuva;
331            ammus.Size = new Vector(25 / 2.0, 8 / 2.0);
332            //ammus.MaximumLifetime = TimeSpan.FromSeconds(2.0);
333
334            AddCollisionHandler(ammus, delegate(PhysicsObject a, PhysicsObject b)
335            {
336                a.Destroy();
337
338                if (b.Tag.ToString() == "zombi")
339                {
340                    b.Destroy();
341                }
342            });
343           
344        }
345
346
347    }
348
349    void AmmuOhjaimella(AnalogState liipaisimenTila)
350    {
351        if (liipaisimenTila.State > 0.95) {
352        AmmuAseella();
353        }
354    }
355
356    void KäännäPelaajaaTatilla(AnalogState tatinTila)
357    { 
358        pelaaja.Angle = tatinTila.StateVector.Angle; 
359    }
360
361}
Note: See TracBrowser for help on using the repository browser.