source: 2017/27/VeetiK/CaveRun/CaveRun/CaveRun/CaveRun/CaveRun.cs @ 8892

Revision 8892, 15.0 KB checked in by npo17_35, 3 years ago (diff)

tein uuden aseen ja parantelin bugeja

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