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

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