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

Revision 5383, 15.4 KB checked in by novaanan, 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 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("menu", "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 kaikkee
125
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"));
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.Restitution = 1.5;
282        vihollinen.Tag = "vihu";
283
284        //vihollinen.MoveTo(new Vector(RandomGen.NextDouble(Level.Left, Level.Right), Level.Bottom - 250), 500); //{ vihollisLaskuri.Value++; });
285        FollowerBrain seuraajanAivot = new FollowerBrain(pelaaja);
286        seuraajanAivot.Speed = 50.0;
287        seuraajanAivot.DistanceClose = 200;
288        seuraajanAivot.TargetClose += delegate
289        {
290            seuraajanAivot.Active = true;
291            vihollinen.Hit(new Vector(0, -5000));
292
293        };
294
295        vihollinen.Brain = seuraajanAivot;
296        vihollistenMaara.MaxValue++;
297        vihollistenMaara.Value = vihollistenMaara.MaxValue;
298       
299    }
300    void KenttaLapi()
301    {
302        //MessageDisplay.Add("Läpäisit kentän");
303        ClearAll();
304        AloitaPeli();
305    }
306    void Hyokkaa()
307    {
308     
309        PhysicsObject hyokkaus = new PhysicsObject(30, 30);
310        hyokkaus.Position = pelaaja.Position;
311        hyokkaus.Image = hyokkauksenKuva;
312        hyokkaus.CollisionIgnoreGroup = 1;
313        hyokkaus.Shape = Shape.Circle;
314
315
316   
317
318        if (energiaLaskuri.Value > 0)
319        {
320            energiaLaskuri.Value--;
321            Add(hyokkaus);
322            if (energiaLaskuri.Value < 10)
323            {
324               
325                if (!energianKasvattaja.Enabled)
326                {
327                 energianKasvattaja.Start();
328                }
329               
330            }
331        }
332
333        hyokkaus.CanRotate = false;
334        AxleJoint liitos = new AxleJoint(pelaaja, hyokkaus); 
335        Add(liitos);
336        pelaaja.Image = hahmoHyokkaa;
337        AddCollisionHandler(hyokkaus, "vihu", HyokkausOsuu);
338        //pelaaja.
339
340        Timer.SingleShot(0.5, delegate { 
341            hyokkaus.Destroy(); 
342            pelaaja.Image = hahmo; 
343            //if (pelaaja.Animation != null) pelaaja.Animation.Start();
344        });
345        //AddCollisionHandler(hyokkaus, "vihu", );
346
347    }
348
349
350    void HahmonAnimaatio(Image[] hahmonLiike)
351    {
352        if (pelaaja.Velocity != Vector.Zero) return;
353        pelaaja.Animation = new Animation(hahmonLiike);
354        pelaaja.Animation.FPS = 5;
355        pelaaja.Animation.Start();
356    }
357
358
359    void AnimaatioLopetus()
360    {
361        pelaaja.Animation.Stop();
362        pelaaja.Image = hahmo;
363    }
364    void HyokkausOsuu(PhysicsObject hyokkaus, PhysicsObject kohde)
365    {
366        if (kohde.Tag.Equals("vihu"))
367        {
368            OsuVihuun(kohde);
369           
370        }
371    }
372    private void OsuVihuun(PhysicsObject kohde)
373    {
374        //Explosion rajahdys = new Explosion(150);
375        //rajahdys.Position = kohde.Position;
376        //rajahdys.ShockwaveColor = Color.Transparent;
377        //Add(rajahdys);
378       
379
380        (kohde as Vihu).ElamaLaskuri.Value--;
381        if ((kohde as Vihu).ElamaLaskuri.Value <= 0)
382        {
383            kohde.Destroy();
384            vihollistenMaara.Value--;
385        }
386    }
387
388    void LuoEnkkaLaskuri()
389    {
390       enkkaLaskuri = new DoubleMeter(10);
391       enkkaLaskuri.MaxValue = 10;
392       enkkaLaskuri.LowerLimit += ElamaLoppui;
393
394        ProgressBar elamaPalkki = new ProgressBar(150, 20);
395        elamaPalkki.X = Screen.Left + 150;
396        elamaPalkki.Y = Screen.Top - 20;
397        elamaPalkki.BindTo(enkkaLaskuri);
398        Add(elamaPalkki);
399    }
400
401    void ElamaLoppui()
402    {
403
404       
405        //IsPaused = true;
406        //pelaaja.Image = kuollut;
407        //MessageDisplay.Add("aodihb");
408        //Label teksti = new Label("GAME OVER!!!");
409       //teksti.TextScale = new Vector(3, 3);
410       //Add(teksti);
411       //teksti.Color = Color.Transparent;
412   
413        IsPaused = true;
414        MultiSelectWindow valikko = new MultiSelectWindow("Game Over", "Restart", "Quit Game");
415        valikko.AddItemHandler(1, Exit);
416        valikko.AddItemHandler(0, delegate { AloitaPeli(); });
417        valikko.Color = Color.Black;
418        valikko.Color = Color.Transparent;
419        valikko.SelectionColor = Color.Black;
420        valikko.Image = valikonKuva;
421        Add(valikko);
422   
423   
424       
425    }
426    void AloitaPeli()
427    {
428        ClearAll();
429        IsPaused = false;
430        Mouse.IsCursorVisible = false;
431     
432
433        Level.Background.Image = taustaKuva;
434        Level.Background.TileToLevel();
435        Camera.StayInLevel = true;
436
437
438        //GameObject taustaPilvet = new GameObject(10000, 10000);
439        // taustaPilvet.Image = taustaKuva;
440        //Add(taustaPilvet, -3);
441        //Layers[-3].RelativeTransition = new Vector(0.5, 0.5);
442
443
444
445        SmoothTextures = false;
446        Level.Background.Color = Color.Brown;
447
448        //hahmonLiike = LoadAnimation("hahmo");
449
450        LuoKentta();
451
452        LisaaOhjaimet();
453
454        LuoEnkkaLaskuri();
455
456        LuoEnergiaLaskuri();
457
458
459
460
461
462
463        Camera.Zoom(4);
464       
465
466        turhake = new PhysicsObject(10, 10);
467        turhake.Color = Color.Gray;
468        Add(turhake);
469        Camera.FollowedObject = pelaaja;
470    }
471
472
473
474     void OsuuViholliseen(PhysicsObject pelaaja, PhysicsObject vihu)
475    {
476       
477         if (vihu.Tag.Equals("vihu"))
478         {
479            enkkaLaskuri.Value--;
480         }
481     }
482     void LuoEnergiaLaskuri()
483     {
484        energiaLaskuri = new DoubleMeter(10);
485        energiaLaskuri.MaxValue = 10;
486        //energiaLaskuri.LowerLimit += ElamaLoppui;
487
488         ProgressBar energiaPalkki = new ProgressBar(150, 20);
489         energiaPalkki.X = Screen.Left + 150;
490         energiaPalkki.Y = Screen.Top - 50;
491         energiaPalkki.BindTo(energiaLaskuri);
492         energiaPalkki.Color = Color.Blue;
493   
494         Add(energiaPalkki);
495         energiaPalkki.Color = Color.Blue;
496     }
497   
498   
499
500}
501class Vihu : PhysicsObject
502{
503    private IntMeter elamaLaskuri = new IntMeter(3, 0, 3);
504    public IntMeter ElamaLaskuri { get { return elamaLaskuri; } set { elamaLaskuri = value; } }
505
506    public Vihu(double leveys, double korkeus)
507        : base(leveys, korkeus)
508    {
509        //elamaLaskuri.LowerLimit += delegate { this.Destroy(); };
510    }
511}
Note: See TracBrowser for help on using the repository browser.