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

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