source: 2013/26/OskariN/Tasohyppelypeli1/Tasohyppelypeli1/Tasohyppelypeli1/Tasohyppelypeli1.cs @ 4324

Revision 4324, 15.3 KB checked in by osjoneuv, 8 years ago (diff)

Talletus.

Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9public class Pelaaja : PlatformCharacter
10{
11    public ListenContext tikkaillaNappaimet;
12    public ListenContext poisTikkailtaNappaimet;
13    public Pelaaja(double leveys, double korkeus)
14        : base(leveys, korkeus)
15    {
16        IsUpdated = true;
17    }
18
19    public override void Update(Time time)
20    {
21        base.Update(time);
22    }
23}
24
25public class Tasohyppelypeli1 : PhysicsGame
26{
27    const double nopeus = 375;
28    const double hyppyNopeus = 550;
29    const int RUUDUN_KOKO = 40;
30
31    Pelaaja pelaaja1;
32    Pelaaja pelaaja2;
33    Pelaaja pelaaja3;
34    Pelaaja pelaaja4;
35
36    Image luodinKuva = LoadImage("luoti");
37    Image pelaajanKuva2 = LoadImage("pelaaja2 (2)");
38    Image pelaajanKuva = LoadImage("player3");
39    Image pelaajanKuva3 = LoadImage("pelaaja3");
40    Image pelaajanKuva4 = LoadImage("pelaaja4");
41
42    Image tikasKuva = LoadImage("Tikkaat");
43
44    DoubleMeter elamaLaskuri1;
45    DoubleMeter elamalaskuri2;
46    DoubleMeter elamalaskuri3;
47    DoubleMeter elamalaskuri4;
48
49
50    public override void Begin()
51    {
52        Gravity = new Vector(0, -1000);
53        LuoKentta();
54        LisaaNappaimet();
55        Camera.ZoomToLevel();
56        MediaPlayer.Play("game music");
57        MultiSelectWindow alkuValikko = new MultiSelectWindow("Pelin alkuvalikko",
58        "Aloita peli", "Lopeta");
59        alkuValikko.Color = Color.Black;
60        Add(alkuValikko);
61
62       
63    }
64
65    void LiikutaPelaajaa(Pelaaja pelaaja, double nopeus)
66    {
67        pelaaja.Walk(nopeus);
68    }
69   
70
71    DoubleMeter LuoElamaLaskuri(double x, double y, Pelaaja pelaaja)
72    {
73        DoubleMeter elamaLaskuri = new DoubleMeter(100.0);
74        elamaLaskuri.MaxValue = 100.0;
75        elamaLaskuri.LowerLimit += delegate
76        {
77            ElamaLoppui(pelaaja);
78        };
79
80        ProgressBar elamaPalkki = new ProgressBar(150, 20);
81        elamaPalkki.X = x;
82        elamaPalkki.Y = y;
83        elamaPalkki.BindTo(elamaLaskuri);
84        Add(elamaPalkki);
85        return elamaLaskuri;
86    }
87
88    void LiikutaPelaajaaTatilla(AnalogState a, Pelaaja pelaaja)
89    {
90        Vector suunta = a.StateVector;
91        pelaaja.Walk(suunta.X * nopeus);
92
93    }
94    void ElamaLoppui(Pelaaja pelaaja)
95    {
96        MessageDisplay.Add("HaHaHa!!! You're dead!");
97        pelaaja.Destroy();
98        pelaaja.Weapon.Destroy();
99        Explosion rajahdys = new Explosion(50);
100        rajahdys.Position = pelaaja.Position;
101        Add(rajahdys);
102    }
103
104
105
106
107    void LuoKentta()
108    {
109        pelaaja1 = LuoPelaaja(RUUDUN_KOKO, RUUDUN_KOKO, pelaajanKuva);
110        pelaaja2 = LuoPelaaja(RUUDUN_KOKO, RUUDUN_KOKO, pelaajanKuva2);
111        pelaaja3 = LuoPelaaja(RUUDUN_KOKO, RUUDUN_KOKO, pelaajanKuva3);
112        pelaaja4 = LuoPelaaja(RUUDUN_KOKO, RUUDUN_KOKO, pelaajanKuva4);
113        TileMap kentta = TileMap.FromLevelAsset("pelitausta");
114        kentta.SetTileMethod('#', LisaaTaso);
115        kentta.SetTileMethod('N', LisaaPelaaja, pelaaja1);
116        kentta.SetTileMethod('M', LisaaPelaaja, pelaaja2);
117        kentta.SetTileMethod('V', LisaaPelaaja, pelaaja3);
118        kentta.SetTileMethod('B', LisaaPelaaja, pelaaja4);
119        kentta.SetTileMethod('H', LisaaTikkaat);
120        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
121        Level.CreateBorders();
122        Level.Background.CreateGradient(Color.White, Color.White);
123        elamaLaskuri1 = LuoElamaLaskuri(Screen.Right - 150, Screen.Top - 150, pelaaja1);
124        elamalaskuri2 = LuoElamaLaskuri(Screen.Left + 150, Screen.Top - 150, pelaaja2);
125        elamalaskuri4 = LuoElamaLaskuri(Screen.Right - 150, Screen.Bottom + 150, pelaaja4);
126        elamalaskuri3 = LuoElamaLaskuri(Screen.Left + 150, Screen.Bottom + 150, pelaaja3);
127
128    }
129
130    void AloitaPeli()
131    {
132    }
133
134    void ParhaatPisteet()
135    {
136    }
137
138    void LisaaTaso(Vector paikka, double leveys, double korkeus)
139    {
140        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
141        taso.Position = paikka;
142        taso.Color = Color.Blue;
143        Add(taso);
144    }
145    void LisaaTikkaat(Vector paikka, double leveys, double korkeus)
146    {
147        GameObject tikkaat = new GameObject(leveys, korkeus);
148
149        tikkaat.Position = paikka;
150        tikkaat.Image = tikasKuva;
151
152        //tikkaat.IgnoresPhysicsLogics = true;
153        tikkaat.Tag = "tikkaat";
154        Add(tikkaat);
155    }
156
157
158
159   
160
161    Pelaaja LuoPelaaja(double leveys, double korkeus, Image kuva)
162    {
163        Pelaaja pelaaja = new Pelaaja(leveys, korkeus);
164        pelaaja.Color = Color.Black;
165        pelaaja.Image = kuva;
166        return pelaaja;
167    }
168
169    void LisaaPelaaja(Vector paikka, double leveys, double korkeus, Pelaaja pelaaja)
170    {
171        pelaaja.Position = paikka;
172        pelaaja.Mass = 4.0;
173        // AddCollisionHandler(pelaaja1, "tikkaat", delegate(PhysicsObject tormaaja, PhysicsObject kohde) { pelaaja1.StopVertical(); });
174        Add(pelaaja);
175        pelaaja.Weapon = new Cannon(30, 10);
176        pelaaja.Weapon.Ammo.Value = 1000;
177        pelaaja.Weapon.ProjectileCollision = AmmusOsui;
178       
179
180        Timer onkoTikkaillaAjastin = new Timer();
181        onkoTikkaillaAjastin.Interval = 0.1;
182        onkoTikkaillaAjastin.Timeout += delegate
183        {
184            if (GetObjectsAt(pelaaja.AbsolutePosition, "tikkaat", pelaaja.Width / 2).Count > 0)
185            {
186                pelaaja.IgnoresGravity = true;
187                pelaaja.poisTikkailtaNappaimet.Disable();
188                pelaaja.tikkaillaNappaimet.Enable();
189            }
190            else
191            {
192                pelaaja.IgnoresGravity = false;
193                pelaaja.poisTikkailtaNappaimet.Enable();
194                pelaaja.tikkaillaNappaimet.Disable();
195            }
196        };
197        onkoTikkaillaAjastin.Start();
198       
199        AssaultRifle ase = new AssaultRifle(20, 5);
200        ase.ProjectileCollision = AmmusOsui;
201        PlasmaCannon plasmaTykki = new PlasmaCannon(20, 5);
202        plasmaTykki.ProjectileCollision = AmmusOsui;
203        Cannon tykki = new Cannon(50, 10);
204        tykki.ProjectileCollision = AmmusOsui;
205        Grenade kranaatti = new Grenade(4.0);
206        ase.InfiniteAmmo = true;
207        plasmaTykki.InfiniteAmmo = true;
208        tykki.InfiniteAmmo = true;
209    }
210
211    void AmmuLiipaisimella(AnalogState liipaisimenasento, Pelaaja pelaaja)
212    {
213        double liipasimenAsento = liipaisimenasento.State;
214        if (liipasimenAsento > 0.8)
215        {
216            AmmuAseella(pelaaja);
217        }
218    }
219
220    void AmmuAseella(PlatformCharacter pelaaja)
221    {
222        PhysicsObject ammus = pelaaja.Weapon.Shoot();
223
224        if (ammus != null)
225        {
226            ammus.Size *= 3;
227            ammus.Image = luodinKuva;
228            ammus.MaximumLifetime = TimeSpan.FromSeconds(2.0);
229        }
230    }
231
232    void HeitaKranaatti(PlatformCharacter pelaaja)
233    {
234        Grenade kranu = new Grenade(4.0);
235        ClusterGrenade kranaatti = new ClusterGrenade(4.0, 2);
236        kranaatti.NumberOfClusters = 6;
237        pelaaja.Throw(kranu, Angle.FromDegrees(30), 10000);
238        kranu.Explosion.ShockwaveReachesObject += KranaattiOsui;
239        Add(kranaatti);
240    }
241
242
243    void KranaattiOsui(IPhysicsObject rajahdyksenKohde, Vector v)
244    {
245        rajahdyksenKohde.Destroy();
246    }
247
248    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
249    {
250        ammus.Destroy();
251        if (kohde == pelaaja1)
252        {
253            elamaLaskuri1.Value -= 100;
254        }
255
256        if (kohde == pelaaja2)
257        {
258            elamalaskuri2.Value -= 100;
259        }
260
261        if (kohde == pelaaja3)
262        {
263            elamalaskuri3.Value -= 100;
264        }
265
266        if (kohde == pelaaja4)
267        {
268            elamalaskuri4.Value -= 100;
269        }
270    }
271    void LisaaNappaimet()
272    {
273        pelaaja1.tikkaillaNappaimet = ControlContext.CreateSubcontext();
274        pelaaja1.poisTikkailtaNappaimet = ControlContext.CreateSubcontext();
275        pelaaja2.tikkaillaNappaimet = ControlContext.CreateSubcontext();
276        pelaaja2.poisTikkailtaNappaimet = ControlContext.CreateSubcontext();
277        pelaaja3.tikkaillaNappaimet = ControlContext.CreateSubcontext();
278        pelaaja3.poisTikkailtaNappaimet = ControlContext.CreateSubcontext();
279        pelaaja4.tikkaillaNappaimet = ControlContext.CreateSubcontext();
280        pelaaja4.poisTikkailtaNappaimet = ControlContext.CreateSubcontext();
281
282        Keyboard.Listen(Key.Space, ButtonState.Pressed, AloitaPeliAlusta, null);
283
284
285        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
286        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
287
288        Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
289        Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, "Liikkuu oikealle", pelaaja1, nopeus);
290
291        Keyboard.Listen(Key.Up, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus).InContext(pelaaja1.poisTikkailtaNappaimet);
292        Keyboard.Listen(Key.Up, ButtonState.Down, LiikkuuTikkailla, "Pelaaja liikkuu tikkailla", pelaaja1, 500.0).InContext(pelaaja1.tikkaillaNappaimet);
293        Keyboard.Listen(Key.Up, ButtonState.Released, LiikkuuTikkailla, "Pelaaja liikkuu tikkailla", pelaaja1, 0.0).InContext(pelaaja1.tikkaillaNappaimet);
294        Keyboard.Listen(Key.Down, ButtonState.Down, LiikkuuTikkailla, "Pelaaja liikkuu tikkailla", pelaaja1, -500.0).InContext(pelaaja1.tikkaillaNappaimet);
295        Keyboard.Listen(Key.Down, ButtonState.Released, LiikkuuTikkailla, "Pelaaja liikkuu tikkailla", pelaaja1, 0.0).InContext(pelaaja1.tikkaillaNappaimet);
296
297        Keyboard.Listen(Key.I, ButtonState.Down, Tahtaa, "Tähtää ylös", pelaaja1.Weapon, Angle.FromDegrees(1));
298        Keyboard.Listen(Key.O, ButtonState.Down, Tahtaa, "Tähtää alas", pelaaja1.Weapon, Angle.FromDegrees(-1));
299        Keyboard.Listen(Key.P, ButtonState.Down, AmmuAseella, "Ammu", pelaaja1);
300        Keyboard.Listen(Key.Y, ButtonState.Down, AmmuAseella, "Ammu", pelaaja2);
301
302        Keyboard.Listen(Key.A, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja2, -nopeus);
303        Keyboard.Listen(Key.D, ButtonState.Down, Liikuta, "Liikkuu oikealle", pelaaja2, nopeus);
304
305        Keyboard.Listen(Key.W, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja2, hyppyNopeus).InContext(pelaaja2.poisTikkailtaNappaimet);
306        Keyboard.Listen(Key.W, ButtonState.Down, LiikkuuTikkailla, "Pelaaja liikkuu tikkailla", pelaaja2, 500.0).InContext(pelaaja2.tikkaillaNappaimet);
307        Keyboard.Listen(Key.W, ButtonState.Released, LiikkuuTikkailla, "Pelaaja liikkuu tikkailla", pelaaja2, 0.0).InContext(pelaaja2.tikkaillaNappaimet);
308        Keyboard.Listen(Key.S, ButtonState.Down, LiikkuuTikkailla, "Pelaaja liikkuu tikkailla", pelaaja2, -500.0).InContext(pelaaja2.tikkaillaNappaimet);
309        Keyboard.Listen(Key.S, ButtonState.Released, LiikkuuTikkailla, "Pelaaja liikkuu tikkailla", pelaaja2, 0.0).InContext(pelaaja2.tikkaillaNappaimet);
310        Keyboard.Listen(Key.R, ButtonState.Down, Tahtaa, "Tähtää ylös", pelaaja2.Weapon, Angle.FromDegrees(1));
311        Keyboard.Listen(Key.T, ButtonState.Down, Tahtaa, "Tähtää alas", pelaaja2.Weapon, Angle.FromDegrees(-1));
312
313        ControllerOne.ListenAnalog(AnalogControl.LeftStick, 0.1, LiikutaPelaajaaTatilla, "Liikuta pelaajaa tattia pyörittämällä.", pelaaja1).InContext(pelaaja1.poisTikkailtaNappaimet);
314        ControllerOne.ListenAnalog(AnalogControl.LeftStick, 0.1, LiikutaPelaajaaTatillaTikkailla, "Liikuta pelaajaa tattia pyörittämällä.", pelaaja1).InContext(pelaaja1.tikkaillaNappaimet);
315
316        ControllerTwo.ListenAnalog(AnalogControl.LeftStick, 0.1, LiikutaPelaajaaTatilla, "Liikuta pelaajaa tattia pyörittämällä.", pelaaja2).InContext(pelaaja2.poisTikkailtaNappaimet);
317        ControllerTwo.ListenAnalog(AnalogControl.LeftStick, 0.1, LiikutaPelaajaaTatillaTikkailla, "Liikuta pelaajaa tattia pyörittämällä.", pelaaja2).InContext(pelaaja2.tikkaillaNappaimet);
318
319        ControllerThree.ListenAnalog(AnalogControl.LeftStick, 0.1, LiikutaPelaajaaTatilla, "Liikuta pelaajaa tattia pyörittämällä.", pelaaja3).InContext(pelaaja3.poisTikkailtaNappaimet);
320        ControllerThree.ListenAnalog(AnalogControl.LeftStick, 0.1, LiikutaPelaajaaTatillaTikkailla, "Liikuta pelaajaa tattia pyörittämällä.", pelaaja3).InContext(pelaaja3.tikkaillaNappaimet);
321
322        ControllerFour.ListenAnalog(AnalogControl.LeftStick, 0.1, LiikutaPelaajaaTatilla, "Liikuta pelaajaa tattia pyörittämällä.", pelaaja4).InContext(pelaaja4.poisTikkailtaNappaimet);
323        ControllerFour.ListenAnalog(AnalogControl.LeftStick, 0.1, LiikutaPelaajaaTatillaTikkailla, "Liikuta pelaajaa tattia pyörittämällä.", pelaaja4).InContext(pelaaja4.tikkaillaNappaimet);
324
325        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
326        ControllerOne.ListenAnalog(AnalogControl.RightTrigger, 0.1, AmmuLiipaisimella, "Käytä oikeaa liipaisinta aseen liipaisimena.", pelaaja1);
327        ControllerOne.ListenAnalog(AnalogControl.RightStick, 0.1, TahtaaTatilla, "Tähtää oikeanpuoleista tattia pyörittämällä.", pelaaja1);
328
329       
330        ControllerTwo.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja2, hyppyNopeus);
331        ControllerTwo.ListenAnalog(AnalogControl.RightTrigger, 0.1, AmmuLiipaisimella, "Käytä oikeaa liipaisinta aseen liipaisimena.", pelaaja2);
332        ControllerTwo.ListenAnalog(AnalogControl.RightStick, 0.1, TahtaaTatilla, "Tähtää oikeanpuoleista tattia pyörittämällä.", pelaaja2);
333
334
335        ControllerThree.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja3, hyppyNopeus);
336        ControllerThree.ListenAnalog(AnalogControl.RightTrigger, 0.1, AmmuLiipaisimella, "Käytä oikeaa liipaisinta aseen liipaisimena.", pelaaja3);
337        ControllerThree.ListenAnalog(AnalogControl.RightStick, 0.1, TahtaaTatilla, "Tähtää oikeanpuoleista tattia pyörittämällä.", pelaaja3);
338
339       
340        ControllerFour.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja4, hyppyNopeus);
341        ControllerFour.ListenAnalog(AnalogControl.RightTrigger, 0.1, AmmuLiipaisimella, "Käytä oikeaa liipaisinta aseen liipaisimena.", pelaaja4);
342        ControllerFour.ListenAnalog(AnalogControl.RightStick, 0.1, TahtaaTatilla, "Tähtää oikeanpuoleista tattia pyörittämällä.", pelaaja4);
343
344    }
345
346    void AloitaPeliAlusta()
347    {
348        ClearAll();
349        Begin();
350
351    }
352
353
354    void LiikutaPelaajaaTatillaTikkailla(AnalogState a, Pelaaja pelaaja)
355    {
356        Vector suunta = a.StateVector;
357        pelaaja.Velocity = suunta * nopeus;
358
359    }
360
361
362    void LiikkuuTikkailla(Pelaaja pelaaja, double nopeus)
363    {
364        pelaaja.Velocity = new Vector(0, nopeus);
365    }
366
367    void TahtaaTatilla(AnalogState tatinTila, Pelaaja pelaaja)
368    {
369        Vector tatinAsento = tatinTila.StateVector;
370        pelaaja.Weapon.Angle = tatinAsento.Angle;
371    }
372
373    void Tahtaa(Weapon ase, Angle kulma)
374    {
375        ase.Angle += kulma;
376    }
377
378    void Liikuta(PlatformCharacter hahmo, double nopeus)
379    {
380        hahmo.Walk(nopeus);
381    }
382
383    void Hyppaa(PlatformCharacter hahmo, double nopeus)
384    {
385        hahmo.Jump(nopeus);
386    }
387}
388
Note: See TracBrowser for help on using the repository browser.