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

Revision 5332, 12.8 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    PhysicsObject pelaaja;
12    Image hahmo = LoadImage("pelaaja");
13    Image valikonKuva = LoadImage("valikko");
14    Image hyokkauksenKuva = LoadImage("hyokkaus");
15    Image alaseina = LoadImage("ala");
16    Image sivuseina = LoadImage("sivu");
17    Image oikeayla = LoadImage("oikeaYla");
18    Image oikeaSeina = LoadImage("sivuOikea");
19    Image OikeaAla = LoadImage("oikeaAla");
20    Image VasenAla = LoadImage("vasenAla");
21    Image VasenYla = LoadImage("vasenYla");
22    Image hahmoHyokkaa = LoadImage("pelaajaHyokkaa");
23
24    DoubleMeter enkkaLaskuri;
25    DoubleMeter EnergiaLaskuri;
26
27
28    private Image[] hahmonLiikeAlas = LoadImages("hahmo01", "hahmo02");
29    private Image[] hahmonLiikeYlos = LoadImages("hahmo01", "hahmo02");
30    private Image[] hahmonLiikeOikea = LoadImages("hahmo01", "hahmo02");
31    Image taustaKuva = LoadImage("maa");
32     
33
34    public override void Begin()
35    {
36
37        Level.Background.Image = taustaKuva;
38        Level.Background.TileToLevel();
39
40
41
42        //GameObject taustaPilvet = new GameObject(10000, 10000);
43       // taustaPilvet.Image = taustaKuva;
44        //Add(taustaPilvet, -3);
45        //Layers[-3].RelativeTransition = new Vector(0.5, 0.5);
46
47     
48
49        SmoothTextures = false;
50        Level.Background.Color = Color.Brown;
51
52        //hahmonLiike = LoadAnimation("hahmo");
53
54        LuoKentta();
55       
56        LisaaOhjaimet();
57
58        LuoEnkkaLaskuri();
59
60        LuoEnergiaLaskuri();
61
62     
63       
64
65
66        Camera.Zoom(4);
67        Camera.FollowedObject = pelaaja;
68
69        PhysicsObject turhake = new PhysicsObject(10, 10);
70        turhake.Color = Color.Gray;
71        Add(turhake);
72
73
74       
75    }
76
77
78    void LisaaOhjaimet()
79    {
80        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
81
82        Keyboard.Listen(Key.D, ButtonState.Down, HahmonAnimaatioOikea, null, hahmonLiikeOikea);
83        Keyboard.Listen(Key.D, ButtonState.Released, AnimaatioLopetus, null);
84
85        Keyboard.Listen(Key.A, ButtonState.Down, HahmonAnimaatioOikea, null, hahmonLiikeOikea);
86        Keyboard.Listen(Key.A, ButtonState.Released, AnimaatioLopetus, null);
87
88        Keyboard.Listen(Key.S, ButtonState.Down, HahmonAnimaatio, null, hahmonLiikeAlas);
89        Keyboard.Listen(Key.S, ButtonState.Released, AnimaatioLopetus, null);
90
91        Keyboard.Listen(Key.W, ButtonState.Down, HahmonAnimaatio, null, hahmonLiikeYlos);
92        Keyboard.Listen(Key.W, ButtonState.Released, AnimaatioLopetus, null);
93
94        Keyboard.Listen(Key.W, ButtonState.Down, Liiku, null, new Vector(0, 900));
95        Keyboard.Listen(Key.W, ButtonState.Released, Liiku, null, Vector.Zero);
96        Keyboard.Listen(Key.S, ButtonState.Down, Liiku, null, new Vector(0, -900));
97        Keyboard.Listen(Key.S, ButtonState.Released, Liiku, null, Vector.Zero);
98        Keyboard.Listen(Key.D, ButtonState.Down, Liiku, null, new Vector(900, 0));
99        Keyboard.Listen(Key.D, ButtonState.Released, Liiku, null, Vector.Zero);
100        Keyboard.Listen(Key.A, ButtonState.Down, Liiku, null, new Vector(-900, 0));
101        Keyboard.Listen(Key.A, ButtonState.Released, Liiku, null, Vector.Zero);
102        Keyboard.Listen(Key.Space, ButtonState.Pressed, Hyokkaa, null);
103
104        Keyboard.Listen(Key.Escape, ButtonState.Pressed, KysyPoistumista, "Lopeta peli");
105    }
106    void HahmonAnimaatioOikea(Image[] hahmonLiikeOikea)
107    {
108        if (pelaaja.Velocity != Vector.Zero) return;
109        pelaaja.Animation = new Animation(hahmonLiikeOikea);
110        pelaaja.Animation.FPS = 5;
111        pelaaja.Animation.Start();
112    }
113           
114
115    void Liiku(Vector vektori)
116    {
117        if (vektori == Vector.Zero)
118        {
119            int apu = 0;
120            int kierrokset = 4;
121            Timer pelaajanPysayttaja = new Timer();
122            pelaajanPysayttaja.Interval = 0.1;
123            pelaajanPysayttaja.Timeout += delegate 
124                {
125                    apu++;
126                    pelaaja.Velocity = pelaaja.Velocity / 2;
127                    if (apu == kierrokset) pelaaja.Velocity = Vector.Zero;
128                };
129            pelaajanPysayttaja.Start(kierrokset);
130           
131        }
132        else pelaaja.Push(vektori);
133    }
134    void KysyPoistumista()
135    {
136        IsPaused = true;
137        MultiSelectWindow valikko = new MultiSelectWindow("menu", "back to game", "quit game");
138        valikko.AddItemHandler(1, Exit);
139        valikko.AddItemHandler(0, delegate { IsPaused = false; });
140        valikko.Color = Color.Black;
141        valikko.Color = Color.Transparent;
142        valikko.SelectionColor = Color.Black;
143        valikko.Image = valikonKuva;
144        Add(valikko);
145    }
146   
147
148    void LuoKentta()
149    {
150        Image taustaKuva = LoadImage("kuvanNimi");
151        Level.Background.TileToLevel();
152
153        //1. Luetaan kuva uuteen ColorTileMappiin, kuvan nimen perässä ei .png-päätettä.
154        ColorTileMap ruudut = ColorTileMap.FromLevelAsset("kentta");
155
156        //2. Kerrotaan mitä aliohjelmaa kutsutaan, kun tietyn värinen pikseli tulee vastaan kuvatiedostossa.
157        ruudut.SetTileMethod(Color.Blue, LuoPelaaja);
158        ruudut.SetTileMethod(Color.Black, LuoSivuseina);
159        ruudut.SetTileMethod(Color.Red, LuoAlaseina);
160        ruudut.SetTileMethod(Color.White, LuoOikeaYla);
161        ruudut.SetTileMethod(Color.Yellow, LuoOikea);
162        ruudut.SetTileMethod(new Color(138, 138, 138), LuoOikeaAla);
163        ruudut.SetTileMethod(new Color(155, 0, 255), LuoVasenAla);
164        ruudut.SetTileMethod(new Color(255, 145, 0), LuoVasenYla);
165
166
167        //3. Execute luo kentän
168        //   Parametreina leveys ja korkeus
169        ruudut.Execute(20, 20);
170
171
172
173        Timer vihunLuontiAjastin = new Timer();
174        vihunLuontiAjastin.Interval = 10.0;
175        vihunLuontiAjastin.Timeout += delegate { LuoVihollinen(new Vector(RandomGen.NextDouble(Level.Left, Level.Right), Level.Top)); };
176        vihunLuontiAjastin.Start();
177
178    }
179    void LuoAlaseina(Vector paikka, double leveys, double korkeus)
180    {
181        PhysicsObject ala = PhysicsObject.CreateStaticObject(leveys, korkeus);
182        ala.Position = paikka;
183        ala.CollisionIgnoreGroup = 1;
184        ala.Image = alaseina;
185        Add(ala);
186
187
188    }
189    void LuoVasenAla(Vector paikka, double leveys, double korkeus)
190    {
191        PhysicsObject vasenAla = PhysicsObject.CreateStaticObject(leveys, korkeus);
192        vasenAla.Position = paikka;
193        vasenAla.CollisionIgnoreGroup = 1;
194        vasenAla.Image = VasenAla;
195        Add(vasenAla);
196
197
198    }
199
200    void LuoVasenYla(Vector paikka, double leveys, double korkeus)
201    {
202        PhysicsObject vasenYla = PhysicsObject.CreateStaticObject(leveys, korkeus);
203        vasenYla.Position = paikka;
204        vasenYla.CollisionIgnoreGroup = 1;
205        vasenYla.Image = VasenYla;
206        Add(vasenYla);
207
208
209    }
210
211
212    void LuoOikeaAla(Vector paikka, double leveys, double korkeus)
213    {
214        PhysicsObject oikeaAla = PhysicsObject.CreateStaticObject(leveys, korkeus);
215        oikeaAla.Position = paikka;
216        oikeaAla.CollisionIgnoreGroup = 1;
217        oikeaAla.Image = OikeaAla;
218        Add(oikeaAla);
219
220
221    }
222
223    void LuoOikea(Vector paikka, double leveys, double korkeus)
224    {
225        PhysicsObject oikea = PhysicsObject.CreateStaticObject(leveys, korkeus);
226        oikea.Position = paikka;
227        oikea.CollisionIgnoreGroup = 1;
228        oikea.Image = oikeaSeina;
229        Add(oikea);
230
231
232    }
233   
234
235
236    void LuoPelaaja(Vector paikka, double leveys, double korkeus)
237    {
238        pelaaja = new PhysicsObject(leveys, korkeus);
239        pelaaja.Image = hahmo;
240        pelaaja.Position = paikka;
241        pelaaja.CanRotate = false;
242        pelaaja.Restitution = 1;
243        pelaaja.MaxVelocity = 300;
244        pelaaja.LinearDamping = 0.9;
245        pelaaja.Shape = Shape.Circle;
246        Add(pelaaja);
247        AddCollisionHandler(pelaaja, "vihu", OsuuViholliseen);
248     
249    }
250
251
252    void LuoSivuseina(Vector paikka, double leveys, double korkeus)
253    {
254        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
255        taso.Position = paikka;
256        taso.CollisionIgnoreGroup = 1;
257        taso.Image = sivuseina;
258        Add(taso);
259    }
260    void LuoOikeaYla(Vector paikka, double leveys, double korkeus)
261    {
262         PhysicsObject ala = PhysicsObject.CreateStaticObject(leveys, korkeus);
263        ala.Position = paikka;
264        ala.CollisionIgnoreGroup = 1;
265        ala.Image = oikeayla;
266        Add(ala);
267
268    }
269
270
271    private void LuoVihollinen(Vector vektori)
272    {
273        Vihu vihollinen = new Vihu(20, 20);
274
275        vihollinen.ElamaLaskuri = new IntMeter(5, 0, 5);
276
277        Add(vihollinen);
278        vihollinen.Restitution = 1.5;
279        vihollinen.Tag = "vihu";
280
281        //vihollinen.MoveTo(new Vector(RandomGen.NextDouble(Level.Left, Level.Right), Level.Bottom - 250), 500); //{ vihollisLaskuri.Value++; });
282        FollowerBrain seuraajanAivot = new FollowerBrain(pelaaja);
283        seuraajanAivot.Speed = 50.0;
284        seuraajanAivot.DistanceClose = 200;
285        seuraajanAivot.TargetClose += delegate
286        {
287            seuraajanAivot.Active = true;
288            vihollinen.Hit(new Vector(0, -5000));
289
290        };
291
292        vihollinen.Brain = seuraajanAivot;
293
294    }
295    void Hyokkaa()
296    {
297     
298        PhysicsObject hyokkaus = new PhysicsObject(30, 30);
299        hyokkaus.Position = pelaaja.Position;
300        hyokkaus.Image = hyokkauksenKuva;
301        hyokkaus.CollisionIgnoreGroup = 1;
302        hyokkaus.Shape = Shape.Circle;
303
304
305        Add(hyokkaus);
306        hyokkaus.CanRotate = false;
307        AxleJoint liitos = new AxleJoint(pelaaja, hyokkaus); 
308        Add(liitos);
309        pelaaja.Image = hahmoHyokkaa;
310        AddCollisionHandler(hyokkaus, "vihu", HyokkausOsuu);
311        //pelaaja.
312
313        Timer.SingleShot(0.5, delegate { 
314            hyokkaus.Destroy(); 
315            pelaaja.Image = hahmo; 
316            //if (pelaaja.Animation != null) pelaaja.Animation.Start();
317        });
318        //AddCollisionHandler(hyokkaus, "vihu", );
319
320    }
321
322
323    void HahmonAnimaatio(Image[] hahmonLiike)
324    {
325        if (pelaaja.Velocity != Vector.Zero) return;
326        pelaaja.Animation = new Animation(hahmonLiike);
327        pelaaja.Animation.FPS = 5;
328        pelaaja.Animation.Start();
329    }
330
331
332    void AnimaatioLopetus()
333    {
334        pelaaja.Animation.Stop();
335        pelaaja.Image = hahmo;
336    }
337    void HyokkausOsuu(PhysicsObject hyokkaus, PhysicsObject kohde)
338    {
339        if (kohde.Tag.Equals("vihu"))
340        {
341            TuhoaVihu(kohde);
342        }
343    }
344    private void TuhoaVihu(PhysicsObject kohde)
345    {
346        //Explosion rajahdys = new Explosion(150);
347        //rajahdys.Position = kohde.Position;
348        //rajahdys.ShockwaveColor = Color.Transparent;
349        //Add(rajahdys);
350       
351
352        (kohde as Vihu).ElamaLaskuri.Value--;
353        if ((kohde as Vihu).ElamaLaskuri.Value <= 0) kohde.Destroy();
354    }
355
356    void LuoEnkkaLaskuri()
357    {
358       enkkaLaskuri = new DoubleMeter(10);
359       enkkaLaskuri.MaxValue = 10;
360       enkkaLaskuri.LowerLimit += ElamaLoppui;
361
362        ProgressBar elamaPalkki = new ProgressBar(150, 20);
363        elamaPalkki.X = Screen.Left + 150;
364        elamaPalkki.Y = Screen.Top - 20;
365        elamaPalkki.BindTo(enkkaLaskuri);
366        Add(elamaPalkki);
367    }
368
369    void ElamaLoppui()
370    {
371
372        Explosion rajahdys = new Explosion(50);
373
374        rajahdys.Position = pelaaja.Position;
375        Add(rajahdys);
376        IsPaused = true;
377
378        pelaaja.Destroy();
379        MessageDisplay.Add("Hävisit pelin");
380
381        Label teksti = new Label("PELI LOPPUI!!!");
382        teksti.TextScale = new Vector(3, 3);
383        Add(teksti);
384        teksti.Color = Color.Red;
385
386       
387    }
388     void OsuuViholliseen(PhysicsObject pelaaja, PhysicsObject vihu)
389    {
390       
391         if (vihu.Tag.Equals("vihu"))
392         {
393            enkkaLaskuri.Value--;
394         }
395     }
396     void LuoEnergiaLaskuri()
397     {
398        EnergiaLaskuri = new DoubleMeter(10);
399        EnergiaLaskuri.MaxValue = 10;
400        EnergiaLaskuri.LowerLimit += ElamaLoppui;
401
402         ProgressBar energiaPalkki = new ProgressBar(150, 20);
403         energiaPalkki.X = Screen.Left + 150;
404         energiaPalkki.Y = Screen.Top - 10;
405         energiaPalkki.BindTo(EnergiaLaskuri);
406         Add(energiaPalkki);
407     }
408   
409   
410
411}
412class Vihu : PhysicsObject
413{
414    private IntMeter elamaLaskuri = new IntMeter(3, 0, 3);
415    public IntMeter ElamaLaskuri { get { return elamaLaskuri; } set { elamaLaskuri = value; } }
416
417    public Vihu(double leveys, double korkeus)
418        : base(leveys, korkeus)
419    {
420        elamaLaskuri.LowerLimit += delegate { this.Destroy(); };
421    }
422}
Note: See TracBrowser for help on using the repository browser.