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

Revision 6066, 11.1 KB checked in by sieerinn, 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            AseAani.Play();
188            l.Destroy();
189            pelaajanHP.Value = pelaajanHP.MaxValue;
190        });
191    }
192
193
194    void LuoZombi(Vector paikka, double leveys, double korkeus)
195    {
196        PhysicsObject Zombi = new PhysicsObject(leveys / 1.5, korkeus / 1.5);
197        Zombi.Position = paikka;
198        Zombi.Color = Color.Orange;
199        Zombi.Animation = new Animation(ZombiKuvat);
200        Zombi.Animation.FPS = 3;
201        Zombi.Animation.Start();
202        Zombi.Tag = "zombi";
203        Add(Zombi);
204
205        LabyrinthWandererBrain labyrinttiAivot = new LabyrinthWandererBrain(RUUDUN_KOKO);
206        labyrinttiAivot.Speed = 100.0;
207        labyrinttiAivot.LabyrinthWallTag = "seina";
208        labyrinttiAivot.TurnWhileMoving = true;
209        Zombi.Brain = labyrinttiAivot;
210    }
211
212    void LuoAse(Vector paikka, double leveys, double korkeus)
213    {
214        PhysicsObject Ase = new PhysicsObject(40, 40);
215        Ase.Position = paikka;
216        Ase.Color = Color.Orange;
217        Ase.Image = AseKuva;
218        Ase.IgnoresCollisionResponse = true;
219        Add(Ase);
220
221
222
223        AddCollisionHandler(Ase, "pelaaja", delegate(PhysicsObject a, PhysicsObject p)
224        {
225            MessageDisplay.Add("Löysit aseen");
226
227            AseAani.Play();
228            pelaajanAse = new AssaultRifle(30, 10);
229
230            //Ammusten määrä aluksi:
231            pelaajanAse.InfiniteAmmo = true;
232
233            //Mitä tapahtuu kun ammus osuu johonkin?
234            pelaajanAse.ProjectileCollision = AmmusOsui;
235
236            pelaaja.Add(pelaajanAse);
237            pelaajanAse.IsVisible = false;
238
239            a.Destroy();
240
241
242
243        });
244    }
245
246    void LuoAvain(Vector paikka, double leveys, double korkeus)
247    {
248        PhysicsObject Avain = new PhysicsObject(40, 40);
249        Avain.Position = paikka;
250        Avain.Color = Color.Orange;
251        Avain.IgnoresCollisionResponse = true;
252        Add(Avain);
253        Avain.Image = AvainKuva;
254        keys.Add(Avain);
255
256        AddCollisionHandler(Avain, "pelaaja", delegate(PhysicsObject a, PhysicsObject p) {
257            MessageDisplay.Add ("Löysit avaimen");
258            AseAani.Play();
259            a.Destroy();
260            keys.Remove(a);
261
262            // viesti "Sait avaimen"?
263        });
264    }
265
266    void LuoSalaOvi(Vector paikka, double leveys, double korkeus)
267    {
268       
269        PhysicsObject SalaOvi = new PhysicsObject (40, 40);
270        SalaOvi.Position = paikka;
271        SalaOvi.Color = Color.Brown;
272        SalaOvi.IgnoresCollisionResponse = true;
273        Add(SalaOvi);
274
275    }
276
277    void LiikutaPelaajaa(Vector vektori)
278    {
279        if (vektori == Vector.Zero)
280        {
281            pelaaja.Stop();
282            return;
283        }
284
285        pelaaja.Angle = vektori.Angle;
286        pelaaja.Push(vektori);
287    }
288
289    void LiikutaPelaajaaTatilla(AnalogState tatinTila)
290    {
291        if (tatinTila.StateVector == Vector.Zero)
292        {
293            pelaaja.Stop();
294            return;
295        }
296
297        pelaaja.Push(tatinTila.StateVector * 1000);
298    }
299
300    protected override void Update(Time time)
301    {
302        taskulamppu.Position = pelaaja.Position;
303        taskulamppu.Angle = pelaaja.Angle;
304        base.Update(time);
305    }
306
307    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
308    {
309        //ammus.Destroy();
310    }
311    void AmmuAseella()
312    {
313        if (pelaajanAse == null) return;
314
315        PhysicsObject ammus = pelaajanAse.Shoot();
316
317        if (ammus != null)
318        {
319            //ammus.Size *= 3;
320            ammus.Image = luodinKuva;
321            ammus.Size = new Vector(25 / 2.0, 8 / 2.0);
322            //ammus.MaximumLifetime = TimeSpan.FromSeconds(2.0);
323
324            AddCollisionHandler(ammus, delegate(PhysicsObject a, PhysicsObject b)
325            {
326                a.Destroy();
327
328                if (b.Tag.ToString() == "zombi")
329                {
330                    b.Destroy();
331                }
332            });
333           
334        }
335
336
337    }
338
339    void AmmuOhjaimella(AnalogState liipaisimenTila)
340    {
341        if (liipaisimenTila.State > 0.95) {
342        AmmuAseella();
343        }
344    }
345
346    void KäännäPelaajaaTatilla(AnalogState tatinTila)
347    { 
348        pelaaja.Angle = tatinTila.StateVector.Angle; 
349    }
350
351}
Note: See TracBrowser for help on using the repository browser.