source: 2014/27/NoelV/turhakepeli/turhakepeli/turhakepeli/turhakepeli.cs @ 5436

Revision 5436, 17.7 KB checked in by novaanan, 7 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 turhakepeli : PhysicsGame
10{
11
12    IntMeter vihollistenMaara = new IntMeter(0, 0, 0);
13    IntMeter ampumisLaskuri = new IntMeter(0, 0, 10);
14    PhysicsObject pelaaja;
15    PhysicsObject turhake;
16    Image hahmo = LoadImage("pelaaja");
17    Image valikonKuva = LoadImage("valikko");
18    Image hyokkauksenKuva = LoadImage("hyokkaus");
19    Image alaseina = LoadImage("ala");
20    Image sivuseina = LoadImage("sivu");
21    Image oikeayla = LoadImage("oikeaYla");
22    Image oikeaSeina = LoadImage("sivuOikea");
23    Image OikeaAla = LoadImage("oikeaAla");
24    Image VasenAla = LoadImage("vasenAla");
25    Image VasenYla = LoadImage("vasenYla");
26    Image hahmoHyokkaa = LoadImage("pelaajaHyokkaa");
27    Image kuollut = LoadImage("kuollut");
28    Image enkanKuva = LoadImage("enkka");
29
30    DoubleMeter enkkaLaskuri;
31    DoubleMeter energiaLaskuri;
32    const double TIILENLEVEYS = 20;
33    const double TIILENKORKEUS = 20;
34
35    private Image[] hahmonLiikeAlas = LoadImages("hahmo01", "hahmo02");
36    private Image[] hahmonLiikeYlos = LoadImages("hahmo01", "hahmo02");
37    private Image[] hahmonLiikeOikea = LoadImages("hahmo01", "hahmo02");
38    Image taustaKuva = LoadImage("maa");
39    Timer energianKasvattaja;
40
41    public override void Begin()
42    {
43
44        AloitaPeli();
45
46
47       
48    }
49
50
51    void LisaaOhjaimet()
52    {
53        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
54
55        Keyboard.Listen(Key.D, ButtonState.Down, HahmonAnimaatioOikea, null, hahmonLiikeOikea);
56        Keyboard.Listen(Key.D, ButtonState.Released, AnimaatioLopetus, null);
57
58        Keyboard.Listen(Key.A, ButtonState.Down, HahmonAnimaatioOikea, null, hahmonLiikeOikea);
59        Keyboard.Listen(Key.A, ButtonState.Released, AnimaatioLopetus, null);
60
61        Keyboard.Listen(Key.S, ButtonState.Down, HahmonAnimaatio, null, hahmonLiikeAlas);
62        Keyboard.Listen(Key.S, ButtonState.Released, AnimaatioLopetus, null);
63
64        Keyboard.Listen(Key.W, ButtonState.Down, HahmonAnimaatio, null, hahmonLiikeYlos);
65        Keyboard.Listen(Key.W, ButtonState.Released, AnimaatioLopetus, null);
66
67        Keyboard.Listen(Key.W, ButtonState.Down, Liiku, null, new Vector(0, 900));
68        Keyboard.Listen(Key.W, ButtonState.Released, Liiku, null, Vector.Zero);
69        Keyboard.Listen(Key.S, ButtonState.Down, Liiku, null, new Vector(0, -900));
70        Keyboard.Listen(Key.S, ButtonState.Released, Liiku, null, Vector.Zero);
71        Keyboard.Listen(Key.D, ButtonState.Down, Liiku, null, new Vector(900, 0));
72        Keyboard.Listen(Key.D, ButtonState.Released, Liiku, null, Vector.Zero);
73        Keyboard.Listen(Key.A, ButtonState.Down, Liiku, null, new Vector(-900, 0));
74        Keyboard.Listen(Key.A, ButtonState.Released, Liiku, null, Vector.Zero);
75        Keyboard.Listen(Key.Space, ButtonState.Pressed, Hyokkaa, null);
76        Keyboard.Listen(Key.LeftShift, ButtonState.Down, Lataa, null);
77        Keyboard.Listen(Key.LeftShift, ButtonState.Released, Ammu, null);
78
79
80        Keyboard.Listen(Key.Escape, ButtonState.Pressed, KysyPoistumista, "Lopeta peli");
81    }
82    void Ammu()
83    {
84
85    }
86    void Lataa()
87    {
88       
89        ampumisLaskuri.Value++;
90
91    }
92    void HahmonAnimaatioOikea(Image[] hahmonLiikeOikea)
93    {
94        if (pelaaja.Velocity != Vector.Zero) return;
95        pelaaja.Animation = new Animation(hahmonLiikeOikea);
96        pelaaja.Animation.FPS = 5;
97        pelaaja.Animation.Start();
98    }
99           
100
101    void Liiku(Vector vektori)
102    {
103        if (vektori == Vector.Zero)
104        {
105            int apu = 0;
106            int kierrokset = 4;
107            Timer pelaajanPysayttaja = new Timer();
108            pelaajanPysayttaja.Interval = 0.1;
109            pelaajanPysayttaja.Timeout += delegate 
110                {
111                    apu++;
112                    pelaaja.Velocity = pelaaja.Velocity / 2;
113                    if (apu == kierrokset) pelaaja.Velocity = Vector.Zero;
114                };
115            pelaajanPysayttaja.Start(kierrokset);
116           
117        }
118        else pelaaja.Push(vektori);
119    }
120    void KysyPoistumista()
121    {
122        IsPaused = true;
123        MultiSelectWindow valikko = new MultiSelectWindow("Pause", "back to game", "quit game");
124        valikko.AddItemHandler(1, Exit);
125        valikko.AddItemHandler(0, delegate { IsPaused = false; });
126        valikko.Color = Color.Black;
127        valikko.Color = Color.Transparent;
128        valikko.SelectionColor = Color.Black;
129        valikko.Image = valikonKuva;
130        Add(valikko);
131    }
132   
133
134    void LuoKentta()
135    {
136        //ClearAll();
137       
138        // TODO kuollessa kertaa zoomin ja tekee kaikkee
139        vihollistenMaara = new IntMeter(0, 0, 0);
140        vihollistenMaara.Value = 0;
141        vihollistenMaara.MaxValue = 0;
142        vihollistenMaara.MinValue = 0;
143        Level.Background.Image = taustaKuva;
144
145
146        pelaaja = new PhysicsObject(TIILENLEVEYS, TIILENKORKEUS);
147
148
149        //1. Luetaan kuva uuteen ColorTileMappiin, kuvan nimen perässä ei .png-päätettä.
150        ColorTileMap ruudut = ColorTileMap.FromLevelAsset(RandomGen.SelectOne("kentta", "kentta02", "kentta03"));
151
152        //2. Kerrotaan mitä aliohjelmaa kutsutaan, kun tietyn värinen pikseli tulee vastaan kuvatiedostossa.
153        ruudut.SetTileMethod(Color.Blue, LuoPelaaja);
154        ruudut.SetTileMethod(Color.Black, LuoSivuseina);
155        ruudut.SetTileMethod(Color.Red, LuoAlaseina);
156        ruudut.SetTileMethod(Color.White, LuoOikeaYla);
157        ruudut.SetTileMethod(Color.Yellow, LuoOikea);
158        ruudut.SetTileMethod(new Color(138, 138, 138), LuoOikeaAla);
159        ruudut.SetTileMethod(new Color(155, 0, 255), LuoVasenAla);
160        ruudut.SetTileMethod(new Color(255, 145, 0), LuoVasenYla);
161        ruudut.SetTileMethod(new Color(127, 0, 55), LuoVihollinen);
162        ruudut.SetTileMethod(new Color(255, 168, 255), LuoEnkka);
163        ruudut.SetTileMethod(new Color(0, 255, 255), LuoMana);
164
165
166
167        //3. Execute luo kentän
168        //   Parametreina leveys ja korkeus
169        ruudut.Execute(TIILENLEVEYS, TIILENKORKEUS);
170        Level.Background.TileToLevel();
171        vihollistenMaara.LowerLimit += KenttaLapi;
172       
173        energianKasvattaja = new Timer();
174        energianKasvattaja.Interval = 2.0;
175        energianKasvattaja.Timeout += delegate { energiaLaskuri.Value++; if (energiaLaskuri.Value >= 10) energianKasvattaja.Stop(); };
176       
177        LuoVihuNaytto();
178
179        //Timer vihunLuontiAjastin = new Timer();
180        //vihunLuontiAjastin.Interval = 1.0;
181        //vihunLuontiAjastin.Timeout += delegate { LuoVihollinen(new Vector(RandomGen.NextDouble(Level.Left+20, Level.Right-20), RandomGen.NextDouble (Level.Bottom+20, Level.Top-20)));};
182        //vihunLuontiAjastin.Start();
183
184    }
185
186    void LuoVihuNaytto()
187    {
188        Label pisteNaytto = new Label();
189        pisteNaytto.X = Screen.Left + 100;
190        pisteNaytto.Y = Screen.Top - 100;
191        pisteNaytto.TextColor = Color.Black;
192        pisteNaytto.Color = Color.White;
193
194        pisteNaytto.BindTo(vihollistenMaara);
195        Add(pisteNaytto);
196    }
197
198    void LuoAlaseina(Vector paikka, double leveys, double korkeus)
199    {
200        PhysicsObject ala = PhysicsObject.CreateStaticObject(leveys, korkeus);
201        ala.Position = paikka;
202        ala.CollisionIgnoreGroup = 1;
203        ala.Image = alaseina;
204        Add(ala);
205
206
207    }
208    void LuoVasenAla(Vector paikka, double leveys, double korkeus)
209    {
210        PhysicsObject vasenAla = PhysicsObject.CreateStaticObject(leveys, korkeus);
211        vasenAla.Position = paikka;
212        vasenAla.CollisionIgnoreGroup = 1;
213        vasenAla.Image = VasenAla;
214        Add(vasenAla);
215
216
217    }
218
219    void LuoVasenYla(Vector paikka, double leveys, double korkeus)
220    {
221        PhysicsObject vasenYla = PhysicsObject.CreateStaticObject(leveys, korkeus);
222        vasenYla.Position = paikka;
223        vasenYla.CollisionIgnoreGroup = 1;
224        vasenYla.Image = VasenYla;
225        Add(vasenYla);
226
227
228    }
229
230
231    void LuoOikeaAla(Vector paikka, double leveys, double korkeus)
232    {
233        PhysicsObject oikeaAla = PhysicsObject.CreateStaticObject(leveys, korkeus);
234        oikeaAla.Position = paikka;
235        oikeaAla.CollisionIgnoreGroup = 1;
236        oikeaAla.Image = OikeaAla;
237        Add(oikeaAla);
238
239
240    }
241
242    void LuoOikea(Vector paikka, double leveys, double korkeus)
243    {
244        PhysicsObject oikea = PhysicsObject.CreateStaticObject(leveys, korkeus);
245        oikea.Position = paikka;
246        oikea.CollisionIgnoreGroup = 1;
247        oikea.Image = oikeaSeina;
248        Add(oikea);
249
250       
251    }
252   
253
254
255    void LuoPelaaja(Vector paikka, double leveys, double korkeus)
256    {
257       
258        pelaaja.Image = hahmo;
259        pelaaja.Position = paikka;
260        pelaaja.CanRotate = false;
261        pelaaja.Restitution = 1;
262        pelaaja.MaxVelocity = 300;
263        pelaaja.LinearDamping = 0.9;
264        pelaaja.Shape = Shape.Circle;
265        Add(pelaaja);
266        AddCollisionHandler(pelaaja, "vihu", OsuuViholliseen);
267        AddCollisionHandler(pelaaja, "enkka", OsuuEnkkaan);
268        AddCollisionHandler(pelaaja, "mana", OsuuManaan);
269     
270    }
271
272
273    void LuoSivuseina(Vector paikka, double leveys, double korkeus)
274    {
275        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
276        taso.Position = paikka;
277        taso.CollisionIgnoreGroup = 1;
278        taso.Image = sivuseina;
279        Add(taso);
280    }
281    void LuoOikeaYla(Vector paikka, double leveys, double korkeus)
282    {
283         PhysicsObject ala = PhysicsObject.CreateStaticObject(leveys, korkeus);
284        ala.Position = paikka;
285        ala.CollisionIgnoreGroup = 1;
286        ala.Image = oikeayla;
287        Add(ala);
288
289    }
290
291
292    private void LuoVihollinen(Vector paikka, double leveys, double korkeus)
293    { 
294        Vihu vihollinen = new Vihu(leveys, korkeus);
295
296        vihollinen.ElamaLaskuri = new IntMeter(5, 0, 5);
297        vihollinen.Position = paikka;
298        Add(vihollinen);
299        vihollinen.CanRotate = false;
300        vihollinen.Restitution = 1.5;
301        vihollinen.Tag = "vihu";
302
303        //vihollinen.MoveTo(new Vector(RandomGen.NextDouble(Level.Left, Level.Right), Level.Bottom - 250), 500); //{ vihollisLaskuri.Value++; });
304        FollowerBrain seuraajanAivot = new FollowerBrain(pelaaja);
305        seuraajanAivot.Speed = 50.0;
306        seuraajanAivot.DistanceFar = 300;
307        seuraajanAivot.DistanceClose = 50;
308        seuraajanAivot.TurnWhileMoving = false;
309        seuraajanAivot.TargetClose += delegate
310        {
311            seuraajanAivot.Active = true;
312            vihollinen.Hit(new Vector(0, -5000));
313
314        };
315
316        vihollinen.Brain = seuraajanAivot;
317        vihollistenMaara.MaxValue++;
318        vihollistenMaara.Value = vihollistenMaara.MaxValue;
319
320        RandomMoverBrain kaukanaAivot = new RandomMoverBrain();
321        kaukanaAivot.Speed = 50.0;
322        kaukanaAivot.TurnWhileMoving = false;
323
324        seuraajanAivot.FarBrain = kaukanaAivot;
325       
326    }
327    void KenttaLapi()
328    {
329        //MessageDisplay.Add("Läpäisit kentän");
330        ClearAll();
331        vihollistenMaara.ClearTriggers();
332        AloitaPeli();
333    }
334    void Hyokkaa()
335    {
336     
337        PhysicsObject hyokkaus = new PhysicsObject(30, 30);
338        hyokkaus.Position = pelaaja.Position;
339        hyokkaus.Image = hyokkauksenKuva;
340        hyokkaus.CollisionIgnoreGroup = 1;
341        hyokkaus.Shape = Shape.Circle;
342
343
344   
345
346        if (energiaLaskuri.Value > 0)
347        {
348            energiaLaskuri.Value--;
349            Add(hyokkaus);
350            if (energiaLaskuri.Value < 10)
351            {
352               
353                if (!energianKasvattaja.Enabled)
354                {
355                 energianKasvattaja.Start();
356                }
357               
358            }
359        }
360
361        hyokkaus.CanRotate = false;
362        AxleJoint liitos = new AxleJoint(pelaaja, hyokkaus); 
363        Add(liitos);
364        pelaaja.Image = hahmoHyokkaa;
365        AddCollisionHandler(hyokkaus, "vihu", HyokkausOsuu);
366        //pelaaja.
367
368        Timer.SingleShot(0.5, delegate { 
369            hyokkaus.Destroy(); 
370            pelaaja.Image = hahmo; 
371            //if (pelaaja.Animation != null) pelaaja.Animation.Start();
372        });
373        //AddCollisionHandler(hyokkaus, "vihu", );
374
375    }
376
377
378    void HahmonAnimaatio(Image[] hahmonLiike)
379    {
380        if (pelaaja.Velocity != Vector.Zero) return;
381        pelaaja.Animation = new Animation(hahmonLiike);
382        pelaaja.Animation.FPS = 5;
383        pelaaja.Animation.Start();
384    }
385
386
387    void AnimaatioLopetus()
388    {
389        pelaaja.Animation.Stop();
390        pelaaja.Image = hahmo;
391    }
392    void HyokkausOsuu(PhysicsObject hyokkaus, PhysicsObject kohde)
393    {
394        if (kohde.Tag.Equals("vihu"))
395        {
396            OsuVihuun(kohde);
397           
398        }
399    }
400    private void OsuVihuun(PhysicsObject kohde)
401    {
402        //Explosion rajahdys = new Explosion(150);
403        //rajahdys.Position = kohde.Position;w
404        //rajahdys.ShockwaveColor = Color.Transparent;
405        //Add(rajahdys);
406        //(kohde as Vihu).
407       
408
409        (kohde as Vihu).ElamaLaskuri.Value--;
410        if ((kohde as Vihu).ElamaLaskuri.Value <= 0)
411        {
412            kohde.Destroy();
413            vihollistenMaara.Value--;
414        }
415    }
416
417    void LuoEnkkaLaskuri()
418    {
419       enkkaLaskuri = new DoubleMeter(10);
420       enkkaLaskuri.MaxValue = 10;
421       enkkaLaskuri.LowerLimit += ElamaLoppui;
422
423        ProgressBar elamaPalkki = new ProgressBar(150, 20);
424        elamaPalkki.X = Screen.Left + 150;
425        elamaPalkki.Y = Screen.Top - 20;
426        elamaPalkki.BindTo(enkkaLaskuri);
427        Add(elamaPalkki);
428    }
429
430    void ElamaLoppui()
431    {
432
433       
434        //IsPaused = true;
435        //pelaaja.Image = kuollut;
436        //MessageDisplay.Add("aodihb");
437        //Label teksti = new Label("GAME OVER!!!");
438       //teksti.TextScale = new Vector(3, 3);
439       //Add(teksti);
440       //teksti.Color = Color.Transparent;
441   
442        IsPaused = true;
443        MultiSelectWindow valikko = new MultiSelectWindow("Game Over", "Restart", "Quit Game");
444        valikko.AddItemHandler(1, Exit);
445        valikko.AddItemHandler(0, delegate { AloitaPeli(); });
446        valikko.Color = Color.Black;
447        valikko.Color = Color.Transparent;
448        valikko.SelectionColor = Color.Black;
449        valikko.Image = valikonKuva;
450        Add(valikko);
451   
452   
453       
454    }
455    void AloitaPeli()
456    {
457        ClearAll();
458        IsPaused = false;
459        Mouse.IsCursorVisible = false;
460     
461
462        Level.Background.Image = taustaKuva;
463        Level.Background.TileToLevel();
464        Camera.StayInLevel = true;
465
466
467        //GameObject taustaPilvet = new GameObject(10000, 10000);
468        // taustaPilvet.Image = taustaKuva;
469        //Add(taustaPilvet, -3);
470        //Layers[-3].RelativeTransition = new Vector(0.5, 0.5);
471
472
473
474        SmoothTextures = false;
475        Level.Background.Color = Color.Brown;
476
477        //hahmonLiike = LoadAnimation("hahmo");
478
479        LuoKentta();
480
481        LisaaOhjaimet();
482
483        LuoEnkkaLaskuri();
484
485        LuoEnergiaLaskuri();
486
487
488
489
490
491
492        Camera.Zoom(4);
493       
494
495        turhake = new PhysicsObject(10, 10);
496        turhake.Color = Color.Gray;
497        Add(turhake);
498        Camera.FollowedObject = pelaaja;
499    }
500
501
502
503     void OsuuViholliseen(PhysicsObject pelaaja, PhysicsObject vihu)
504    {
505       
506         if (vihu.Tag.Equals("vihu"))
507         {
508            enkkaLaskuri.Value--;
509         }
510     }
511     void LuoEnergiaLaskuri()
512     {
513        energiaLaskuri = new DoubleMeter(10);
514        energiaLaskuri.MaxValue = 10;
515        //energiaLaskuri.LowerLimit += ElamaLoppui;
516
517         ProgressBar energiaPalkki = new ProgressBar(150, 20);
518         energiaPalkki.X = Screen.Left + 150;
519         energiaPalkki.Y = Screen.Top - 50;
520         energiaPalkki.BindTo(energiaLaskuri);
521
522         energiaPalkki.BarColor = Color.Blue;
523   
524         Add(energiaPalkki);
525       
526     }
527     void LuoEnkka(Vector paikka, double leveys, double korkeus)
528     {
529        PhysicsObject enkka = new PhysicsObject(leveys, korkeus);
530        enkka.Position = paikka;
531        enkka.Image = enkanKuva;
532        enkka.IgnoresCollisionResponse = true;
533        enkka.IgnoresExplosions = true;
534        Add(enkka);
535        // Vector impulssi = new Vector(0.0, -500.0);
536        //enkka.Hit(impulssi);
537        enkka.Tag = "enkka";
538        enkka.CanRotate = false;
539      } 
540     void OsuuEnkkaan(PhysicsObject pelaaja, PhysicsObject enkka)
541     {
542         enkkaLaskuri.Value += 2;
543         enkka.Destroy();
544     }
545     void LuoMana(Vector paikka, double leveys, double korkeus)
546     {
547         PhysicsObject mana = new PhysicsObject(leveys, korkeus);
548         mana.Position = paikka;
549         //enkka.Image = enkanKuva;
550         mana.IgnoresCollisionResponse = true;
551         mana.IgnoresExplosions = true;
552         Add(mana);
553         // Vector impulssi = new Vector(0.0, -500.0);
554         //enkka.Hit(impulssi);
555         mana.Tag = "mana";
556         mana.CanRotate = false;
557     }
558     void OsuuManaan(PhysicsObject pelaaja, PhysicsObject mana)
559     {
560         energiaLaskuri.Value += 2;
561         mana.Destroy();
562     }
563
564   
565   
566
567}
568class Vihu : PhysicsObject
569{
570    private IntMeter elamaLaskuri = new IntMeter(3, 0, 3);
571    public IntMeter ElamaLaskuri { get { return elamaLaskuri; } set { elamaLaskuri = value; } }
572
573    public Vihu(double leveys, double korkeus)
574        : base(leveys, korkeus)
575    {
576        //elamaLaskuri.LowerLimit += delegate { this.Destroy(); };
577    }
578}
Note: See TracBrowser for help on using the repository browser.