source: 2013/23/TopiasT/Tasohyppelypeli1/Tasohyppelypeli1/Tasohyppelypeli1/Tasohyppelypeli1.cs @ 3981

Revision 3981, 15.6 KB checked in by totauria, 9 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
9class Vihu : PlatformCharacter
10{
11    private IntMeter elamaLaskuri = new IntMeter(10, 0, 10);
12    public IntMeter ElamaLaskuri { get { return elamaLaskuri; } }
13    public Brain SeuraajaAivot;
14    public Brain RandomAivot;
15    public Timer AmpumaAjastin;
16
17    public Vihu(double leveys, double korkeus)
18        : base(leveys, korkeus)
19    {
20        elamaLaskuri.LowerLimit += delegate { this.Destroy(); };
21    }
22
23    public PhysicsObject AmmuAseella()
24    {
25        PhysicsObject ammus = Weapon.Shoot();
26
27        if (ammus != null)
28        {
29           
30            ammus.Size *= 0.6;
31            ammus.IgnoresCollisionResponse = true;
32            //ammus.CollisionIgnoreGroup = 1;
33            //ammus.CollisionIgnoreGroup = 2;
34            ammus.Image = null;
35            ammus.MaximumLifetime = TimeSpan.FromSeconds(0.7);
36            ammus.Color = Color.Red;
37            return ammus;
38        }
39        return null;
40    }
41}
42class pelihahmo : PlatformCharacter
43{
44    private IntMeter elamat = new IntMeter(10, 0, 10);
45    public IntMeter Elamat { get { return elamat; } }
46
47    public pelihahmo(double leveys, double korkeus)
48        : base(leveys, korkeus)
49    {
50        elamat.LowerLimit += delegate { this.Destroy(); };
51    }
52}
53
54public class Tasohyppelypeli1 : PhysicsGame
55{
56    const double nopeus = 100;
57    const double hyppyNopeus = 550;
58    const int RUUDUN_KOKO = 40;
59
60    int KenttaNro = 1;
61    pelihahmo pelaaja1;
62    //Timer ajastin1;
63    IntMeter pisteLaskuri;
64    List<Label> valikonKohdat;
65
66    AssaultRifle pelaajan1Ase;
67
68    private Image[] kavelyAnimaatio = LoadImages("hahmo1", "hahmo2", "hahmo3", "hahmo4","hahmo5", "hahmo6");
69    Image paikallaanAnimaatio = LoadImage("hahmoP");
70    private Image[] hyppyAnimaatio = LoadImages("hahmohyppy9", "hahmohyppy1", "hahmohyppy2", "hahmohyppy3", "hahmohyppy4", "hahmohyppy5", "hahmohyppy6", "hahmohyppy7", "hahmohyppy8", "hahmohyppy9");
71    Image hyokkaysAnimaatio = LoadImage("hahmoL");
72
73    Image tahtiKuva = LoadImage("tahti");
74
75    private Image[] kavelyAnimaatio2 = LoadImages("Piru1", "Piru2", "Piru3", "Piru4", "Piru5", "Piru6");
76    Image paikallaanAnimaatio2 = LoadImage("PiruP");
77    Image hyokkaysAnimaatio2 = LoadImage("PiruL");
78
79    SoundEffect maaliAani = LoadSoundEffect("maali");
80
81    int avainsaatu = 0;
82    int Ase = 0;
83
84    public override void Begin()
85    {
86        Valikko();
87    }
88    void Valikko()
89    {
90        ClearAll(); // Tyhjennetään kenttä kaikista peliolioista
91
92        Mouse.IsCursorVisible = true;
93        valikonKohdat = new List<Label>(); // Alustetaan lista, johon valikon kohdat tulevat
94
95        Label kohta1 = new Label("Aloita uusi peli");  // Luodaan uusi Label-olio, joka toimii uuden pelin aloituskohtana
96        kohta1.Position = new Vector(0, 40);  // Asetetaan valikon ensimmäinen kohta hieman kentän keskikohdan yläpuolelle
97        valikonKohdat.Add(kohta1);  // Lisätään luotu valikon kohta listaan jossa kohtia säilytetään
98
99        Label kohta2 = new Label("Lopeta peli");
100        kohta2.Position = new Vector(0, -40);
101        valikonKohdat.Add(kohta2);
102
103        Mouse.ListenOn(kohta1, MouseButton.Left, ButtonState.Pressed, AloitaPeli , null);
104        Mouse.ListenOn(kohta2, MouseButton.Left, ButtonState.Pressed, Exit, null);
105        Mouse.ListenMovement(1.0, ValikossaLiikkuminen, null);
106
107        // Lisätään kaikki luodut kohdat peliin foreach-silmukalla
108        foreach (Label valikonKohta in valikonKohdat)
109        {
110            Add(valikonKohta);
111        }
112    }
113    void ValikossaLiikkuminen(AnalogState hiirenTila)
114    {
115        foreach (Label kohta in valikonKohdat)
116        {
117            if (Mouse.IsCursorOn(kohta))
118            {
119                kohta.TextColor = Color.Red;
120            }
121            else
122            {
123                kohta.TextColor = Color.Black;
124            }
125
126        }
127    }
128    void AloitaPeli()
129    {
130        ClearAll();
131       
132
133        Gravity = new Vector(0, -1000);
134
135        if(KenttaNro == 1)
136        LuoKentta("kentta1");
137
138        if(KenttaNro ==2)
139            LuoKentta("kentta2");
140
141        LisaaNappaimet();
142        Luovoimamittari();
143        LuoPistelaskuri();
144
145        Camera.Follow(pelaaja1);
146        Camera.ZoomFactor = 5;
147        Camera.StayInLevel = true;
148        Level.CreateBorders();
149
150        if (DataStorage.Exists("pisteet.xml"))
151            pisteLaskuri = DataStorage.Load<IntMeter>(pisteLaskuri, "pisteet.xml"); 
152    }
153    void SeuraavaTaso()
154    {
155        KenttaNro++;
156        AloitaPeli();
157    }
158   
159
160    void LuoKentta(string kenttaTiedostonNimi)
161    {
162       
163        {
164
165            ColorTileMap ruudut = ColorTileMap.FromLevelAsset(kenttaTiedostonNimi);
166
167            ruudut.SetTileMethod(Color.Green, LisaaPelaaja);
168            ruudut.SetTileMethod(Color.Black, LisaaTaso);
169            ruudut.SetTileMethod(Color.Yellow, LisaaTahti);
170            ruudut.SetTileMethod(Color.Red, Luopiru);
171            ruudut.SetTileMethod(new Color(127, 0, 0), LuoOvi);
172            ruudut.SetTileMethod(new Color(1, 0, 0), Luopalikka);
173            ruudut.SetTileMethod(new Color(128, 128, 128), LuoAvain);
174            ruudut.SetTileMethod(new Color(75, 255, 0), Luoportti);
175
176            ruudut.Execute(20, 20);
177        }
178
179    }
180
181    void LisaaTaso(Vector paikka, double leveys, double korkeus)
182    {
183        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
184        taso.Position = paikka;
185        taso.Tag = "taso";
186        taso.Color = Color.Green;
187        Add(taso);
188    }
189
190    void LisaaTahti(Vector paikka, double leveys, double korkeus)
191    {
192        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys, korkeus);
193        tahti.IgnoresCollisionResponse = true;
194        tahti.Position = paikka;
195        tahti.Image = tahtiKuva;
196        tahti.Tag = "tahti";
197        Add(tahti);
198    }
199
200    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
201    {
202        pelaaja1 = new pelihahmo(leveys, korkeus);
203        pelaaja1.Position = paikka;
204        pelaaja1.Mass = 4.0;
205       // pelaaja1.Image = pelaajanKuva;
206        pelaaja1.Tag = "pelaaja";
207        AddCollisionHandler(pelaaja1, "tahti", TormaaTahteen);
208
209        pelaaja1.CollisionIgnoreGroup = 1;
210        pelaaja1.AnimWalk = new Animation(kavelyAnimaatio);
211        pelaaja1.AnimWalk.FPS = 10;
212        pelaaja1.AnimJump = new Animation(hyppyAnimaatio);
213        pelaaja1.AnimJump.FPS = 18;
214        pelaaja1.AnimIdle = new Animation(paikallaanAnimaatio);
215
216        Timer ajastin2 = new Timer();
217        ajastin2.Interval = 2;
218        ajastin2.Timeout += delegate
219        {
220
221            pelaaja1.Elamat.Value++;
222
223        };
224        ajastin2.Start();
225
226        pelaajan1Ase = new AssaultRifle(0.1, 0.1);
227
228        //Ammusten määrä aluksi:
229        pelaajan1Ase.Ammo.Value = 1000;
230        pelaajan1Ase.Power.DefaultValue = 100;
231        //Mitä tapahtuu kun ammus osuu johonkin?
232        pelaajan1Ase.ProjectileCollision = AmmusOsui;
233        pelaajan1Ase.X = -6.0;
234
235//        pelaaja1.Add(pelaajan1Ase);
236        pelaaja1.Weapon = pelaajan1Ase;
237        Add(pelaaja1);
238    }
239   
240    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
241    {
242        if (kohde is Vihu)
243        {
244            ((Vihu)kohde).ElamaLaskuri.Value--;
245        }
246        ammus.Destroy();
247    }
248
249
250    void LisaaNappaimet()
251    {
252        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
253        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Valikko, "Lopeta peli");
254
255        Keyboard.Listen(Key.A, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
256        Keyboard.Listen(Key.D, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, nopeus);
257        Keyboard.Listen(Key.W, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
258        Keyboard.Listen(Key.Space, ButtonState.Pressed, Lyö, "");
259        Keyboard.Listen(Key.Space, ButtonState.Pressed, AmmuAseella, "Ammu", pelaajan1Ase);
260       
261
262        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
263
264        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
265        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
266        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
267
268        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
269    }
270    void AmmuAseella(AssaultRifle ase)
271    {
272            PhysicsObject ammus = ase.Shoot();
273
274        if (ammus != null)
275        {
276            ammus.Size *= 0.4;
277            if (Ase == 0)
278            {
279                ammus.CollisionIgnoreGroup = 1;
280                ammus.Image = null;
281                ammus.MaximumLifetime = TimeSpan.FromSeconds(0.02);
282                ammus.Color = Color.Transparent;
283           
284            }
285            else
286            {
287                ammus.Image = LoadImage("luoti");
288                ammus.MaximumLifetime = TimeSpan.FromSeconds(2);
289
290            }
291           
292        }
293    }
294
295    void Liikuta(PlatformCharacter hahmo, double nopeus)
296    {
297        hahmo.Walk(nopeus);
298    }
299
300    void Hyppaa(PlatformCharacter hahmo, double nopeus)
301    {
302        hahmo.Jump(nopeus);
303    }
304
305    void TormaaTahteen(PhysicsObject hahmo, PhysicsObject tahti)
306    {
307        tahti.Destroy();
308        maaliAani.Play();
309        pisteLaskuri.Value += 10;
310       
311    }
312    void Lyö()
313    {
314        pelaaja1.PlayAnimation(hyokkaysAnimaatio);
315    }
316    void Luopiru(Vector paikka, double leveys, double korkeus)
317    {
318        Vihu piru = new Vihu(15, 20);
319        piru.Position = paikka;
320        piru.Tag = "piru";
321        piru.Image = LoadImage("Piru");
322        piru.Mass = 8;
323        //AddCollisionHandler(piru, "pelaaja", pirulyo);
324        //piru.CollisionIgnoreGroup = 2;
325        Add(piru);
326
327        piru.AnimWalk = new Animation(kavelyAnimaatio2);
328        piru.AnimWalk.FPS = 10;
329        piru.AnimIdle = new Animation(paikallaanAnimaatio2);
330
331        PlatformWandererBrain tasoAivot = new PlatformWandererBrain();
332        tasoAivot.Speed = 40;
333        piru.Brain = tasoAivot;
334
335        FollowerBrain seuraajaAivot = new FollowerBrain(pelaaja1);
336        seuraajaAivot.Speed = 50;
337        piru.Brain = seuraajaAivot;
338
339        piru.RandomAivot = tasoAivot;
340        piru.SeuraajaAivot = seuraajaAivot;
341
342        AssaultRifle pirunase = new AssaultRifle(15.0, 15.0);
343
344        //Ammusten määrä aluksi:
345        pirunase.Image = null;
346        pirunase.Color = Color.Transparent;
347        pirunase.Ammo.Value = 1000;
348        pirunase.Power.Value = 30;
349        pirunase.Power.DefaultValue = 30;
350        pirunase.Power.MaxValue = 30;
351        //pirunase.X = -7.0;
352        pirunase.Angle += Angle.FromDegrees(1);
353        pirunase.CanHitOwner = false;
354
355        //Mitä tapahtuu kun ammus osuu johonkin?
356        pirunase.ProjectileCollision = PirunAmmusOsui;
357
358        //        pelaaja1.Add(pelaajan1Ase);
359        piru.Weapon = pirunase;
360//        piru.Weapon.CanHitOwner = tru;
361
362        //Physics2DDotNet.Ignorers.ObjectIgnorer ignorer = new Physics2DDotNet.Ignorers.ObjectIgnorer();
363        //piru.CollisionIgnorer = ignorer;
364
365        Timer ajastin1 = new Timer();
366        ajastin1.Interval = 0.5;
367        ajastin1.Timeout += delegate { 
368            //PhysicsObject ammus = 
369                piru.AmmuAseella();
370            //if (ammus != null) ammus.CollisionIgnorer = ignorer;
371
372        };
373        piru.AmpumaAjastin = ajastin1;
374
375        Timer ajastin = new Timer();
376        ajastin.Interval = 0.5;
377        ajastin.Timeout += delegate
378        {
379            double etaisyys = Vector.Distance(piru.Position, pelaaja1.Position);
380                if (etaisyys < 70)
381                {
382                    piru.AmpumaAjastin.Start();
383                }
384                else
385                    piru.AmpumaAjastin.Stop();
386
387            if (etaisyys < 100)
388            {
389                piru.Brain = piru.SeuraajaAivot;
390            }
391            else
392            {
393                piru.AmpumaAjastin.Stop();
394                piru.Brain = piru.RandomAivot;
395            }
396            if (piru.ElamaLaskuri.Value == 0)
397            { 
398                piru.Weapon.Destroy();
399                piru.AmpumaAjastin.Stop();
400                ajastin.Stop();
401            }
402   
403        }; 
404        ajastin.Start();
405
406       // piru.ElamaLaskuri.LowerLimit += delegate { piru.Destroy(); };;       
407    }
408
409    void Luovoimamittari()
410    {
411        ProgressBar elamaPalkki = new ProgressBar(200, 30);
412        elamaPalkki.X = Screen.Left + 150;
413        elamaPalkki.Y = Screen.Top - 40;
414        elamaPalkki.Image = LoadImage("tyhjä");
415        elamaPalkki.BarImage = LoadImage("täys");
416        elamaPalkki.BindTo(pelaaja1.Elamat);
417        Add(elamaPalkki);
418    }
419
420
421    void PirunAmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
422    {
423        if (kohde == pelaaja1)
424        {
425            pelaaja1.Elamat.Value--;
426
427        }
428        if (kohde.Tag == "palikka")
429        {
430            return;
431        }
432        ammus.Destroy();
433    }
434    void LuoOvi(Vector paikka, double leveys, double korkeus)
435    {
436        PhysicsObject ovi = PhysicsObject.CreateStaticObject(20, 60);
437        ovi.Image = LoadImage("ovi");
438        ovi.Position = paikka;
439        AddCollisionHandler(ovi, "pelaaja", tormaaOveen);
440       // ovi.CollisionIgnoreGroup = 1;
441        Add(ovi);
442    }
443    void Luopalikka(Vector paikka, double leveys, double korkeus)
444    {
445        PhysicsObject palikka = PhysicsObject.CreateStaticObject(leveys, korkeus);
446        palikka.Position = paikka;
447        palikka.Color = Color.Transparent;
448        palikka.CollisionIgnoreGroup = 1;
449        palikka.Tag = "palikka";
450        Add(palikka);
451   
452    }
453    void LuoAvain(Vector paikka, double leveys, double korkeus)
454    {
455        PhysicsObject avain = PhysicsObject.CreateStaticObject(40, 20);
456        avain.Position = paikka;
457        avain.Image = LoadImage("avain");
458        AddCollisionHandler(avain, "pelaaja", tormaaAvaimeen);
459        //avain.CollisionIgnoreGroup = 1;
460        Add(avain);
461    }
462    void tormaaAvaimeen(PhysicsObject avain, PhysicsObject hahmo)
463    {
464        avain.Destroy();
465        avainsaatu = 1;
466    }
467    void tormaaOveen(PhysicsObject ovi, PhysicsObject hahmo)
468    {
469        if (avainsaatu > 0)
470        {
471            ovi.Destroy();
472            avainsaatu--;
473        }
474    }
475    void LuoPistelaskuri()
476    {
477        pisteLaskuri = new IntMeter(0);
478
479        Label pisteNaytto = new Label();
480        pisteNaytto.X = Screen.Left + 100;
481        pisteNaytto.Y = Screen.Top - 100;
482        pisteNaytto.TextColor = Color.Black;
483        pisteNaytto.Font = Font.DefaultLargeBold;
484        pisteNaytto.Color = Color.Transparent;
485
486        pisteNaytto.BindTo(pisteLaskuri);
487        Add(pisteNaytto);
488    }
489    void Luoportti(Vector paikka, double leveys, double korkeus)
490    {
491        PhysicsObject portti = PhysicsObject.CreateStaticObject(20, 40);
492        portti.Position = paikka;
493        portti.Image = LoadImage("Portti");
494        AddCollisionHandler(portti, "pelaaja", tormaaPorttiin);
495        //avain.CollisionIgnoreGroup = 1;
496        Add(portti);
497    }
498    void tormaaPorttiin(PhysicsObject portti, PhysicsObject hahmo)
499    {
500        PlaySound("maali");
501        portti.Destroy();
502        DataStorage.Save<IntMeter>(pisteLaskuri, "pisteet.xml");
503        SeuraavaTaso();
504    }
505}
Note: See TracBrowser for help on using the repository browser.