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

Revision 6826, 37.4 KB checked in by novaanan, 6 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    int kenttaNro = 1;
13    IntMeter vihollistenMaara = new IntMeter(0, 0, 0);
14    IntMeter ampumisLaskuri = new IntMeter(0, 0, 10);
15    PhysicsObject pelaaja;
16    PhysicsObject turhake;
17    PhysicsObject muuri;
18    Image pullo2 = LoadImage("pullo2");
19    Image hahmo = LoadImage("pelaaja");
20    Image valikonKuva = LoadImage("valikko");
21    Image hyokkauksenKuva = LoadImage("hyokkaus");
22    Image alaseina = LoadImage("ala");
23    Image sivuseina = LoadImage("sivu");
24    Image OikeaYla = LoadImage("oikeaYla");
25    Image oikeaSeina = LoadImage("sivuOikea");
26    Image OikeaAla = LoadImage("oikeaAla");
27    Image VasenAla = LoadImage("vasenAla");
28    Image VasenYla = LoadImage("vasenYla");
29    Image hahmoHyokkaa = LoadImage("pelaajaHyokkaa");
30    Image kuollut = LoadImage("kuollut");
31    Image enkanKuva = LoadImage("enkka");
32    Image pullo = LoadImage("pullo");
33    Image Laatikko = LoadImage("laatikko");
34    Image Laatikko2 = LoadImage("laatikko2");
35    Image Laatikko3 = LoadImage("laatikko3");
36    Image Laatikko4 = LoadImage("laatikko4");
37    Image Laatikko5 = LoadImage("laatikko5");
38    Image Miekka = LoadImage("miekka");
39    Image ylempiOikeaYla = LoadImage("YlempiOikeaYla");
40    Image ylempiVasenYla = LoadImage("YlempiVasenYla");
41    Image ylempiOikeaAla = LoadImage("YlempiOikeaAla");
42    Image ylempiVasenAla = LoadImage("YlempiVasenAla");
43    Image ylempiKeski = LoadImage("YlempiKeski");
44    Image sarvikypara = LoadImage("sarvikypara");
45    Image PatsasYla = LoadImage("PatsasYla");
46    Image PatsasAla = LoadImage("PatsasAla");
47
48
49
50    DoubleMeter enkkaLaskuri;
51    DoubleMeter energiaLaskuri;
52    const double TIILENLEVEYS = 60;
53    const double TIILENKORKEUS = 60;
54
55
56
57    int animaatioKaynnissa = 0;
58    private Image[] hahmonLiikeYlos = LoadImages("pelaajaTakaa01", "pelaajaTakaa02");
59    private Image[] hahmonLiikeAlas = LoadImages("hahmo01", "hahmo02");
60    private Image[] hahmonLiikeOikea = LoadImages("pelaajaOikea", "pelaajaOikea01","pelaajaOikea" ,"pelaajaOikea02");
61    private Image[] hahmonLiikeVasen = LoadImages("pelaajaVasen", "pelaajaVasen01", "pelaajaVasen", "pelaajaVasen02");
62
63
64    Image taustaKuva = LoadImage("maa");
65    Timer energianKasvattaja;
66
67    public override void Begin()
68    {
69        //SetWindowSize(1900, 1060, false);
70        IsFullScreen = true;
71        AloitaPeli();
72       
73        //Level.Size = Screen.Size;
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, HahmonAnimaatioVasen, null, hahmonLiikeVasen);
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, HahmonAnimaatioYlos, null, hahmonLiikeYlos);
92        //Keyboard.Listen(Key.W, ButtonState.Released, AnimaatioLopetus, null);
93
94        Keyboard.Listen(Key.W, ButtonState.Down, HahmonAnimaatio, null, 3);
95        //Keyboard.Listen(Key.W, ButtonState.Released, AnimaatioLopetus, null, 3);
96        Keyboard.Listen(Key.A, ButtonState.Down, HahmonAnimaatio, null, 2);
97        //Keyboard.Listen(Key.A, ButtonState.Released, AnimaatioLopetus, null, 2);
98        Keyboard.Listen(Key.S, ButtonState.Down, HahmonAnimaatio, null, 4);
99        //Keyboard.Listen(Key.S, ButtonState.Released, AnimaatioLopetus, null, 4);
100        Keyboard.Listen(Key.D, ButtonState.Down, HahmonAnimaatio, null, 1);
101        //Keyboard.Listen(Key.D, ButtonState.Released, AnimaatioLopetus, null, 1);
102       
103        //Keyboard.Listen(Key.W, ButtonState.Released, AnimaatioLopetus, null);
104
105        Keyboard.Listen(Key.W, ButtonState.Down, Liiku, null, new Vector(0, 800));
106        //Keyboard.Listen(Key.W, ButtonState.Released, Liiku, null, Vector.Zero);
107        Keyboard.Listen(Key.S, ButtonState.Down, Liiku, null, new Vector(0, -800));
108        //Keyboard.Listen(Key.S, ButtonState.Released, Liiku, null, Vector.Zero);
109        Keyboard.Listen(Key.D, ButtonState.Down, Liiku, null, new Vector(800, 0));
110        Keyboard.Listen(Key.D, ButtonState.Released, Liiku, null, Vector.Zero);
111        Keyboard.Listen(Key.A, ButtonState.Down, Liiku, null, new Vector(-800, 0));
112        Keyboard.Listen(Key.A, ButtonState.Released, Liiku, null, Vector.Zero);
113        Keyboard.Listen(Key.Space, ButtonState.Pressed, Hyokkaa, null);
114        Keyboard.Listen(Key.LeftShift, ButtonState.Down, Lataa, null);
115        Keyboard.Listen(Key.LeftShift, ButtonState.Released, Ammu, null);
116
117
118        Keyboard.Listen(Key.Escape, ButtonState.Pressed, KysyPoistumista, "Lopeta peli");
119    }
120    void Ammu()
121    {
122
123    }
124    void Lataa()
125    {
126       
127        ampumisLaskuri.Value++;
128
129    }
130
131    void HahmonAnimaatio(int suunta)
132    {
133        //if (animaatioKaynnissa != 0)
134        //{
135           // if (animaatioKaynnissa == suunta)
136               // return;
137        //}
138        switch (suunta)
139        {
140            case 1:
141                pelaaja.Animation = new Animation(hahmonLiikeOikea);
142                animaatioKaynnissa = 1;
143                break;
144            case 2:
145                pelaaja.Animation = new Animation(hahmonLiikeVasen);
146                animaatioKaynnissa = 2;
147                break;
148            case 3:
149                pelaaja.Animation = new Animation(hahmonLiikeYlos);
150                animaatioKaynnissa = 3;
151                break;
152            case 4:
153                pelaaja.Animation = new Animation(hahmonLiikeAlas);
154                animaatioKaynnissa = 4;
155                break;
156            default:
157                break;
158        }
159        pelaaja.Animation.FPS = 5;
160        pelaaja.Animation.Start();
161    }
162
163    void HahmonAnimaatioOikea(Image[] hahmonLiikeOikea)
164    {
165        if (pelaaja.Velocity != Vector.Zero) return;
166        pelaaja.Animation = new Animation(hahmonLiikeOikea);
167        pelaaja.Animation.FPS = 5;
168        pelaaja.Animation.Start();
169    }
170
171    void HahmonAnimaatioVasen(Image[] hahmonLiikeVasen)
172    {
173        if (pelaaja.Velocity != Vector.Zero) return;
174        pelaaja.Animation = new Animation(hahmonLiikeVasen);
175        pelaaja.Animation.FPS = 5;
176        pelaaja.Animation.Start();
177    }
178
179    void Liiku(Vector vektori)
180    {   
181        if (vektori == Vector.Zero)
182        {
183            pelaaja.Velocity = Vector.Zero;
184           // int apu = 1;
185           // int kierrokset = 1;
186           // Timer pelaajanPysayttaja = new Timer();
187           // pelaajanPysayttaja.Interval = 0.1;
188           // pelaajanPysayttaja.Timeout += delegate
189           //     {
190           //         apu++;
191           //         pelaaja.Velocity = pelaaja.Velocity / 100;
192           //         if (apu == kierrokset) pelaaja.Velocity = Vector.Zero;
193           //     };
194           // pelaajanPysayttaja.Start(kierrokset);
195           
196        }
197        pelaaja.Push(vektori);
198    }
199    void KysyPoistumista()
200    {
201        IsPaused = true;
202        MultiSelectWindow valikko = new MultiSelectWindow("Pause", "back to game", "quit game");
203        valikko.AddItemHandler(1, Exit);
204        valikko.AddItemHandler(0, delegate { IsPaused = false; });
205        //valikko.Color = Color.Black;
206        valikko.Color = Color.Transparent;
207        valikko.SelectionColor = Color.Black;
208        valikko.Image = valikonKuva;
209        valikko.X = 250;
210        valikko.Y = 150;
211        Add(valikko);
212    }
213    void SeuraavaKentta()
214    {
215
216    }
217
218    void LuoKentta(string kenttaTiedostonNimi)
219    {
220        //ClearAll();
221
222       
223        vihollistenMaara = new IntMeter(0, 0, 0);
224        vihollistenMaara.Value = 0;
225        vihollistenMaara.MaxValue = 0;
226        vihollistenMaara.MinValue = 0;
227        Level.Background.Image = taustaKuva;
228
229
230        pelaaja = new PhysicsObject(TIILENLEVEYS, TIILENKORKEUS);
231
232
233        ColorTileMap ruudut = ColorTileMap.FromLevelAsset(kenttaTiedostonNimi);
234
235
236
237        //
238
239
240        //if (kenttaNro == 1) LuoKentta("kentta1");
241        //else if (kenttaNro == 2) LuoKentta("kentta2");
242        //else if (kenttaNro == 3) LuoKentta("kentta3");
243        //else if (kenttaNro > 3) Exit();
244
245       
246
247        //
248
249
250        //ColorTileMap ruudut = ColorTileMap.FromLevelAsset(RandomGen.SelectOne(
251        //    //"kentta",
252        //    "kentta02",
253        //    //"kentta03",
254        //    //"kentta04",
255        //    "kentta05"
256        //    ));
257
258        //2. Kerrotaan mitä aliohjelmaa kutsutaan, kun tietyn värinen pikseli tulee vastaan kuvatiedostossa.
259        ruudut.SetTileMethod(Color.Blue, LuoPelaaja);
260        ruudut.SetTileMethod(Color.Black, LuoSivuseina);
261        ruudut.SetTileMethod(Color.Red, LuoAlaseina);
262        ruudut.SetTileMethod(Color.White, LuoOikeaYla);
263        ruudut.SetTileMethod(Color.Yellow, LuoOikea);
264        ruudut.SetTileMethod(new Color(138, 138, 138), LuoOikeaAla);
265        ruudut.SetTileMethod(new Color(155, 0, 255), LuoVasenAla);
266        ruudut.SetTileMethod(new Color(255, 145, 0), LuoVasenYla);
267        ruudut.SetTileMethod(new Color(127, 0, 55), LuoVihollinen);
268        ruudut.SetTileMethod(new Color(255, 168, 255), LuoEnkka);
269        ruudut.SetTileMethod(new Color(0, 255, 255), LuoMana);
270        ruudut.SetTileMethod(new Color(63, 0, 63), LuoLaatikko);
271        ruudut.SetTileMethod(new Color(255, 222, 0), LuoPortti);
272        ruudut.SetTileMethod(new Color(100, 155, 0), LuoKytkin);
273        ruudut.SetTileMethod(new Color( 10, 30, 50), LuoPotionLaatikko);
274        ruudut.SetTileMethod(new Color(90, 200, 90), LuoManaLaatikko);
275        ruudut.SetTileMethod(new Color(250, 250, 0), LuoMiekka);
276        ruudut.SetTileMethod(new Color(214, 218, 255), LuoYlempiOikeaYla);
277        ruudut.SetTileMethod(new Color(255, 191, 0), LuoYlempiVasenYla);
278        ruudut.SetTileMethod(new Color(153, 170, 153), LuoYlempiOikeaAla);
279        ruudut.SetTileMethod(new Color(155, 91, 255), LuoYlempiVasenAla);
280        ruudut.SetTileMethod(new Color(165, 0, 0), LuoYlempiKeski);
281        ruudut.SetTileMethod(new Color(161, 161, 64), LuoKypara);
282        ruudut.SetTileMethod(new Color(129, 50, 62), LuoPatsaanVartalo);
283        ruudut.SetTileMethod(new Color(99, 39, 48), LuoPatsaanJalat);
284
285
286
287        //3. Execute luo kentän
288        //   Parametreina leveys ja korkeus
289        ruudut.Execute(TIILENLEVEYS, TIILENKORKEUS);
290        Level.Background.TileToLevel();
291        vihollistenMaara.LowerLimit += KenttaLapi;
292       
293        energianKasvattaja = new Timer();
294        energianKasvattaja.Interval = 1.5;
295        energianKasvattaja.Timeout += delegate { energiaLaskuri.Value++; if (energiaLaskuri.Value >= 10) energianKasvattaja.Stop(); };
296       
297      LuoVihuNaytto();
298
299     //Timer vihunLuontiAjastin = new Timer();
300     //vihunLuontiAjastin.Interval = 1.0;
301     //vihunLuontiAjastin.Timeout += delegate { LuoVihollinen(new Vector(RandomGen.NextDouble(Level.Left+20, Level.Right-20), RandomGen.NextDouble (Level.Bottom+20, Level.Top-20)));};
302     //vihunLuontiAjastin.Start();
303
304    }
305    void LuoKypara(Vector paikka, double leveys, double korkeus)
306    {
307        PhysicsObject kypara = new PhysicsObject(leveys, korkeus);
308        kypara.Image = sarvikypara;
309        kypara.Position = paikka;
310        kypara.IgnoresCollisionResponse = true;
311        Add(kypara, 1);
312    }
313    void LuoPatsaanVartalo(Vector paikka, double leveys, double korkeus)
314    {
315        PhysicsObject PatsaanVartalo = new PhysicsObject(leveys, korkeus);
316        PatsaanVartalo.Position = paikka;
317        PatsaanVartalo.IgnoresCollisionResponse = true;
318        PatsaanVartalo.Image = PatsasYla;
319        Add(PatsaanVartalo, 3);
320    }
321    void LuoPatsaanJalat(Vector paikka, double leveys, double korkeus)
322    {
323        PhysicsObject PatsaanJalat = PhysicsObject.CreateStaticObject(leveys, korkeus);
324        PatsaanJalat.Position = paikka;
325        PatsaanJalat.IgnoresCollisionResponse = false;
326        PatsaanJalat.Image = PatsasAla;
327        PatsaanJalat.Shape = Shape.Circle;
328        Add(PatsaanJalat, 1);
329    }
330
331  void LuoVihuNaytto()
332  {
333      Label pisteNaytto = new Label();
334      pisteNaytto.X = Screen.Left + 150;
335      pisteNaytto.Y = Screen.Top - 150;
336      pisteNaytto.TextColor = Color.Orange;
337      pisteNaytto.Color = Color.Transparent;
338
339      pisteNaytto.BindTo(vihollistenMaara);
340      Add(pisteNaytto);
341  }
342
343    void LuoAlaseina(Vector paikka, double leveys, double korkeus)
344    {
345        PhysicsObject ala = PhysicsObject.CreateStaticObject(leveys, korkeus);
346        ala.Position = paikka;
347        ala.CollisionIgnoreGroup = 1;
348        ala.Image = alaseina;
349        Add(ala);
350
351
352    }
353    void LuoVasenAla(Vector paikka, double leveys, double korkeus)
354    {
355        PhysicsObject vasenAla = PhysicsObject.CreateStaticObject(leveys, korkeus);
356        vasenAla.Position = paikka;
357        vasenAla.CollisionIgnoreGroup = 1;
358        vasenAla.Image = VasenAla;
359        Add(vasenAla);
360
361
362    }
363
364    void LuoVasenYla(Vector paikka, double leveys, double korkeus)
365    {
366        PhysicsObject vasenYla = PhysicsObject.CreateStaticObject(leveys, korkeus);
367        vasenYla.Position = paikka;
368        vasenYla.CollisionIgnoreGroup = 1;
369        vasenYla.Image = VasenYla;
370        Add(vasenYla);
371
372
373    }
374    void LuoYlempiOikeaYla(Vector paikka, double leveys, double korkeus)
375    {
376        PhysicsObject YlempiOikeaYla = PhysicsObject.CreateStaticObject(leveys, korkeus);
377        YlempiOikeaYla.Position = paikka;
378        YlempiOikeaYla.CollisionIgnoreGroup = 1;
379        YlempiOikeaYla.Image = ylempiOikeaYla;
380        YlempiOikeaYla.IgnoresCollisionResponse = true;
381        Add(YlempiOikeaYla, 3);
382
383
384    }
385    void LuoYlempiVasenYla(Vector paikka, double leveys, double korkeus)
386    {
387        PhysicsObject YlempiVasenYla = PhysicsObject.CreateStaticObject(leveys, korkeus);
388        YlempiVasenYla.Position = paikka;
389        YlempiVasenYla.CollisionIgnoreGroup = 1;
390        YlempiVasenYla.Image = ylempiVasenYla;
391        YlempiVasenYla.IgnoresCollisionResponse = true;
392        Add(YlempiVasenYla, 3);
393
394
395    }
396    void LuoYlempiOikeaAla(Vector paikka, double leveys, double korkeus)
397    {
398        PhysicsObject YlempiOikeaAla = PhysicsObject.CreateStaticObject(leveys, korkeus);
399        YlempiOikeaAla.Position = paikka;
400        //YlempiOikeaAla.CollisionIgnoreGroup = 1;
401        YlempiOikeaAla.Image = ylempiOikeaAla;
402        //YlempiOikeaAla.IgnoresCollisionResponse = false;
403        Add(YlempiOikeaAla, 1);
404
405
406    }
407    void LuoYlempiVasenAla(Vector paikka, double leveys, double korkeus)
408    {
409        PhysicsObject YlempiVasenAla = PhysicsObject.CreateStaticObject(leveys, korkeus);
410        YlempiVasenAla.Position = paikka;
411        //YlempiVasenAla.CollisionIgnoreGroup = 1;
412        YlempiVasenAla.Image = ylempiVasenYla;
413        //YlempiVasenAla.IgnoresCollisionResponse = false;
414        Add(YlempiVasenAla, 1);
415
416
417    }
418    void LuoYlempiKeski(Vector paikka, double leveys, double korkeus)
419    {
420        PhysicsObject YlempiKeski = PhysicsObject.CreateStaticObject(leveys, korkeus);
421        YlempiKeski.Position = paikka;
422        YlempiKeski.CollisionIgnoreGroup = 1;
423        YlempiKeski.Image = ylempiKeski;
424        YlempiKeski.IgnoresCollisionResponse = true;
425        Add(YlempiKeski, 3);
426
427
428    }
429
430
431    void LuoOikeaAla(Vector paikka, double leveys, double korkeus)
432    {
433        PhysicsObject muuri = PhysicsObject.CreateStaticObject(leveys, korkeus);
434        muuri.Position = paikka;
435        muuri.CollisionIgnoreGroup = 1;
436        muuri.Image = OikeaAla;
437        Add(muuri);
438       
439
440
441    }
442
443    void LuoOikea(Vector paikka, double leveys, double korkeus)
444    {
445        PhysicsObject muuri = PhysicsObject.CreateStaticObject(leveys, korkeus);
446        muuri.Position = paikka;
447        muuri.Tag = "muuri";
448        muuri.CollisionIgnoreGroup = 1;
449        muuri.Image = oikeaSeina;
450        Add(muuri);
451
452       
453    }
454   
455
456
457    void LuoPelaaja(Vector paikka, double leveys, double korkeus)
458    {
459
460        pelaaja.Image = hahmo;
461        pelaaja.Position = paikka;
462        pelaaja.CanRotate = false;
463        pelaaja.Restitution = 1;
464        pelaaja.MaxVelocity = 300;
465        pelaaja.LinearDamping = 0.9;
466        pelaaja.Shape = Shape.Circle;
467        pelaaja.CollisionIgnoreGroup = 5;
468        pelaaja.IgnoresCollisionResponse = true;
469        Add(pelaaja, 2);
470        AddCollisionHandler(pelaaja, "vihu", OsuuViholliseen);
471        AddCollisionHandler(pelaaja, "enkka", OsuuEnkkaan);
472        AddCollisionHandler(pelaaja, "mana", OsuuManaan);
473        AddCollisionHandler(pelaaja, "potion", OsuuPulloon);
474
475        LuoHahmonHitbox();
476
477        Timer pysahdys = new Timer();
478        pysahdys.Interval = 0.01;
479        pysahdys.Timeout += delegate
480        {
481            if (pelaaja.Velocity.Magnitude == 0)
482            {
483                ((turhakepeli)Game.Instance).animaatioKaynnissa = 0;
484                ((turhakepeli)Game.Instance).pelaaja.Animation.Stop();
485            }
486        };
487        pysahdys.Start();
488     
489    }
490
491    void LuoHahmonHitbox()
492{
493    PhysicsObject hitbox = new PhysicsObject(40, 20);
494    hitbox.Y = pelaaja.Y -20;
495    hitbox.X = pelaaja.X;
496    hitbox.Color = Color.Transparent;
497    //hitbox.Image = hyokkauksenKuva;
498    //hitbox.CollisionIgnoreGroup = 1;
499    //hitbox.Shape = Shape.Circle;
500    Add(hitbox);
501
502    hitbox.CanRotate = false;
503    AxleJoint liitos = new AxleJoint(pelaaja, hitbox);
504    Add(liitos);
505
506    AddCollisionHandler(hitbox, "vihu", OsuuViholliseen);
507    AddCollisionHandler(hitbox, "enkka", OsuuEnkkaan);
508    AddCollisionHandler(hitbox, "mana", OsuuManaan);
509}
510
511    void LuoSivuseina(Vector paikka, double leveys, double korkeus)
512    {
513        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
514        taso.Position = paikka;
515        taso.CollisionIgnoreGroup = 1;
516        taso.Image = sivuseina;
517        Add(taso);
518    }
519    void LuoOikeaYla(Vector paikka, double leveys, double korkeus)
520    {
521         PhysicsObject ala = PhysicsObject.CreateStaticObject(leveys, korkeus);
522        ala.Position = paikka;
523        ala.CollisionIgnoreGroup = 1;
524        ala.Image = OikeaYla;
525        Add(ala);
526
527    }
528
529    void LuoMuurinHitbox()
530{
531    PhysicsObject hitbox = new PhysicsObject(500, 43);
532    hitbox.Y = muuri.Y -20;
533    hitbox.X = muuri.X;
534    //hitbox.Color = Color.Transparent;
535    //hitbox.Image = hyokkauksenKuva;
536    //hitbox.CollisionIgnoreGroup = 1;
537    //hitbox.Shape = Shape.Circle;
538    Add(hitbox);
539
540    hitbox.CanRotate = false;
541    AxleJoint liitos = new AxleJoint(muuri, hitbox);
542    Add(liitos);
543}
544
545    private void LuoVihollinen(Vector paikka, double leveys, double korkeus)
546    { 
547        Vihu vihollinen = new Vihu(leveys, korkeus);
548
549        vihollinen.ElamaLaskuri = new IntMeter(5, 0, 5);
550        vihollinen.Position = paikka;
551        Add(vihollinen, -2);
552        vihollinen.CanRotate = false;
553        vihollinen.Restitution = 0.0;
554        vihollinen.Tag = "vihu";
555        //vihollinen.Color = Color.Red;
556        vihollinen.Color = new Color(63, 0, 63);
557
558        //vihollinen.MoveTo(new Vector(RandomGen.NextDouble(Level.Left, Level.Right), Level.Bottom - 250), 500); //{ vihollisLaskuri.Value++; });
559        FollowerBrain seuraajanAivot = new FollowerBrain(pelaaja);
560        seuraajanAivot.Speed = 10.0;
561        seuraajanAivot.DistanceFar = 300;
562        seuraajanAivot.DistanceClose = 50;
563        seuraajanAivot.TurnWhileMoving = false;
564        seuraajanAivot.TargetClose += delegate
565        {
566            seuraajanAivot.Active = true;
567            vihollinen.Hit(new Vector(0, -5000));
568
569        };
570
571        vihollinen.Brain = seuraajanAivot;
572        vihollistenMaara.MaxValue++;
573        vihollistenMaara.Value = vihollistenMaara.MaxValue;
574
575        RandomMoverBrain kaukanaAivot = new RandomMoverBrain();
576        kaukanaAivot.Speed = 0.0001;
577        kaukanaAivot.TurnWhileMoving = false;
578
579        seuraajanAivot.FarBrain = kaukanaAivot;
580
581        Timer vihunAnimaatio = new Timer();
582        vihunAnimaatio.Interval = 0.01;
583        vihunAnimaatio.Timeout += delegate
584        {
585            double kulma = vihollinen.Velocity.Angle.Degrees;
586            int suunta = 0;
587
588            if (vihollinen.Velocity.Magnitude != 0)
589            {
590                if (kulma <= 45 && kulma >= -45)
591                {
592                    suunta = 1;
593                }
594
595                if (kulma <= -45 && kulma >= -135)
596                {
597                    suunta = 4;
598                }
599
600                if (kulma <= -135 || kulma >= 135)
601                {
602                    suunta = 2;
603                }
604
605                if (kulma <= 135 && kulma >= 45)
606                {
607                    suunta = 3;
608                }
609            }
610
611           
612            if (vihollinen.animaatioKaynnissa != suunta)
613            {
614                switch (suunta)
615                {
616                    case 1:
617                        vihollinen.Animation = new Animation(hahmonLiikeOikea);
618                        animaatioKaynnissa = 1;
619                        break;
620                    case 2:
621                        vihollinen.Animation = new Animation(hahmonLiikeVasen);
622                        animaatioKaynnissa = 2;
623                        break;
624                    case 3:
625                        vihollinen.Animation = new Animation(hahmonLiikeYlos);
626                        animaatioKaynnissa = 3;
627                        break;
628                    case 4:
629                        vihollinen.Animation = new Animation(hahmonLiikeAlas);
630                        animaatioKaynnissa = 4;
631                        break;
632                    default:
633                        break;
634                }
635                vihollinen.Animation.FPS = 5;
636                vihollinen.Animation.Start();
637            }
638            else if (suunta == 0)
639            {
640                vihollinen.Animation.Stop();
641            } 
642        };
643        vihunAnimaatio.Start();
644       
645    }
646    private void LuoLaatikko(Vector paikka, double leveys, double korkeus)
647    {
648        laatikko laatikko = new laatikko(leveys, korkeus);
649        laatikko.Position = paikka;
650        laatikko.CanRotate = false;
651        laatikko.Restitution = 0.0;
652        laatikko.CanRotate = false;
653        laatikko.Image = Laatikko;
654       
655   
656        laatikko.Tag = "laatikko";
657        Add(laatikko);
658
659        AxleJoint liitos = new AxleJoint(laatikko);
660        Add(liitos);
661    }
662    private void LuoManaLaatikko(Vector paikka, double leveys, double korkeus)
663    {
664        laatikko manaLaatikko = new laatikko(leveys, korkeus);
665        manaLaatikko.Position = paikka;
666        manaLaatikko.CanRotate = false;
667        manaLaatikko.Restitution = 0.0;
668        manaLaatikko.CanRotate = false;
669        manaLaatikko.Image = Laatikko;
670
671
672        manaLaatikko.Tag = "manaLaatikko";
673        Add(manaLaatikko);
674
675        AxleJoint liitos = new AxleJoint(manaLaatikko);
676        Add(liitos);
677    }
678    private void LuoPotionLaatikko(Vector paikka, double leveys, double korkeus)
679    {
680        laatikko potionLaatikko = new laatikko(leveys, korkeus);
681        potionLaatikko.Position = paikka;
682        potionLaatikko.CanRotate = false;
683        potionLaatikko.Restitution = 0.0;
684        potionLaatikko.CanRotate = false;
685        potionLaatikko.Image = Laatikko;
686
687
688        potionLaatikko.Tag = "potionLaatikko";
689        Add(potionLaatikko);
690
691        AxleJoint liitos = new AxleJoint(potionLaatikko);
692        Add(liitos);
693    }
694
695    void KenttaLapi()
696    {
697        kenttaNro++;
698        ClearAll();
699        //MessageDisplay.Add("Teleported to next level");
700        vihollistenMaara.ClearTriggers();
701        AloitaPeli();
702    }
703    void Hyokkaa()
704    {
705     
706        PhysicsObject hyokkaus = new PhysicsObject(100, 100);
707        hyokkaus.Position = pelaaja.Position;
708        hyokkaus.Image = hyokkauksenKuva;
709        hyokkaus.CollisionIgnoreGroup = 1;
710        hyokkaus.Shape = Shape.Circle;
711        hyokkaus.IgnoresCollisionResponse = true;
712
713
714   
715
716        if (energiaLaskuri.Value > 0)
717        {
718            energiaLaskuri.Value--;
719            Add(hyokkaus, 1);
720            if (energiaLaskuri.Value < 10)
721            {
722               
723                if (!energianKasvattaja.Enabled)
724                {
725                 energianKasvattaja.Start();
726                }
727               
728            }
729        }
730
731        hyokkaus.CanRotate = false;
732        AxleJoint liitos = new AxleJoint(pelaaja, hyokkaus); 
733        Add(liitos);
734        //pelaaja.Image = hahmoHyokkaa;
735        AddCollisionHandler(hyokkaus, "vihu", HyokkausOsuu);
736        AddCollisionHandler(hyokkaus, "laatikko", HyokkausOsuu);
737        AddCollisionHandler(hyokkaus, "potionLaatikko", HyokkausOsuu);
738        AddCollisionHandler(hyokkaus, "manaLaatikko", HyokkausOsuu);
739
740        Timer.SingleShot(0.5, delegate { 
741            hyokkaus.Destroy(); 
742            //pelaaja.Image = hahmo;
743            //if (pelaaja.Animation != null) pelaaja.Animation.Start();
744        });
745        //AddCollisionHandler(hyokkaus, "vihu", );
746
747    }
748
749
750    void HahmonAnimaatio(Image[] hahmonLiike)
751    {
752        if (pelaaja.Velocity != Vector.Zero) return;
753        pelaaja.Animation = new Animation(hahmonLiike);
754        pelaaja.Animation.FPS = 5;
755        pelaaja.Animation.Start();
756    }
757    void HahmonAnimaatioYlos(Image[] hahmonLiikeYlos)
758    {
759        if (pelaaja.Velocity != Vector.Zero) return;
760        pelaaja.Animation = new Animation(hahmonLiikeYlos);
761        pelaaja.Animation.FPS = 5;
762        pelaaja.Animation.Start();
763    }
764
765
766
767    void AnimaatioLopetus(int suunta)
768    {
769        if (suunta == animaatioKaynnissa)
770        {
771            pelaaja.Animation.Stop();
772            animaatioKaynnissa = 0;
773        }
774    }
775    void HyokkausOsuu(PhysicsObject hyokkaus, PhysicsObject kohde)
776    {
777        if (kohde.Tag.Equals("vihu"))
778        {
779            OsuVihuun(kohde);
780           
781        }
782        if (kohde.Tag.Equals("laatikko"))
783        {
784            OsuLaatikkoon(kohde);
785
786        }
787        if (kohde.Tag.Equals("potionLaatikko"))
788        {
789            OsuPotionLaatikkoon(kohde);
790
791        }
792        if (kohde.Tag.Equals("manaLaatikko"))
793        {
794            OsuManaLaatikkoon(kohde);
795
796        }
797    }
798    private void OsuVihuun(PhysicsObject kohde)
799    {
800        //Explosion rajahdys = new Explosion(150);
801        //rajahdys.Position = kohde.Position;w
802        //rajahdys.ShockwaveColor = Color.Transparent;
803        //Add(rajahdys);
804        //(kohde as Vihu).
805       
806
807        (kohde as Vihu).ElamaLaskuri.Value--;
808        if ((kohde as Vihu).ElamaLaskuri.Value <= 0)
809        {
810            LuoEnkka(kohde.Position, 60, 60);
811            kohde.Destroy();
812            vihollistenMaara.Value--;
813        }
814     
815    }
816    private void OsuLaatikkoon(PhysicsObject kohde)
817    {
818
819
820        (kohde as laatikko).TuhoutumisLaskuri.Value--;
821        if ((kohde as laatikko).TuhoutumisLaskuri.Value <= 0)
822        {
823            LuoEnkka(kohde.Position, 60, 60);
824            kohde.Destroy();
825            //vihollistenMaara.Value--;
826        }
827        if ((kohde as laatikko).TuhoutumisLaskuri.Value == 2)
828        {
829            kohde.Image = Laatikko3;
830        }
831
832        if ((kohde as laatikko).TuhoutumisLaskuri.Value == 1)
833        {
834            kohde.Image = Laatikko5;
835        }
836
837
838    }
839    private void OsuManaLaatikkoon(PhysicsObject kohde)
840    {
841
842
843        (kohde as laatikko).TuhoutumisLaskuri.Value--;
844        if ((kohde as laatikko).TuhoutumisLaskuri.Value <= 0)
845        {
846            LuoMana(kohde.Position, 60, 60);
847            kohde.Destroy();
848            //vihollistenMaara.Value--;
849        }
850        if ((kohde as laatikko).TuhoutumisLaskuri.Value == 2)
851        {
852            kohde.Image = Laatikko3;
853        }
854
855        if ((kohde as laatikko).TuhoutumisLaskuri.Value == 1)
856        {
857            kohde.Image = Laatikko5;
858        }
859
860    }
861    private void OsuPotionLaatikkoon(PhysicsObject kohde)
862    {
863
864
865        (kohde as laatikko).TuhoutumisLaskuri.Value--;
866        if ((kohde as laatikko).TuhoutumisLaskuri.Value <= 0)
867        {
868            LuoPotion(kohde.Position, 60, 60);
869            kohde.Destroy();
870            //vihollistenMaara.Value--;
871        }
872        if ((kohde as laatikko).TuhoutumisLaskuri.Value == 2)
873        {
874            kohde.Image = Laatikko3;
875        }
876
877        if ((kohde as laatikko).TuhoutumisLaskuri.Value == 1)
878        {
879            kohde.Image = Laatikko5;
880        }
881
882    }
883
884
885    void LuoEnkkaLaskuri()
886    {
887       enkkaLaskuri = new DoubleMeter(10);
888       enkkaLaskuri.MaxValue = 10;
889       enkkaLaskuri.LowerLimit += ElamaLoppui;
890
891       ProgressBar elamaPalkki = new ProgressBar(250, 30);
892        elamaPalkki.X = Screen.Left + 150;
893        elamaPalkki.Y = Screen.Top - 20;
894        elamaPalkki.BindTo(enkkaLaskuri);
895        elamaPalkki.BorderColor = Color.Black;
896        Add(elamaPalkki);
897    }
898
899    void ElamaLoppui()
900    {
901
902       
903        //IsPaused = true;
904        //pelaaja.Image = kuollut;
905        //MessageDisplay.Add("aodihb");
906        //Label teksti = new Label("GAME OVER!!!");
907       //teksti.TextScale = new Vector(3, 3);
908       //Add(teksti);
909       //teksti.Color = Color.Transparent;
910   
911        IsPaused = true;
912        MultiSelectWindow valikko = new MultiSelectWindow("Game Over", "Restart", "Quit Game");
913        valikko.AddItemHandler(1, Exit);
914        valikko.AddItemHandler(0, delegate { AloitaPeli(); });
915        valikko.Color = Color.Black;
916        valikko.Color = Color.Transparent;
917        valikko.SelectionColor = Color.Black;
918        valikko.Image = valikonKuva;
919        valikko.X = 250;
920        valikko.Y = 150;
921        Add(valikko);
922   
923   
924       
925    }
926    void AloitaPeli()
927    {
928        ClearAll();
929        IsPaused = false;
930        Mouse.IsCursorVisible = false;
931
932        if (kenttaNro == 1) LuoKentta("kentta");
933        else if (kenttaNro == 2) LuoKentta("kentta02");
934        else if (kenttaNro == 3) LuoKentta("kentta03");
935        else if (kenttaNro == 4) LuoKentta("kentta04");
936        else if (kenttaNro == 5) LuoKentta("kentta05");
937        else if (kenttaNro == 6) LuoKentta("kentta06");
938
939        Level.Background.Image = taustaKuva;
940        Level.Background.TileToLevel();
941        Camera.StayInLevel = true;
942
943
944        //GameObject taustaPilvet = new GameObject(10000, 10000);
945        // taustaPilvet.Image = taustaKuva;
946        //Add(taustaPilvet, -3);
947        //Layers[-3].RelativeTransition = new Vector(0.5, 0.5);
948
949
950
951        SmoothTextures = false;
952
953        //hahmonLiike = LoadAnimation("hahmo");
954
955        //LuoKentta();
956
957        LisaaOhjaimet();
958
959        LuoEnkkaLaskuri();
960
961        LuoEnergiaLaskuri();
962
963
964
965
966
967
968        Camera.Zoom(2.5);
969       
970
971        turhake = new PhysicsObject(10, 10);
972        turhake.Color = new Color (63, 0, 63);
973        //Add(turhake);
974        Camera.FollowedObject = pelaaja;
975    }
976
977
978
979     void OsuuViholliseen(PhysicsObject hitbox, PhysicsObject vihu)
980    {
981       
982         if (vihu.Tag.Equals("vihu"))
983         {
984           
985            enkkaLaskuri.Value--;
986            vihu.Stop();
987         }
988     }
989     void LuoEnergiaLaskuri()
990     {
991        energiaLaskuri = new DoubleMeter(10);
992        energiaLaskuri.MaxValue = 10;
993        //energiaLaskuri.LowerLimit += ElamaLoppui;
994
995         ProgressBar energiaPalkki = new ProgressBar(250, 30);
996         energiaPalkki.X = Screen.Left + 150;
997         energiaPalkki.Y = Screen.Top - 70;
998         energiaPalkki.BindTo(energiaLaskuri);
999
1000         energiaPalkki.BarColor = Color.Blue;
1001         energiaPalkki.BorderColor = Color.Black;
1002   
1003         Add(energiaPalkki);
1004       
1005     }
1006     void LuoEnkka(Vector paikka, double leveys, double korkeus)
1007     {
1008        PhysicsObject enkka = new PhysicsObject(leveys, korkeus);
1009        enkka.Position = paikka;
1010        enkka.Image = enkanKuva;
1011        enkka.IgnoresCollisionResponse = true;
1012        enkka.IgnoresExplosions = true;
1013        Add(enkka, -3);
1014        //Vector impulssi = new Vector(0.0, -1.0);
1015        //enkka.Hit(impulssi);
1016        enkka.Tag = "enkka";
1017        enkka.CanRotate = false;
1018      } 
1019     void OsuuEnkkaan(PhysicsObject hitbox, PhysicsObject enkka)
1020     {
1021         enkkaLaskuri.Value += 4;
1022         enkka.Destroy();
1023         Label kerausteksti = new Label("HEALTH UP");
1024         kerausteksti.TextColor = Color.Red;
1025         kerausteksti.X = Screen.Right - 200;
1026         kerausteksti.Y = Screen.Top - 100;
1027         kerausteksti.LifetimeLeft = TimeSpan.FromSeconds(2.0);
1028         Add(kerausteksti);
1029     }
1030     void LuoMana(Vector paikka, double leveys, double korkeus)
1031     {
1032         PhysicsObject mana = new PhysicsObject(leveys, korkeus);
1033         mana.Position = paikka;
1034         //enkka.Image = enkanKuva;
1035         mana.IgnoresCollisionResponse = true;
1036         mana.IgnoresExplosions = true;
1037         
1038         Add(mana, -3);
1039         mana.Image = pullo;
1040         // Vector impulssi = new Vector(0.0, -500.0);
1041         //enkka.Hit(impulssi);
1042         mana.Tag = "mana";
1043         mana.CanRotate = false;
1044     }
1045     void LuoPotion(Vector paikka, double leveys, double korkeus)
1046     {
1047         PhysicsObject potion = new PhysicsObject(leveys, korkeus);
1048         potion.Position = paikka;
1049         //enkka.Image = enkanKuva;
1050         potion.IgnoresCollisionResponse = true;
1051         potion.IgnoresExplosions = true;
1052
1053         Add(potion, -3);
1054         potion.Image = pullo2;
1055         // Vector impulssi = new Vector(0.0, -500.0);
1056         //enkka.Hit(impulssi);
1057         potion.Tag = "potion";
1058         potion.CanRotate = false;
1059     }
1060     void OsuuManaan(PhysicsObject hitbox, PhysicsObject mana)
1061     {
1062         energiaLaskuri.MaxValue += 0.5;
1063         energiaLaskuri.Value += 5;
1064         mana.Destroy();
1065
1066         Label kerausteksti = new Label("MANA UP");
1067         kerausteksti.TextColor = Color.Cyan;
1068         kerausteksti.X = Screen.Right - 200;
1069         kerausteksti.Y = Screen.Top - 100;
1070         kerausteksti.LifetimeLeft = TimeSpan.FromSeconds(2.0);
1071         Add(kerausteksti);
1072
1073         Label kerausteksti2 = new Label("MANA MAX VALUE UP");
1074         kerausteksti2.TextColor = Color.Cyan;
1075         kerausteksti2.X = Screen.Right -200;
1076         kerausteksti2.Y = Screen.Top -200;
1077         kerausteksti2.LifetimeLeft = TimeSpan.FromSeconds(2.0);
1078         Add(kerausteksti2);
1079     }
1080     void OsuuPulloon(PhysicsObject hitbox, PhysicsObject potion)
1081     {
1082         enkkaLaskuri.MaxValue += 1;
1083         enkkaLaskuri.Value += 10;
1084         potion.Destroy();
1085
1086         Label kerausteksti = new Label("HEALTH UP");
1087         kerausteksti.TextColor = Color.Red;
1088         kerausteksti.X = Screen.Right - 200;
1089         kerausteksti.Y = Screen.Top - 100;
1090         kerausteksti.LifetimeLeft = TimeSpan.FromSeconds(2.0);
1091         Add(kerausteksti);
1092
1093         Label kerausteksti2 = new Label("HEALTH MAX VALUE UP");
1094         kerausteksti2.TextColor = Color.Red;
1095         kerausteksti2.X = Screen.Right - 200;
1096         kerausteksti2.Y = Screen.Top - 200;
1097         kerausteksti2.LifetimeLeft = TimeSpan.FromSeconds(2.0);
1098         Add(kerausteksti2);
1099     }
1100     void LuoPortti(Vector paikka, double leveys, double korkeus)
1101     {
1102         PhysicsObject portti = PhysicsObject.CreateStaticObject(leveys, korkeus);
1103         portti.Position = paikka;
1104         portti.CollisionIgnoreGroup = 1;
1105         //Add(portti);
1106     }
1107    void LuoKytkin(Vector paikka, double leveys, double korkeus)
1108    {
1109        PhysicsObject kytkin = new PhysicsObject(leveys, korkeus);
1110        kytkin.Position = paikka;
1111        kytkin.CollisionIgnoreGroup = 5;
1112        //kytkin.CollisionIgnoreGroup = 2;
1113        //kytkin.CollisionIgnoreGroup = 3;
1114        //kytkin.CollisionIgnoreGroup = 4;
1115        //kytkin.CollisionIgnoreGroup = 5;
1116        //kytkin.CollisionIgnoreGroup = 6;
1117        //Add(kytkin);
1118    }
1119
1120    void LuoMiekka(Vector paikka, double leveys, double korkeus)
1121    {
1122        PhysicsObject miekka = new PhysicsObject(leveys, korkeus);
1123        miekka.Position = paikka;
1124        miekka.Image = Miekka;
1125        miekka.IgnoresCollisionResponse = true;
1126        Add(miekka, -3);
1127    }
1128
1129   
1130   
1131
1132}
1133class Vihu : PhysicsObject
1134{
1135    private IntMeter elamaLaskuri = new IntMeter(3, 0, 3);
1136    public IntMeter ElamaLaskuri { get { return elamaLaskuri; } set { elamaLaskuri = value; } }
1137    public int animaatioKaynnissa;
1138
1139    public Vihu(double leveys, double korkeus)
1140        : base(leveys, korkeus)
1141    {
1142        //elamaLaskuri.LowerLimit += delegate { this.Destroy(); };
1143        this.animaatioKaynnissa = 0;
1144    }
1145}
1146class laatikko : PhysicsObject
1147{
1148    private IntMeter tuhoutumisLaskuri = new IntMeter(3, 0, 3);
1149    public IntMeter TuhoutumisLaskuri { get { return tuhoutumisLaskuri; } set { tuhoutumisLaskuri = value; } }
1150
1151    public laatikko(Vector paikka, double leveys, double korkeus, Image ylaOsanKuva)
1152        : base(leveys, korkeus)
1153    {
1154        //elamaLaskuri.LowerLimit += delegate { this.Destroy(); };
1155        GameObject ylaOsa = new GameObject(ylaOsanKuva);
1156        ((turhakepeli)Game.Instance).Add(ylaOsa, 3);
1157    }
1158}
Note: See TracBrowser for help on using the repository browser.