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

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