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

Revision 4277, 12.8 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        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, LiikutaPelaajaa, "Liikuta pelaajaa", pelaaja1, -nopeus);
63        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, LiikutaPelaajaa, "Liikuta pelaajaa", pelaaja1, nopeus);
64        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
65        ControllerOne.ListenAnalog(AnalogControl.RightTrigger, 0.1, AmmuAseella, "Käytä oikeaa liipaisinta aseen liipaisimena.", pelaaja1);     
66
67        ControllerTwo.Listen(Button.DPadLeft, ButtonState.Down, LiikutaPelaajaa, "Liikuta pelaajaa", pelaaja2, -nopeus);
68        ControllerTwo.Listen(Button.DPadRight, ButtonState.Down, LiikutaPelaajaa, "Liikuta pelaajaa", pelaaja2, nopeus);
69        ControllerTwo.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja2, hyppyNopeus);
70
71        ControllerThree.Listen(Button.DPadLeft, ButtonState.Down, LiikutaPelaajaa, "Liikuta pelaajaa", pelaaja3, -nopeus);
72        ControllerThree.Listen(Button.DPadRight, ButtonState.Down, LiikutaPelaajaa, "Liikuta pelaajaa", pelaaja3, nopeus);
73        ControllerThree.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja2, hyppyNopeus);
74
75        ControllerFour.Listen(Button.DPadLeft, ButtonState.Down, LiikutaPelaajaa, "Liikuta pelaajaa", pelaaja4, -nopeus);
76        ControllerFour.Listen(Button.DPadRight, ButtonState.Down, LiikutaPelaajaa, "Liikuta pelaajaa", pelaaja4, nopeus);
77        ControllerFour.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja2, hyppyNopeus);
78    }
79
80    void LiikutaPelaajaa(Pelaaja pelaaja, double nopeus)
81    {
82        pelaaja.Walk(nopeus);
83    }
84   
85
86    DoubleMeter LuoElamaLaskuri(double x, double y, Pelaaja pelaaja)
87    {
88        DoubleMeter elamaLaskuri = new DoubleMeter(10);
89        elamaLaskuri.MaxValue = 100.0;
90        elamaLaskuri.LowerLimit += delegate
91        {
92            ElamaLoppui(pelaaja);
93        };
94
95        ProgressBar elamaPalkki = new ProgressBar(150, 20);
96        elamaPalkki.X = x;
97        elamaPalkki.Y = y;
98        elamaPalkki.BindTo(elamaLaskuri);
99        Add(elamaPalkki);
100        return elamaLaskuri;
101    }
102
103    void ElamaLoppui(Pelaaja pelaaja)
104    {
105        MessageDisplay.Add("HaHaHa!!! You're dead!");
106        pelaaja.Destroy();
107        pelaaja.Weapon.Destroy();
108        Explosion rajahdys = new Explosion(50);
109        rajahdys.Position = pelaaja.Position;
110        Add(rajahdys);
111    }
112
113
114
115
116    void LuoKentta()
117    {
118        pelaaja1 = LuoPelaaja(RUUDUN_KOKO, RUUDUN_KOKO, pelaajanKuva);
119        pelaaja2 = LuoPelaaja(RUUDUN_KOKO, RUUDUN_KOKO, pelaajanKuva2);
120        pelaaja3 = LuoPelaaja(RUUDUN_KOKO, RUUDUN_KOKO, pelaajanKuva3);
121        pelaaja4 = LuoPelaaja(RUUDUN_KOKO, RUUDUN_KOKO, pelaajanKuva4);
122        TileMap kentta = TileMap.FromLevelAsset("pelitausta");
123        kentta.SetTileMethod('#', LisaaTaso);
124        kentta.SetTileMethod('N', LisaaPelaaja, pelaaja1);
125        kentta.SetTileMethod('M', LisaaPelaaja, pelaaja2);
126        kentta.SetTileMethod('V', LisaaPelaaja, pelaaja3);
127        kentta.SetTileMethod('B', LisaaPelaaja, pelaaja4);
128        kentta.SetTileMethod('H', LisaaTikkaat);
129        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
130        Level.CreateBorders();
131        Level.Background.CreateGradient(Color.White, Color.White);
132        elamaLaskuri1 = LuoElamaLaskuri(Screen.Right - 150, Screen.Top - 150, pelaaja1);
133        elamalaskuri2 = LuoElamaLaskuri(Screen.Left + 150, Screen.Top - 150, pelaaja2);
134        elamalaskuri3 = LuoElamaLaskuri(Screen.Right - 150, Screen.Bottom + 150, pelaaja3);
135        elamalaskuri4 = LuoElamaLaskuri(Screen.Left + 150, Screen.Bottom + 150, pelaaja4);
136
137    }
138
139    void AloitaPeli()
140    {
141    }
142
143    void ParhaatPisteet()
144    {
145    }
146
147    void LisaaTaso(Vector paikka, double leveys, double korkeus)
148    {
149        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
150        taso.Position = paikka;
151        taso.Color = Color.Blue;
152        Add(taso);
153    }
154    void LisaaTikkaat(Vector paikka, double leveys, double korkeus)
155    {
156        PhysicsObject tikkaat = PhysicsObject.CreateStaticObject(leveys, korkeus);
157        tikkaat.Position = paikka;
158        tikkaat.Image = tikasKuva;
159        tikkaat.IgnoresCollisionResponse = true;
160        tikkaat.Tag = "tikkaat";
161        Add(tikkaat);
162    }
163
164
165
166   
167
168    Pelaaja LuoPelaaja(double leveys, double korkeus, Image kuva)
169    {
170        Pelaaja pelaaja = new Pelaaja(leveys, korkeus);
171        pelaaja.Color = Color.Black;
172        pelaaja.Image = kuva;
173        return pelaaja;
174    }
175
176    void LisaaPelaaja(Vector paikka, double leveys, double korkeus, Pelaaja pelaaja)
177    {
178        pelaaja.Position = paikka;
179        pelaaja.Mass = 4.0;
180        // AddCollisionHandler(pelaaja1, "tikkaat", delegate(PhysicsObject tormaaja, PhysicsObject kohde) { pelaaja1.StopVertical(); });
181        Add(pelaaja);
182
183        pelaaja.Weapon = new PlasmaCannon(30, 10);
184        pelaaja.Weapon.Ammo.Value = 1000;
185        pelaaja.Weapon.ProjectileCollision = AmmusOsui;
186       
187
188        Timer onkoTikkaillaAjastin = new Timer();
189        onkoTikkaillaAjastin.Interval = 0.1;
190        onkoTikkaillaAjastin.Timeout += delegate
191        {
192            if (GetObjectsAt(pelaaja.AbsolutePosition, "tikkaat", pelaaja.Width / 2).Count > 0)
193            {
194                pelaaja.IgnoresGravity = true;
195                pelaaja.poisTikkailtaNappaimet.Disable();
196                pelaaja.tikkaillaNappaimet.Enable();
197            }
198            else
199            {
200                pelaaja.IgnoresGravity = false;
201                pelaaja.poisTikkailtaNappaimet.Enable();
202                pelaaja.tikkaillaNappaimet.Disable();
203            }
204        };
205        onkoTikkaillaAjastin.Start();
206
207        AssaultRifle ase = new AssaultRifle(20, 5);
208        ase.ProjectileCollision = AmmusOsui;
209        PlasmaCannon plasmaTykki = new PlasmaCannon(20, 5);
210        plasmaTykki.ProjectileCollision = AmmusOsui;
211        Cannon tykki = new Cannon(50, 10);
212        tykki.ProjectileCollision = AmmusOsui;
213        Grenade kranaatti = new Grenade(4.0);
214        ase.InfiniteAmmo = true;
215        plasmaTykki.InfiniteAmmo = true;
216        tykki.InfiniteAmmo = true;
217    }
218
219
220
221    void AmmuAseella(PlatformCharacter pelaaja)
222    {
223        PhysicsObject ammus = pelaaja.Weapon.Shoot();
224
225        if (ammus != null)
226        {
227            ammus.Size *= 3;
228            ammus.Image = luodinKuva;
229            ammus.MaximumLifetime = TimeSpan.FromSeconds(2.0);
230        }
231    }
232
233    void HeitaKranaatti(PlatformCharacter pelaaja)
234    {
235        Grenade kranu = new Grenade(4.0);
236        ClusterGrenade kranaatti = new ClusterGrenade(4.0, 2);
237        kranaatti.NumberOfClusters = 6;
238        pelaaja.Throw(kranu, Angle.FromDegrees(30), 10000);
239        kranu.Explosion.ShockwaveReachesObject += KranaattiOsui;
240        Add(kranaatti);
241    }
242
243
244    void KranaattiOsui(IPhysicsObject rajahdyksenKohde, Vector v)
245    {
246        rajahdyksenKohde.Destroy();
247    }
248
249    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
250    {
251        ammus.Destroy();
252        if (kohde == pelaaja1)
253        {
254            elamaLaskuri1.Value -= 1;
255        }
256
257        if (kohde == pelaaja2)
258        {
259            elamalaskuri2.Value -= 1;
260        }
261
262        if (kohde == pelaaja3)
263        {
264            elamalaskuri3.Value -= 1;
265        }
266
267        if (kohde == pelaaja4)
268        {
269            elamalaskuri4.Value -= 1;
270        }
271    }
272    void LisaaNappaimet()
273    {
274        pelaaja1.tikkaillaNappaimet = ControlContext.CreateSubcontext();
275        pelaaja1.poisTikkailtaNappaimet = ControlContext.CreateSubcontext();
276        pelaaja2.tikkaillaNappaimet = ControlContext.CreateSubcontext();
277        pelaaja2.poisTikkailtaNappaimet = ControlContext.CreateSubcontext();
278        pelaaja3.tikkaillaNappaimet = ControlContext.CreateSubcontext();
279        pelaaja3.poisTikkailtaNappaimet = ControlContext.CreateSubcontext();
280        pelaaja4.tikkaillaNappaimet = ControlContext.CreateSubcontext();
281        pelaaja4.poisTikkailtaNappaimet = ControlContext.CreateSubcontext();
282
283
284        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
285        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
286
287        Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
288        Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, "Liikkuu oikealle", pelaaja1, nopeus);
289
290        Keyboard.Listen(Key.Up, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus).InContext(pelaaja1.poisTikkailtaNappaimet);
291        Keyboard.Listen(Key.Up, ButtonState.Down, LiikkuuTikkailla, "Pelaaja liikkuu tikkailla", pelaaja1, 500.0).InContext(pelaaja1.tikkaillaNappaimet);
292        Keyboard.Listen(Key.Up, ButtonState.Released, LiikkuuTikkailla, "Pelaaja liikkuu tikkailla", pelaaja1, 0.0).InContext(pelaaja1.tikkaillaNappaimet);
293        Keyboard.Listen(Key.Down, ButtonState.Down, LiikkuuTikkailla, "Pelaaja liikkuu tikkailla", pelaaja1, -500.0).InContext(pelaaja1.tikkaillaNappaimet);
294        Keyboard.Listen(Key.Down, ButtonState.Released, LiikkuuTikkailla, "Pelaaja liikkuu tikkailla", pelaaja1, 0.0).InContext(pelaaja1.tikkaillaNappaimet);
295
296        Keyboard.Listen(Key.I, ButtonState.Down, Tahtaa, "Tähtää ylös", pelaaja1.Weapon, Angle.FromDegrees(1));
297        Keyboard.Listen(Key.O, ButtonState.Down, Tahtaa, "Tähtää alas", pelaaja1.Weapon, Angle.FromDegrees(-1));
298        Keyboard.Listen(Key.P, ButtonState.Down, AmmuAseella, "Ammu", pelaaja1);
299        Keyboard.Listen(Key.Y, ButtonState.Down, AmmuAseella, "Ammu", pelaaja2);
300
301        Keyboard.Listen(Key.A, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja2, -nopeus);
302        Keyboard.Listen(Key.D, ButtonState.Down, Liikuta, "Liikkuu oikealle", pelaaja2, nopeus);
303
304        Keyboard.Listen(Key.W, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja2, hyppyNopeus).InContext(pelaaja2.poisTikkailtaNappaimet);
305        Keyboard.Listen(Key.W, ButtonState.Down, LiikkuuTikkailla, "Pelaaja liikkuu tikkailla", pelaaja2, 500.0).InContext(pelaaja2.tikkaillaNappaimet);
306        Keyboard.Listen(Key.W, ButtonState.Released, LiikkuuTikkailla, "Pelaaja liikkuu tikkailla", pelaaja2, 0.0).InContext(pelaaja2.tikkaillaNappaimet);
307        Keyboard.Listen(Key.S, ButtonState.Down, LiikkuuTikkailla, "Pelaaja liikkuu tikkailla", pelaaja2, -500.0).InContext(pelaaja2.tikkaillaNappaimet);
308        Keyboard.Listen(Key.S, ButtonState.Released, LiikkuuTikkailla, "Pelaaja liikkuu tikkailla", pelaaja2, 0.0).InContext(pelaaja2.tikkaillaNappaimet);
309        Keyboard.Listen(Key.R, ButtonState.Down, Tahtaa, "Tähtää ylös", pelaaja2.Weapon, Angle.FromDegrees(1));
310        Keyboard.Listen(Key.T, ButtonState.Down, Tahtaa, "Tähtää alas", pelaaja2.Weapon, Angle.FromDegrees(-1));
311    }
312
313    void LiikkuuTikkailla(Pelaaja pelaaja, double nopeus)
314    {
315        pelaaja.Velocity = new Vector(0, nopeus);
316    }
317
318    void Tahtaa(Weapon ase, Angle kulma)
319    {
320        ase.Angle += kulma;
321    }
322
323    void Liikuta(PlatformCharacter hahmo, double nopeus)
324    {
325        hahmo.Walk(nopeus);
326    }
327
328    void Hyppaa(PlatformCharacter hahmo, double nopeus)
329    {
330        hahmo.Jump(nopeus);
331    }
332}
333
Note: See TracBrowser for help on using the repository browser.