source: 2015/30/ArttuH/TasoHyppely/TasoHyppely/TasoHyppely/TasoHyppely.cs @ 7011

Revision 7011, 18.6 KB checked in by nikranna, 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 TasoHyppely : PhysicsGame
10{
11    const double nopeus = 200;
12    const double hyppyNopeus = 750;
13    const int RUUDUN_KOKO = 40;
14    double ammusnopeus2 = 3000;
15    double ammusnopeus1 = 1300;
16    double pahisNopeus = 100;
17    double Painovoima = -1000;
18    double pelaajaMassa = 4.0;
19    double pelaajan1_ase_nopeus = 10;
20    double ase_X = 20.0;
21    double ase_Y = -10.0;
22    double pelaajan_nopeus = 300.0;
23    double pistelaskurin_X = 100;
24    double pistelaskurin_Y = 100;
25    double pelaajan1_Luoti_laskuri_X = 190;
26    double pelaajan1_Luoti_laskuri_Y = 100;
27    double pelaajan2_Luoti_laskuri_X = 190;
28    double pelaajan2_Luoti_laskuri_Y = 180;
29    double pelaajan1_luodin_massa = 100;
30    double pelaajan2_luodin_massa = 200;
31
32    bool pelaaja1ampuu = false;
33    bool pelaaja2ampuu = false;
34
35    List<PlatformCharacter> pelaajaLista = new List<PlatformCharacter>();
36
37    PlatformCharacter pelaaja1;
38    PlatformCharacter pelaaja2;
39    IntMeter pisteLaskuri;
40    IntMeter luotilaskuri;
41    IntMeter luotilaskuri2;
42    IntMeter elamalaskuri;
43    IntMeter elamalaskuri2;
44    int pelaajienMaara;
45    int kenttaNro = 1;
46    int kenttaMaara = 6;
47
48    Image asekuva = LoadImage("asekuva");
49    Image asekuva2 = LoadImage("asekuva_2");
50    Image pelaajanKuva1 = LoadImage("ukko");
51    Image pelaajanKuva2 = LoadImage("toinenukko");
52    Image tahtiKuva = LoadImage("suklaa");
53    Image luoti = LoadImage("luoti");
54    Image piikkikuva = LoadImage("piikki");
55    Image orkki = LoadImage("orkki");
56    Image orkki2 = LoadImage("pahis2");
57    Image ammuspakettiKuva = LoadImage("ammobox");
58    private Animation pelihahmo1;
59    private Animation pelihahmo2;
60    SoundEffect maaliAani = LoadSoundEffect("Pickup_Coin21");
61
62    public override void Begin()
63    {
64        Paavalikko();
65    }
66
67    void LuoKentta(int pelaajienMaara)
68    {
69        ClearAll();
70        MediaPlayer.Play("LevelUp");
71        Gravity = new Vector(0, Painovoima);
72        TileMap kentta = TileMap.FromLevelAsset("Kentta"+ kenttaNro);
73        kentta.SetTileMethod('#', LisaaTaso);
74        kentta.SetTileMethod('*', LisaaTahti);
75        kentta.SetTileMethod('1', LisaaPelaaja);
76        kentta.SetTileMethod('X', Piikki);
77        kentta.SetTileMethod('A', Ammuspaketti);
78        kentta.SetTileMethod('P', LisaaPahis);
79        kentta.SetTileMethod('B', LisaaPahis2);
80        kentta.SetTileMethod('M', LuoMaali);
81        if (pelaajienMaara == 2)
82        {
83            kentta.SetTileMethod('2', LisaaPelaaja2);
84        }
85        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
86        Level.CreateBorders();
87        Level.Background.CreateGradient(Color.Black, Color.SkyBlue);
88
89        //Camera.StayInLevel = true;
90
91        LisaaOhjaimet();
92        Camera.Follow(pelaaja1);
93        if (pelaajienMaara == 2)
94        {
95            Camera.Follow(pelaaja1, pelaaja2);
96            Luotilaskuri2(); 
97           
98        }
99        LuoPistelaskuri();
100        Luotilaskuri();
101    }
102
103    void LisaaTaso(Vector paikka, double leveys, double korkeus)
104    {
105        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
106        taso.Position = paikka;
107        taso.Color = Color.Green;
108        Add(taso);
109    }
110
111    void LisaaTahti(Vector paikka, double leveys, double korkeus)
112    {
113        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys, korkeus);
114        tahti.IgnoresCollisionResponse = true;
115        tahti.Position = paikka;
116        tahti.Image = tahtiKuva;
117        tahti.Tag = "tahti";
118        Add(tahti);
119    }
120
121    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
122    {
123        pelihahmo1 = LoadAnimation("ukkoanimaatio");
124        pelaaja1 = new PlatformCharacter(leveys, korkeus);
125        pelaaja1.Position = paikka;
126        pelaaja1.Mass = pelaajaMassa;
127        pelaaja1.Image = pelaajanKuva1;
128        pelaaja1.AnimWalk = pelihahmo1;
129        pelaaja1.Weapon = new AssaultRifle(50, 10);
130        pelaaja1.Weapon.Image = asekuva;
131        pelaaja1.Weapon.FireRate = pelaajan1_ase_nopeus;
132        pelaaja1.Weapon.X = ase_X;
133        pelaaja1.Weapon.Y = ase_Y;
134        pelaaja1.Weapon.Ammo.Value = 100;
135        pelaaja1.Weapon.AmmoIgnoresGravity = false;
136        elamalaskuri = new IntMeter(10, 0, 20);
137        elamalaskuri.LowerLimit += delegate {PiikkiTormaa(pelaaja1, new PhysicsObject(1,1));};
138        AddCollisionHandler(pelaaja1, "tahti", TormaaTahteen);
139        AddCollisionHandler(pelaaja1,"piikki", PiikkiTormaa);
140        AddCollisionHandler(pelaaja1, "paketti1", Ammusotettu);
141        AddCollisionHandler(pelaaja1, "maali", maali);
142        AddCollisionHandler(pelaaja1, "PahisLuoti", pelaajaanOsuuLuoti);
143        ControllerOne.Listen(Button.A, ButtonState.Down, Hyppaa, "pelaaja hypää", pelaaja1, 300.0);
144        ControllerOne.ListenAnalog(AnalogControl.LeftStick, 0.1, Liikuta, "Pelaaja liikkuu vasemmalle/oikealle", pelaaja1);
145        ControllerOne.ListenAnalog(AnalogControl.RightStick, 0.1, Tahtaa, "tähtää aseella");
146        ControllerOne.Listen(Button.RightTrigger, ButtonState.Down, AmmuAseella, "ampuu", pelaaja1);
147        ControllerOne.Listen(Button.RightTrigger, ButtonState.Pressed, delegate { pelaaja1ampuu = true; }, null);
148        ControllerOne.Listen(Button.RightTrigger, ButtonState.Released, delegate {pelaaja1ampuu = false;} , null);
149        ControllerOne.Listen(Button.DPadLeft, ButtonState.Pressed, Cheathauska, "");
150        Add(pelaaja1);
151        pelaajaLista.Add(pelaaja1);
152    }
153    void Liikuta(PlatformCharacter hahmo, double nopeus)
154    {
155        hahmo.Walk(nopeus);
156    }
157
158    void Hyppaa(PlatformCharacter hahmo, double nopeus)
159    {
160        hahmo.Jump(nopeus);
161    }
162
163    void TormaaTahteen(PhysicsObject hahmo, PhysicsObject tahti)
164    {
165        pisteLaskuri.Value += 1;
166        maaliAani.Play();
167        MessageDisplay.Add("Sait Suklaata!");
168        tahti.Destroy();
169    }
170    void LisaaOhjaimet()
171    {
172
173        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
174        ControllerOne.Listen(Button.Start, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
175        ControllerTwo.Listen(Button.Start, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
176        Keyboard.Listen(Key.F1, ButtonState.Pressed, Cheat, "");
177        Keyboard.Listen(Key.F2, ButtonState.Down, LuotiCheat, "");
178        ControllerOne.Listen(Button.DPadDown, ButtonState.Down, LuotiCheat, "");
179        ControllerTwo.Listen(Button.DPadDown, ButtonState.Down, LuotiCheat, "");
180    }
181
182    void LisaaPelaaja2(Vector paikka, double leveys, double korkeus)
183    {
184        pelihahmo2 = LoadAnimation("toinenukkoanimaatio");
185        pelaaja2 = new PlatformCharacter(leveys, korkeus);
186        pelaaja2.Position = paikka;
187        pelaaja2.Mass = 4.0;
188        pelaaja2.Image = pelaajanKuva2;
189        pelaaja2.AnimWalk = pelihahmo2;
190        pelaaja2.Weapon = new AssaultRifle(50, 10);
191        pelaaja2.Weapon.FireRate = 1;
192        pelaaja2.Weapon.AmmoIgnoresGravity = false;
193        pelaaja2.Weapon.Image = null;
194        pelaaja2.Weapon.Image = asekuva2;
195        pelaaja2.Weapon.X = ase_X;
196        pelaaja2.Weapon.Y = -10.0;
197        pelaaja2.Weapon.Ammo.Value = 100;
198        elamalaskuri2 = new IntMeter(10, 0, 20);
199        elamalaskuri2.LowerLimit += delegate { PiikkiTormaa(pelaaja2, new PhysicsObject(1, 1)); };
200        AddCollisionHandler(pelaaja2, "tahti", TormaaTahteen);
201        AddCollisionHandler(pelaaja2, "piikki", PiikkiTormaa);
202        AddCollisionHandler(pelaaja2, "paketti1", Ammusotettu2);
203        AddCollisionHandler(pelaaja2, "maali", maali);
204        AddCollisionHandler(pelaaja2, "PahisLuoti",pelaajaanOsuuLuoti);
205        ControllerTwo.Listen(Button.A, ButtonState.Down, Hyppaa, "pelaaja hypää", pelaaja2, 300.0);
206        ControllerTwo.ListenAnalog(AnalogControl.LeftStick, 0.1, Liikuta, "Pelaaja liikkuu vasemmalle/oikealle", pelaaja2);
207        ControllerTwo.ListenAnalog(AnalogControl.RightStick, 0.1, Tahtaa2, "tähtää aseella");
208        ControllerTwo.Listen(Button.RightTrigger, ButtonState.Down, AmmuAseella2, "ampuu", pelaaja2);
209        ControllerTwo.Listen(Button.RightTrigger, ButtonState.Pressed, delegate { pelaaja2ampuu = true; }, null);
210        ControllerTwo.Listen(Button.RightTrigger, ButtonState.Released, delegate { pelaaja2ampuu = false; }, null);
211        Add(pelaaja2);
212        pelaajaLista.Add(pelaaja2);
213       
214    }
215    void Liikuta(AnalogState tatinTila, PlatformCharacter hahmo)
216    {
217        Vector tatinAsento = tatinTila.StateVector;
218        if (tatinAsento.X == 0.0)
219        {
220            return;
221        }
222        hahmo.Walk(pelaajan_nopeus * tatinAsento.X);
223
224    }
225    void Paavalikko()
226    {
227        MultiSelectWindow alkuvalikko = new MultiSelectWindow("pelin valikko", "aloita peli", "lopeta");
228        alkuvalikko.AddItemHandler(0, PelaajaValikko);
229        alkuvalikko.AddItemHandler(1, Exit);
230        Add(alkuvalikko);
231
232    }
233    void PelaajaValikko()
234    {
235        MultiSelectWindow alkuvalikko = new MultiSelectWindow("montako pelaajaa", "yksin", "kahdestaan");
236        alkuvalikko.AddItemHandler(0, delegate 
237        { 
238            LuoKentta(1);
239            pelaajienMaara = 1;
240        });
241        alkuvalikko.AddItemHandler(1, delegate
242        { 
243            LuoKentta(2);
244            pelaajienMaara = 2;
245        });
246        Add(alkuvalikko);
247    }
248    void Ammusosui(PhysicsObject ammus, PhysicsObject kohde)
249    {
250        ammus.Destroy();
251    }
252    void LuoPistelaskuri()
253    {
254         pisteLaskuri = new IntMeter(0);
255
256        Label pisteNaytto = new Label();
257        pisteNaytto.X = Screen.Left + pistelaskurin_X;
258        pisteNaytto.Y = Screen.Top - pistelaskurin_Y;
259        pisteNaytto.TextColor = Color.Brown;
260        pisteNaytto.Color = Color.Wheat;
261        pisteNaytto.Title = "Suklaa";
262
263        pisteNaytto.BindTo(pisteLaskuri);
264        Add(pisteNaytto);
265    }
266
267    void AmmuAseella(PlatformCharacter pelaaja1)
268    {
269        PhysicsObject ammus = pelaaja1.Weapon.Shoot();
270
271        if (ammus != null)
272        {
273            pelaaja1.Weapon.Angle += Angle.FromDegrees(RandomGen.NextInt(-10, 10));
274            luotilaskuri.Value--;
275            ammus.Velocity = pelaaja1.Weapon.Angle.GetVector().Normalize() * ammusnopeus1;
276            ammus.Size *= 0.8;
277            ammus.Mass = pelaajan1_luodin_massa;
278            ammus.Image = luoti;
279            ammus.Tag = "ammus";
280            ControllerOne.Vibrate(0.16, 0.16, 0.16, 0.16, 0.1);
281            ammus.MaximumLifetime = TimeSpan.FromSeconds(0.4);
282           
283        }
284    }
285
286    void Tahtaa(AnalogState tatinTila)
287    {
288        if (pelaaja1ampuu)
289        {
290            pelaaja1.Weapon.Angle = tatinTila.StateVector.Angle + Angle.FromDegrees(RandomGen.NextInt(-10, 10)); 
291        }
292        else
293        {
294            pelaaja1.Weapon.Angle = tatinTila.StateVector.Angle;
295        }
296    }
297
298    void PiikkiTormaa(PhysicsObject tormaaja, PhysicsObject kohde)
299    {
300        ClearAll();
301        Paavalikko();
302    }
303    void Piikki(Vector paikka, double leveys, double korkeus)
304    {
305        PhysicsObject piikki = PhysicsObject.CreateStaticObject(leveys, korkeus);
306        piikki.Position = paikka;
307        piikki.Image = piikkikuva;
308        piikki.CollisionIgnoreGroup = 10;
309        piikki.Tag = "piikki";
310        Add(piikki);
311    }
312
313
314    void AmmuAseella2(PlatformCharacter pelaaja2)
315    {
316        PhysicsObject ammus = pelaaja2.Weapon.Shoot();
317
318        if (ammus != null)
319        {
320            pelaaja2.Weapon.Angle += Angle.FromDegrees(RandomGen.NextInt(-1, 1));
321            ammus.Size *= 1.0;
322            ammus.Mass = pelaajan2_luodin_massa;
323            ammus.Image = luoti;
324            ammus.Tag = "sniper";
325            luotilaskuri2.Value--;
326            ammus.Velocity = pelaaja2.Weapon.Angle.GetVector().Normalize() * ammusnopeus2;
327            ControllerTwo.Vibrate(100.16, 100.16, 0.16, 0.16, 0.1);
328            ammus.MaximumLifetime = TimeSpan.FromSeconds(1.3);
329        }
330    }
331    void Tahtaa2(AnalogState tatinTila)
332    {
333        if (pelaaja2ampuu)
334        {
335            pelaaja2.Weapon.Angle = tatinTila.StateVector.Angle + Angle.FromDegrees(RandomGen.NextInt(-10, 10));
336        }
337        else
338        {
339            pelaaja2.Weapon.Angle = tatinTila.StateVector.Angle;
340        }
341
342    }
343    void Luotilaskuri()
344    {
345        luotilaskuri = new IntMeter(100);
346
347        Label pisteNaytto = new Label();
348        pisteNaytto.X = Screen.Right - pelaajan1_Luoti_laskuri_X;
349        pisteNaytto.Y = Screen.Top - pelaajan1_Luoti_laskuri_Y;
350        pisteNaytto.TextColor = Color.Red;
351        pisteNaytto.Color = Color.Black;
352        pisteNaytto.Title = "Pelaajan 1 Panokset";
353
354        pisteNaytto.BindTo(luotilaskuri);
355        Add(pisteNaytto);
356    }
357
358    void Luotilaskuri2()
359    {
360        luotilaskuri2 = new IntMeter(100);
361
362        Label pisteNaytto = new Label();
363        pisteNaytto.X = Screen.Right - pelaajan2_Luoti_laskuri_X;
364        pisteNaytto.Y = Screen.Top - pelaajan2_Luoti_laskuri_Y;
365        pisteNaytto.TextColor = Color.Blue;
366        pisteNaytto.Color = Color.Black;
367        pisteNaytto.Title = "Pelaajan 2 Panokset";
368        pisteNaytto.BindTo(luotilaskuri2);
369        Add(pisteNaytto);
370    }
371    void Ammuspaketti(Vector paikka, double leveys, double korkeus)
372    {
373        PhysicsObject ammuspaketti = PhysicsObject.CreateStaticObject(leveys, korkeus);
374        ammuspaketti.Position = paikka;
375        ammuspaketti.CollisionIgnoreGroup = 10;
376        ammuspaketti.Image = ammuspakettiKuva;
377        ammuspaketti.Tag = "paketti1";
378        Add(ammuspaketti);
379
380    }
381    void Ammusotettu(PhysicsObject hahmo, PhysicsObject kohde)
382    {
383        kohde.Destroy();
384        PlatformCharacter pelaaja1 = hahmo as PlatformCharacter;
385        pelaaja1.Weapon.Ammo.Value = 100;
386        luotilaskuri.Value = 100;
387    }
388    void Ammusotettu2(PhysicsObject hahmo, PhysicsObject kohde)
389    {
390        kohde.Destroy();
391        PlatformCharacter pelaaja2 = hahmo as PlatformCharacter;
392        pelaaja2.Weapon.Ammo.Value = 100;
393        luotilaskuri2.Value = 100;
394    }
395
396    void LisaaPahis(Vector paikka, double leveys, double korkeus)
397       {
398        Vihu pahis = new Vihu(leveys, korkeus);
399        pahis.Image = orkki;
400        pahis.Position = paikka;
401        pahis.CollisionIgnoreGroup = 10;
402        Add(pahis);
403        PlatformWandererBrain tasoAivot = new PlatformWandererBrain();
404        tasoAivot.Speed = pahisNopeus;
405        tasoAivot.JumpSpeed = 500;
406        tasoAivot.TriesToJump = true;
407        pahis.Brain = tasoAivot;
408        AssaultRifle pahiksenAse = new AssaultRifle(10, 10);
409        pahiksenAse.IsVisible = false;
410        pahis.Weapon = pahiksenAse;
411
412
413        Timer ampumisAjastin = new Timer();
414        ampumisAjastin.Interval = RandomGen.NextDouble(1,2);
415        ampumisAjastin.Timeout += delegate
416        {
417            PahisAmpuu(pahis);
418        };
419        ampumisAjastin.Start();
420        pahis.Destroyed += delegate { ampumisAjastin.Stop(); };
421
422        AddCollisionHandler(pahis, "ammus", delegate(PhysicsObject P, PhysicsObject A)
423        {
424            pahis.ElamaLaskuri.Value -= 1;
425            A.Destroy();
426        });
427        AddCollisionHandler(pahis, "sniper", delegate(PhysicsObject P, PhysicsObject A)
428        {
429            pahis.ElamaLaskuri.Value -= 3;
430            A.Destroy();
431        });
432       }
433
434    void PahisAmpuu(PlatformCharacter pahis)
435    {
436        PhysicsObject ammus = pahis.Weapon.Shoot();
437        int i = RandomGen.NextInt(0, pelaajaLista.Count);
438        GameObject kohde = pelaajaLista[i];
439
440        pahis.Weapon.Angle = ((kohde.Position + new Vector(RandomGen.NextDouble(-10, +10), RandomGen.NextDouble(-10, +10))) - pahis.Position).Angle;
441
442        if (ammus != null)
443        {
444            ammus.Velocity = pahis.Weapon.Angle.GetVector().Normalize() * (ammusnopeus1 * 0.5);
445            ammus.Size *= 1.0;
446            ammus.Image = luoti;
447            ammus.MaximumLifetime = TimeSpan.FromSeconds(0.7);
448            ammus.Tag = "PahisLuoti";
449
450        }
451    }
452   
453
454    void LisaaPahis2(Vector paikka, double leveys, double korkeus)
455    {
456        Vihu pahis2 = new Vihu(leveys, korkeus);
457        pahis2.Image = orkki2;
458        pahis2.Position = paikka;
459        pahis2.CollisionIgnoreGroup = 10;
460        pahis2.ElamaLaskuri.MaxValue = 10;
461        pahis2.ElamaLaskuri.Value = pahis2.ElamaLaskuri.MaxValue;
462        Add(pahis2);
463        PlatformWandererBrain tasoAivot = new PlatformWandererBrain();
464        tasoAivot.Speed = pahisNopeus;
465        tasoAivot.JumpSpeed = 500;
466        tasoAivot.TriesToJump = true;
467        pahis2.Brain = tasoAivot;
468        AddCollisionHandler(pahis2, "ammus", delegate(PhysicsObject P, PhysicsObject A)
469        {
470            pahis2.ElamaLaskuri.Value -= 1;
471            A.Destroy();
472        });
473        AddCollisionHandler(pahis2, "sniper", delegate(PhysicsObject P, PhysicsObject A)
474        {
475            pahis2.ElamaLaskuri.Value -= 3;
476            A.Destroy();
477        });
478    }
479    void maali(PhysicsObject pelaaja, PhysicsObject maali)
480    {
481        if (kenttaNro < kenttaMaara)
482        {
483            kenttaNro++;
484            LuoKentta(pelaajienMaara);
485        }
486       
487    }
488
489    void LuoMaali(Vector paikka, double leveys, double korkeus)
490    {
491        PhysicsObject voittomaali =  PhysicsObject.CreateStaticObject(leveys, korkeus);
492        voittomaali.Position = paikka;
493        voittomaali.Tag = "maali";
494        Add(voittomaali);
495    }
496
497    void Cheat()
498    {
499        if (kenttaNro < kenttaMaara)
500        {
501           
502            kenttaNro++;
503            LuoKentta(pelaajienMaara);
504        }
505    }
506    void pelaajaanOsuuLuoti(PhysicsObject pelaaja, PhysicsObject kohde)
507    {
508        elamalaskuri.Value -= 1;
509        elamalaskuri2.Value -= 1;
510    }
511    void LuotiCheat()
512    {
513        pelaaja1.Weapon.Ammo.Value = 100;
514        luotilaskuri.Value = 100;
515
516        pelaaja2.Weapon.Ammo.Value = 100;
517        luotilaskuri2.Value = 100;
518    }
519    void Cheathauska()
520    {
521        ammusnopeus2 = 999999999999999;
522        pelaajan1_ase_nopeus = 999999999999999;
523        pelaaja1.Weapon.InfiniteAmmo = true;
524        pelaaja2.Weapon.InfiniteAmmo = true;
525    }
526
527}
528class Vihu : PlatformCharacter
529{
530    private IntMeter elamaLaskuri = new IntMeter(5, 0, 5);
531    public IntMeter ElamaLaskuri { get { return elamaLaskuri; }
532        set { elamaLaskuri = value; }
533    }
534
535    public Vihu(double leveys, double korkeus)
536        : base(leveys, korkeus)
537    {
538        elamaLaskuri.LowerLimit += delegate { this.Destroy(); };
539    }
540}
Note: See TracBrowser for help on using the repository browser.