source: 2015/26/AkseliP/ekapeli2/ekapeli2/ekapeli2/ekapeli2.cs @ 6464

Revision 6464, 13.9 KB checked in by akpaloka, 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
9class Pelaaja : PlatformCharacter
10{
11    private IntMeter elamaLaskuri = new IntMeter(9, 0, 9);
12    public IntMeter ElamaLaskuri { get { return elamaLaskuri; } }
13
14    private IntMeter kranuLaskuri = new IntMeter(3, 0, 100);
15    public IntMeter KranuLaskuri { get { return kranuLaskuri; } }
16
17    public Pelaaja(double leveys, double korkeus)
18        : base(leveys, korkeus)
19    {
20        elamaLaskuri.LowerLimit += delegate {
21
22            PhysicsObject ruumis = new PhysicsObject(ekapeli2.LoadImage("pelaaja1 voitti"));
23            ruumis.Position = this.Position - new Vector(0, 30);
24            ruumis.Size = new Vector(50, 30);
25            ruumis.Angle = this.Angle;
26            ruumis.IgnoresPhysicsLogics = true;
27
28            ((ekapeli2)ekapeli2.Instance).Add(ruumis, 1);
29
30            Label voittonaytto = new Label("Ruumis!");
31            voittonaytto.Font = Font.DefaultLargeBold;
32            voittonaytto.TextColor = Color.LightCyan;
33
34            ((ekapeli2)ekapeli2.Instance).Add(voittonaytto);
35
36            Timer.SingleShot(5, delegate { 
37                //ruumis.Destroy();
38                ((ekapeli2)ekapeli2.Instance).Begin();
39            });
40
41            this.Destroy();
42 
43
44       
45        };
46    }
47}
48
49
50public class ekapeli2 : PhysicsGame
51{
52    const double nopeus = 200;
53    const double hyppyNopeus = 750;
54    const int RUUDUN_KOKO = 40;
55    const double maxZoom = 3.0;
56
57    Pelaaja pelaaja1;
58    Pelaaja pelaaja2;
59    Image elämäkuva = LoadImage("elämät");
60    Image elämäkuva2 = LoadImage("elämät2");
61    Image pelaajanKuva = LoadImage("hahmo");
62    Image tahtiKuva = LoadImage("tahti");
63    Image maakuva = LoadImage("ruoho");
64    Image multakuva = LoadImage("multa");
65    Image asekuva = LoadImage("ak47");
66    Image puukuva = LoadImage("puu");
67    Image seinäkuva1 = LoadImage("seinä1");
68    Image seinäkuva2 = LoadImage("seinä2");
69    Image pelaajakuva = LoadImage("hahmo1v");
70    Image pelaajakuva2 = LoadImage("hahmo2v");
71    Image pelaajakuva3 = LoadImage("hahmo3v");
72    SoundEffect kolikkoääni = LoadSoundEffect("kolikkoääni");
73    Image kranukuva2 = LoadImage("kranu");
74    Image laatikkokuva = LoadImage("laatikko");
75    private Image[] ukkelinKavely = LoadImages("hahmo", "hahmo2", "hahmo3");
76    Image[] räjähdyskuvat = LoadImages("räjähdys1", "räjähdys2", "räjähdys3", "räjähdys4", "räjähdys5");
77
78    Image[] kolikkokuvat = LoadImages("coin1", "coin2", "coin3", "coin4", "coin4", "coin5", "coin6", "coin7", "coin8", "coin9", "coin10");
79
80    SoundEffect maaliAani = LoadSoundEffect("maali");
81
82    public override void Begin()
83    {
84        ClearAll();
85        MultiSelectWindow alkuValikko = new MultiSelectWindow("Pelin alkuvalikko","Aloita peli", "Parhaat pisteet", "Lopeta");
86        Add(alkuValikko);
87
88        alkuValikko.AddItemHandler(0, AloitaPeli);
89        alkuValikko.AddItemHandler(1, ParhaatPisteet);
90        alkuValikko.AddItemHandler(2, Exit);
91
92        alkuValikko.Color = Color.SkyBlue;
93
94        IsMouseVisible = true;
95    }
96
97    void AloitaPeli()
98    {
99        Gravity = new Vector(0, -1000);
100
101        LuoKentta();
102        LisaaNappaimet();
103
104        //Camera.Follow(pelaaja1, pelaaja2);
105        //Camera.FollowXMargin = 100;
106        //Camera.FollowYMargin = 100;
107
108        Camera.StayInLevel = true;
109
110    }
111
112    void ParhaatPisteet()
113    {
114
115    }
116
117    void LuoKentta()
118    {
119        TileMap kentta = TileMap.FromLevelAsset("kentta1");
120        kentta.SetTileMethod('#', LisaaTaso);
121        kentta.SetTileMethod('*', LisaaTahti);
122        kentta.SetTileMethod('N', LisaaPelaaja1);
123        kentta.SetTileMethod('o', LisaaPelaaja2);
124        kentta.SetTileMethod('m', LisaaMulta);
125        kentta.SetTileMethod('p', LisaaPuu);
126        kentta.SetTileMethod('s', lisaaseinäkuva);
127        kentta.SetTileMethod('e', lisaaseinäkuva2);
128        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
129        Level.CreateBorders();
130        Level.Background.CreateGradient(Color.White, Color.SkyBlue);
131
132        Timer ajastin = new Timer();
133        ajastin.Interval = 10;
134        ajastin.Timeout += luolaatikko;
135        ajastin.Start();
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        taso.Image = maakuva;
144        Add(taso);
145    }
146
147    void LisaaTahti(Vector paikka, double leveys, double korkeus)
148    {
149        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys * 0.5, korkeus * 0.5);
150        tahti.IgnoresCollisionResponse = true;
151        tahti.Position = paikka;
152        tahti.Animation = new Animation(kolikkokuvat);
153        tahti.Animation.FPS = 15;
154        tahti.Animation.Start();
155        tahti.Tag = "tahti";
156        Add(tahti);
157    }
158
159    Pelaaja LisaaPelaaja(Vector paikka, double leveys, double korkeus)
160    {
161        Pelaaja pelaaja = new Pelaaja(leveys * 0.6, korkeus * 1.5);
162        pelaaja.Position = paikka;
163        pelaaja.Tag = "pelaaja";
164        //pelaaja.Tag = "vihollinen";
165        pelaaja.Mass = 4;
166        pelaaja.Image = pelaajanKuva;
167        pelaaja.CollisionIgnoreGroup = 1;
168        AddCollisionHandler(pelaaja, "tahti", TormaaTahteen);
169        Add(pelaaja);
170        AddCollisionHandler(pelaaja, "laatikko", tormaalaatikkoon);
171       
172       
173
174   
175
176        pelaaja.Animation = new Animation(ukkelinKavely);
177        pelaaja.AnimWalk = new Animation(ukkelinKavely);
178        //pelaaja1 on PlatformCharacter-tyyppinen
179        //pelaaja1.Animation.Start();
180        pelaaja.AnimIdle = pelaajanKuva;
181        pelaaja.Animation.FPS = 1;
182
183        pelaaja.Weapon = new AssaultRifle(30,20);
184        pelaaja.Weapon.Image = asekuva;
185        pelaaja.Weapon.X = 5;
186        pelaaja.Weapon.Y = -4;
187        pelaaja.Weapon.Ammo.Value = 1000;
188        pelaaja.Weapon.ProjectileCollision = AmmusOsui;
189
190        ProgressBar elamaPalkki = new ProgressBar(135, 15);
191        elamaPalkki.Y = 50;
192        elamaPalkki.BarImage = elämäkuva;
193        elamaPalkki.Image = elämäkuva2;
194        elamaPalkki.BindTo(pelaaja.ElamaLaskuri);
195        pelaaja.Add(elamaPalkki);
196
197        Label kranuNaytto = new Label();
198        kranuNaytto.Y = 70;
199        kranuNaytto.X = 5;
200        kranuNaytto.TextScale *= 0.5;
201        kranuNaytto.TextColor = Color.Black;
202        kranuNaytto.BindTo(pelaaja.KranuLaskuri);
203        pelaaja.Add(kranuNaytto);
204
205        Label kranukuva = new Label();
206        kranukuva.Image = kranukuva2;
207        kranukuva.Y = 70;
208        kranukuva.X = -5;
209        kranukuva.Size = new Vector(10, 10);
210        pelaaja.Add(kranukuva);
211
212        pelaaja.Destroyed += delegate
213        {
214            Explosion räjähdys = new Explosion(100);
215            Add(räjähdys);
216           
217        };
218
219        return pelaaja;
220    }
221
222    void LisaaPelaaja1(Vector paikka, double leveys, double korkeus)
223    {
224        pelaaja1 = LisaaPelaaja(paikka, leveys, korkeus);
225    }
226
227    void LisaaPelaaja2(Vector paikka, double leveys, double korkeus)
228    {
229        pelaaja2 = LisaaPelaaja(paikka, leveys, korkeus);
230    }
231
232    void LisaaNappaimet()
233    {
234        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
235        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
236        Mouse.Listen(MouseButton.Left, ButtonState.Pressed, AmmuAseella, "ampuu aseella", pelaaja1);
237        Mouse.ListenMovement(0.0, tähtääaseella1, "");
238
239        Keyboard.Listen(Key.A, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
240        Keyboard.Listen(Key.D, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, nopeus);
241        Keyboard.Listen(Key.Space, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
242        Mouse.Listen(MouseButton.Right, ButtonState.Pressed, HeitaKranaatti, "heittä kranaatin", pelaaja1);
243
244        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
245
246        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja2, -nopeus);
247        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja2, nopeus);
248        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja2, hyppyNopeus);
249        ControllerOne.Listen(Button.RightShoulder, ButtonState.Pressed, AmmuAseella, "ampuu aseella", pelaaja2);
250        ControllerOne.ListenAnalog(AnalogControl.RightStick, 0.1, tähtääaseella2, "");
251        ControllerOne.Listen(Button.LeftShoulder, ButtonState.Pressed, HeitaKranaatti, "heittää kranaatin", pelaaja2);
252
253        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
254    }
255
256    void Liikuta(PlatformCharacter hahmo, double nopeus)
257    {
258        hahmo.Walk(nopeus);
259    }
260
261    void Hyppaa(PlatformCharacter hahmo, double nopeus)
262    {
263        hahmo.Jump(nopeus);
264    }
265
266    void TormaaTahteen(PhysicsObject hahmo, PhysicsObject tahti)
267    {
268        kolikkoääni.Play();
269
270        MessageDisplay.Add("Keräsit tähden!");
271        tahti.Destroy();
272    }
273
274    void LisaaMulta(Vector paikka, double leveys, double korkeus)
275    {
276
277        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
278        taso.Position = paikka;
279        //taso.Color = Color.Blue;
280        taso.Image = multakuva;
281        Add(taso);
282    }
283
284    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
285    {
286        ammus.Destroy();
287
288        if (kohde.Tag.Equals("pelaaja"))
289        {
290            ((Pelaaja)kohde).ElamaLaskuri.Value -= 1;
291        }
292    }
293
294    void AmmuAseella(Pelaaja pelaaja)
295    {
296        if (pelaaja.ElamaLaskuri.Value == 0)
297        {
298            return;
299        }
300
301        PhysicsObject ammus = pelaaja.Weapon.Shoot();
302
303        if (ammus != null)
304        {
305            ammus.CollisionIgnoreGroup = 0;
306
307            ammus.Size *= 0.5;
308            //ammus.Image = ...
309            //ammus.MaximumLifetime = TimeSpan.FromSeconds(2.0);
310        }
311
312    }
313
314    void tähtääaseella1(AnalogState hiiri)
315    {
316        pelaaja1.Weapon.AbsoluteAngle = (Mouse.PositionOnWorld - pelaaja1.Position).Angle;
317        aserajoitus(pelaaja1);
318    }
319   
320    void tähtääaseella2(AnalogState tatti)
321    {
322        pelaaja2.Weapon.AbsoluteAngle = tatti.StateVector.Angle;
323        aserajoitus(pelaaja2);
324    }
325
326    void aserajoitus(Pelaaja pelaaja)
327    {
328        if (pelaaja.FacingDirection.GetVector().X > 0)
329        {
330            if (pelaaja.Weapon.AbsoluteAngle.Degrees > 90)
331                pelaaja.Weapon.AbsoluteAngle = Angle.FromDegrees(90);
332            if (pelaaja.Weapon.AbsoluteAngle.Degrees < -90)
333                pelaaja.Weapon.AbsoluteAngle = Angle.FromDegrees(-90);
334        }
335        else
336        {
337            if (Math.Abs(pelaaja.Weapon.AbsoluteAngle.Degrees) < 90)
338                pelaaja.Weapon.AbsoluteAngle = Angle.FromDegrees(-90);
339        }
340    }
341
342 
343    void LisaaPuu(Vector paikka, double leveys, double korkeus)
344    {
345        GameObject taso = new GameObject(leveys*4, korkeus*6);
346        taso.Position = paikka;
347        taso.Y += korkeus *2;
348        taso.Image = puukuva;
349        Add(taso, -1);
350    }
351
352    protected override void Update(Microsoft.Xna.Framework.GameTime gameTime)
353    {
354        base.Update(gameTime);
355
356        if (pelaaja1 == null || pelaaja2 == null)
357            return;
358
359        Vector zoomi = pelaaja2.Position - pelaaja1.Position;
360
361        Camera.Position = pelaaja1.Position + zoomi / 2;
362
363        double zoomiKerroin = 1500 / zoomi.Magnitude;
364
365        if (zoomiKerroin < maxZoom)
366        {
367            Camera.ZoomFactor = zoomiKerroin;
368        }
369        else
370        {
371            Camera.ZoomFactor = maxZoom;
372        }
373       
374       
375    }
376
377    void lisaaseinäkuva(Vector paikka, double leveys, double korkeus)
378    {
379        GameObject taso = new GameObject(leveys * 3, korkeus * 3);
380        taso.Position = paikka;
381        taso.Y += korkeus * 1;
382        taso.Image = seinäkuva1;
383        Add(taso, -2);
384    }
385
386    void lisaaseinäkuva2(Vector paikka, double leveys, double korkeus)
387    {
388        GameObject taso = new GameObject(leveys * 3, korkeus * 3);
389        taso.Position = paikka;
390        taso.Y += korkeus * 1;
391        taso.Image = seinäkuva2;
392        Add(taso, -2);
393    }
394
395    void HeitaKranaatti(Pelaaja pelaaja)
396    {
397        if (pelaaja.ElamaLaskuri.Value == 0||pelaaja.KranuLaskuri.Value==0)
398        {
399            return;
400        }
401
402        pelaaja.KranuLaskuri.Value--;
403
404        Grenade kranu = new Grenade(4.0);
405        kranu.Position = pelaaja.Position;
406        //pelaaja.Throw(kranu, pelaaja.Weapon.AbsoluteAngle, 15000);
407        kranu.Hit(pelaaja.Weapon.AbsoluteAngle.GetVector() * 15000);
408        kranu.CollisionIgnoreGroup = 1;
409        kranu.Explosion.Speed = 1000;
410        Add(kranu);
411        kranu.Image = kranukuva2;
412        kranu.Explosion.ShockwaveReachesObject += KranaattiOsui;
413
414    }
415
416    void KranaattiOsui(IPhysicsObject rajahdyksenKohde, Vector v)
417    {
418
419        if (rajahdyksenKohde is Pelaaja)
420        {
421            ((Pelaaja)rajahdyksenKohde).ElamaLaskuri.Value -= 3;
422        }
423    }
424
425    void luolaatikko()
426    {
427        PhysicsObject laatikko = new PhysicsObject(30, 30);
428        laatikko.X = RandomGen.NextDouble(Level.Left, Level.Right);
429        laatikko.Y = 0;
430        laatikko.Tag = "laatikko";
431        Add(laatikko);
432        laatikko.Image = laatikkokuva;
433   
434    }
435
436    void tormaalaatikkoon(PhysicsObject pelaaja, PhysicsObject laatikko)
437    {
438        laatikko.Destroy();
439
440        Timer.SingleShot(0.5,delegate
441        {
442        ((Pelaaja)pelaaja).KranuLaskuri.Value += 1;
443        });
444    }
445
446   
447
448
449
450
451}
Note: See TracBrowser for help on using the repository browser.