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

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