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

Revision 7543, 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 / 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        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            //Ammusten määrä aluksi:
240            pelaajanAse.InfiniteAmmo = true;
241
242            //Mitä tapahtuu kun ammus osuu johonkin?
243            pelaajanAse.ProjectileCollision = AmmusOsui;
244
245            pelaaja.Add(pelaajanAse);
246            pelaajanAse.IsVisible = false;
247
248            a.Destroy();
249
250
251
252        });
253    }
254
255    void LuoAvain(Vector paikka, double leveys, double korkeus)
256    {
257        PhysicsObject Avain = new PhysicsObject(40, 40);
258        Avain.Position = paikka;
259        Avain.Color = Color.Orange;
260        Avain.IgnoresCollisionResponse = true;
261        Add(Avain);
262        Avain.Image = AvainKuva;
263        keys.Add(Avain);
264
265        AddCollisionHandler(Avain, "pelaaja", delegate(PhysicsObject a, PhysicsObject p) {
266            MessageDisplay.Add ("Löysit avaimen");
267            AseAani.Play();
268            a.Destroy();
269            keys.Remove(a);
270
271            // viesti "Sait avaimen"?
272        });
273    }
274
275    void LuoSalaOvi(Vector paikka, double leveys, double korkeus)
276    {
277       
278        PhysicsObject SalaOvi = new PhysicsObject (40, 40);
279        SalaOvi.Position = paikka;
280        SalaOvi.Color = Color.Brown;
281        SalaOvi.IgnoresCollisionResponse = true;
282        Add(SalaOvi);
283
284    }
285
286    void LiikutaPelaajaa(Vector vektori)
287    {
288        if (vektori == Vector.Zero)
289        {
290            pelaaja.Stop();
291            return;
292        }
293
294        pelaaja.Angle = vektori.Angle;
295        pelaaja.Push(vektori);
296    }
297
298    void LiikutaPelaajaaTatilla(AnalogState tatinTila)
299    {
300        if (tatinTila.StateVector == Vector.Zero)
301        {
302            pelaaja.Stop();
303            return;
304        }
305
306        pelaaja.Push(tatinTila.StateVector * nopeus);
307    }
308
309    protected override void Update(Time time)
310    {
311        taskulamppu.Position = pelaaja.Position;
312        taskulamppu.Angle = pelaaja.Angle;
313        base.Update(time);
314    }
315
316    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
317    {
318        //ammus.Destroy();
319    }
320    void AmmuAseella()
321    {
322        if (pelaajanAse == null) return;
323
324        PhysicsObject ammus = pelaajanAse.Shoot();
325
326        if (ammus != null)
327        {
328            //ammus.Size *= 3;
329            ammus.Image = luodinKuva;
330            ammus.Size = new Vector(25 / 2.0, 8 / 2.0);
331            //ammus.MaximumLifetime = TimeSpan.FromSeconds(2.0);
332
333            AddCollisionHandler(ammus, delegate(PhysicsObject a, PhysicsObject b)
334            {
335                a.Destroy();
336
337                if (b.Tag.ToString() == "zombi")
338                {
339                    b.Destroy();
340                }
341            });
342           
343        }
344
345
346    }
347
348    void AmmuOhjaimella(AnalogState liipaisimenTila)
349    {
350        if (liipaisimenTila.State > 0.95) {
351        AmmuAseella();
352        }
353    }
354
355    void KäännäPelaajaaTatilla(AnalogState tatinTila)
356    { 
357        pelaaja.Angle = tatinTila.StateVector.Angle; 
358    }
359
360}
Note: See TracBrowser for help on using the repository browser.