source: 2015/24/VeetiK/CaveRun/CaveRun/CaveRun/CaveRun/CaveRun.cs @ 6073

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