source: 2014/27/OttoR/GrazyGunFighters/GrazyGunFighters/GrazyGunFighters/GrazyGunFighters.cs @ 5304

Revision 5304, 12.2 KB checked in by otrolig, 7 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
9
10public class GrazyGunFighters : PhysicsGame
11{
12
13    private Animation soltunkävely;
14    private Animation soltunkävely2;
15    private Animation seiso1;
16    private Animation seiso2;
17
18    DoubleMeter elamaLaskuri;
19    DoubleMeter elamaLaskuri2;
20
21    IntMeter pisteLaskuri;
22    IntMeter pisteLaskuri2;
23
24    const double nopeus = 147;
25    const double hyppyNopeus = 720;
26    const int RUUDUN_KOKO = 40;
27
28
29    PlatformCharacter pelaaja1;
30    PlatformCharacter pelaaja2;
31
32    AssaultRifle pelaajan1Ase;
33    AssaultRifle pelaajan2Ase;
34
35   
36
37    Image pelikuva = LoadImage("Solttu2");
38    Image pelaajankuva = LoadImage("Solttu");
39    Image taustaKuva = LoadImage("taustakuva");
40    Image tasokuva = LoadImage("vesi");
41    Image atasokuva = LoadImage("lankku");
42    Image btasokuva = LoadImage("metalli");
43    Image putkipommi = LoadImage("putkipommi");
44
45    Vector alkupaikka1;
46    Vector alkupaikka2;
47
48    public override void Begin()
49    {
50        LuoAlkuvalikko();
51    }
52
53    void aloitapeli1()
54    {
55        MediaPlayer.Play("taustamusa");
56
57
58        LuoElamaLaskuri();
59        LuoElamaLaskuri2();
60
61        soltunkävely = LoadAnimation("Solttu1 animaatio");
62        soltunkävely2 = LoadAnimation("Solttu2 animaatio");
63        seiso1 = LoadAnimation("seiso1");
64        seiso2 = LoadAnimation("seiso2");
65        Gravity = new Vector(0, -1500);
66
67        LuoKentta();
68        LisaaNappaimet();
69
70        LuoPistelaskuri();
71        LuoPistelaskuri2();
72
73        Camera.ZoomFactor = -30.0;
74        Camera.StayInLevel = true;
75    }
76
77    void LuoPistelaskuri()
78    {
79        pisteLaskuri = new IntMeter(0);
80
81        Label pisteNaytto = new Label();
82        pisteNaytto.X = Screen.Left + 750;
83        pisteNaytto.Y = Screen.Top - 100;
84        pisteNaytto.TextColor = Color.White;
85        pisteNaytto.Color = Color.Blue;
86
87        pisteNaytto.BindTo(pisteLaskuri);
88        Add(pisteNaytto);
89    }
90
91    void LuoPistelaskuri2()
92    {
93        pisteLaskuri2 = new IntMeter(0);
94
95        Label pisteNaytto = new Label();
96        pisteNaytto.X = Screen.Right - 750;
97        pisteNaytto.Y = Screen.Top - 100;
98        pisteNaytto.TextColor = Color.White;
99        pisteNaytto.Color = Color.Red;
100
101        pisteNaytto.BindTo(pisteLaskuri2);
102        Add(pisteNaytto);
103    }
104
105    void LuoElamaLaskuri()
106    {
107        elamaLaskuri = new DoubleMeter(100);
108        elamaLaskuri.MaxValue = 100;
109        elamaLaskuri.LowerLimit += ElamaLoppui;
110
111        ProgressBar elamaPalkki = new ProgressBar(500, 20);
112        elamaPalkki.X = Screen.Right - 350;
113        elamaPalkki.Y = Screen.Top - 1050;
114        elamaPalkki.BindTo(elamaLaskuri);
115
116        //Taustaväri:
117        elamaPalkki.Color = Color.Red;
118
119        //Palkin väri:
120        elamaPalkki.BarColor = Color.Green;
121
122        //Reunan väri:
123        elamaPalkki.BorderColor = Color.Black;
124
125
126        Add(elamaPalkki);
127    }
128
129    void ElamaLoppui2()
130    {
131        pisteLaskuri2.Value++;
132        pelaaja2.Position = alkupaikka2;
133        elamaLaskuri2.Value = 100;
134    }
135
136    void ElamaLoppui()
137    {
138        pisteLaskuri.Value++;
139       
140        pelaaja1.Position = alkupaikka1;
141        elamaLaskuri.Value = 100;
142    }
143
144    void LuoElamaLaskuri2()
145    {
146        elamaLaskuri2 = new DoubleMeter(100);
147        elamaLaskuri2.MaxValue = 100;
148        elamaLaskuri2.LowerLimit += ElamaLoppui2;
149
150        ProgressBar elamaPalkki2 = new ProgressBar(500, 20);
151        elamaPalkki2.X = Screen.Left + 350;
152        elamaPalkki2.Y = Screen.Top - 1050;
153        elamaPalkki2.BindTo(elamaLaskuri2);
154
155        //Taustaväri:
156        elamaPalkki2.Color = Color.Red;
157
158        //Palkin väri:
159        elamaPalkki2.BarColor = Color.Green;
160
161        //Reunan väri:
162        elamaPalkki2.BorderColor = Color.Black;
163
164
165        Add(elamaPalkki2);
166    }
167
168    void HeitaKranaatti(PlatformCharacter pelaaja)
169    {
170        Grenade kranu = new Grenade(10.0);
171        pelaaja.Throw(kranu, Angle.FromDegrees(40), 10500);
172        kranu.Explosion.MaxRadius = 96;
173        kranu.Explosion.AddShockwaveHandler("vihollinen", KranaattiOsui);
174        kranu.CollisionIgnoreGroup = 1;
175        kranu.Image = putkipommi;
176    }
177
178    void Teevahinkoa(IPhysicsObject kohde, double määrä)
179    {
180        if (kohde == pelaaja1)
181        {
182            elamaLaskuri.Value -= määrä;
183        }
184        else
185        {
186            elamaLaskuri2.Value -= määrä;
187        }
188    }
189
190    void KranaattiOsui(IPhysicsObject rajahdyksenKohde, Vector v)
191    {
192        Teevahinkoa(rajahdyksenKohde, 30);
193    }
194
195    void RäjähdysOsui(IPhysicsObject rajahdyksenKohde, Vector v)
196    {
197        Teevahinkoa(rajahdyksenKohde, 15);
198    }
199
200
201    void LuoKentta()
202    {
203        TileMap kentta = TileMap.FromLevelAsset("kentta1");
204        kentta.SetTileMethod('#', LisaaTaso);
205        kentta.SetTileMethod('-', LisaaTaso2);
206        kentta.SetTileMethod('*', LisaaTahti);
207        kentta.SetTileMethod('R', LisaaPelaaja);
208        kentta.SetTileMethod('B', LisaaPelaaja2);
209        kentta.SetTileMethod('E', LisaaTaso3);
210        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
211        Level.CreateBorders();
212        Level.Background.CreateGradient(Color.White, Color.SkyBlue);
213
214    }
215
216
217
218
219
220    void LisaaTaso(Vector paikka, double leveys, double korkeus)
221    {
222        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
223        taso.Position = paikka;
224        taso.Size = new Vector(40, 40);
225        taso.Image = atasokuva;
226        taso.Color = Color.Brown;
227        Add(taso);
228    }
229
230    void LisaaTaso3(Vector paikka, double leveys, double korkeus)
231    {
232        PhysicsObject taso3 = PhysicsObject.CreateStaticObject(leveys, korkeus);
233        taso3.Position = paikka;
234        taso3.Size = new Vector(40, 40);
235        taso3.Image = tasokuva;
236        taso3.Color = Color.Blue;
237        taso3.CollisionIgnoreGroup = 1;
238        taso3.Tag = "myrkky";
239
240        Add(taso3, 1);
241
242    }
243
244    void LisaaTahti(Vector paikka, double leveys, double korkeus)
245    {
246        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys, korkeus);
247        tahti.IgnoresCollisionResponse = true;
248        tahti.Position = paikka;
249
250        Add(tahti);
251    }
252    void LisaaTaso2(Vector paikka, double leveys, double korkeus)
253    {
254        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
255        taso.Position = paikka;
256        taso.Size = new Vector(40, 23);
257        taso.Color = Color.Gray;
258        taso.Image = btasokuva;
259        Add(taso);
260    }
261
262    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
263    {
264        pelaaja1 = new PlatformCharacter(leveys, korkeus);
265        pelaaja1.Position = paikka;
266        pelaaja1.Mass = 4.0;
267        pelaaja1.Image = pelaajankuva;
268        pelaaja1.AnimWalk = new Animation(soltunkävely);
269        pelaaja1.AnimIdle = new Animation(seiso1);
270        pelaaja1.Tag = "vihollinen";
271        pelaaja1.CollisionIgnoreGroup = 1;
272
273        alkupaikka1 = paikka;
274
275        pelaajan1Ase = new AssaultRifle(30, 10);
276        pelaajan1Ase.Y = 10;
277        pelaajan1Ase.IsVisible = false;
278
279        pelaajan1Ase.InfiniteAmmo = true;
280        pelaajan1Ase.ProjectileCollision = AmmusOsui;
281        pelaajan1Ase.FireRate = 1;
282
283        pelaaja1.Add(pelaajan1Ase);
284
285
286        Add(pelaaja1);
287
288        AddCollisionHandler(pelaaja1, "myrkky", PelaajaOsuiMyrkkyyn);
289
290    }
291    void LisaaPelaaja2(Vector paikka, double leveys, double korkeus)
292    {
293
294        pelaaja2 = new PlatformCharacter(leveys, korkeus);
295        pelaaja2.Position = paikka;
296        pelaaja2.Mass = 4.0;
297        pelaaja2.Image = pelikuva;
298        pelaaja2.Animation = new Animation(soltunkävely2);
299        pelaaja2.AnimWalk = new Animation(soltunkävely2);
300        pelaaja2.AnimIdle = new Animation(seiso2);
301        pelaaja2.Tag = "vihollinen";
302        pelaaja2.CollisionIgnoreGroup = 1;
303
304        alkupaikka2 = paikka;
305
306        pelaajan2Ase = new AssaultRifle(30, 10);
307        pelaajan2Ase.Y = 10;
308        pelaajan2Ase.IsVisible = false;
309        //Ammusten määrä aluksi:
310        pelaajan2Ase.InfiniteAmmo = true;
311        pelaajan2Ase.FireRate = 1;
312        //Mitä tapahtuu kun ammus osuu johonkin?
313        pelaajan2Ase.ProjectileCollision = AmmusOsui;
314
315        pelaaja2.Add(pelaajan2Ase);
316
317
318        Add(pelaaja2);
319        AddCollisionHandler(pelaaja2, "myrkky", PelaajaOsuiMyrkkyyn);
320
321    }
322
323
324    void PelaajaOsuiMyrkkyyn(PhysicsObject pelaaja, PhysicsObject myrkky)
325    {
326        if (myrkky.Tag.Equals("myrkky"))
327        {
328
329        }
330    }
331
332    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
333    {
334        ammus.Destroy();
335        Explosion räjähdys = new Explosion(50);
336        räjähdys.Position = ammus.Position;
337        räjähdys.AddShockwaveHandler("vihollinen", RäjähdysOsui);
338        Add(räjähdys);
339    }
340
341
342
343    void LisaaNappaimet()
344    {
345        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
346        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
347
348        Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
349        Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, nopeus);
350        Keyboard.Listen(Key.Up, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
351
352        Keyboard.Listen(Key.End, ButtonState.Pressed, HeitaKranaatti, "Heitä kranaatti", pelaaja1);
353        Keyboard.Listen(Key.D2, ButtonState.Pressed, HeitaKranaatti, "Heitä kranaatti", pelaaja2);
354
355        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
356
357        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
358        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
359        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
360
361        Keyboard.Listen(Key.A, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja2, -nopeus);
362        Keyboard.Listen(Key.D, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja2, nopeus);
363        Keyboard.Listen(Key.W, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja2, hyppyNopeus);
364
365        Keyboard.Listen(Key.Delete, ButtonState.Down, AmmuAseella, "Ammu", pelaaja1, pelaajan1Ase);
366
367        Keyboard.Listen(Key.D1, ButtonState.Down, AmmuAseella, "Ammu", pelaaja2, pelaajan2Ase);
368
369
370        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
371        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
372        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
373
374
375        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
376    }
377
378    void AmmuAseella(PlatformCharacter pelaaja, AssaultRifle ase)
379    {
380        ase.AbsoluteAngle = pelaaja.FacingDirection.Angle;
381        PhysicsObject ammus = ase.Shoot();
382
383        if (ammus != null)
384        {
385            ammus.X += pelaaja.FacingDirection.GetVector().X * 30;
386            ammus.CollisionIgnoreGroup = 0;
387            ammus.Size *= 1.5;
388            ammus.Image = LoadImage("ammus");
389            ammus.MaximumLifetime = TimeSpan.FromSeconds(2.0);
390
391        }
392    }
393
394
395    void Liikuta(PlatformCharacter hahmo, double nopeus)
396    {
397        hahmo.Walk(nopeus);
398
399
400
401
402
403    }
404    void LuoAlkuvalikko()
405    {
406
407        MultiSelectWindow alkuValikko = new MultiSelectWindow("GrazyGunFighters",
408        "Deathmatch", "Exit");
409        alkuValikko.AddItemHandler(0, aloitapeli1);
410        alkuValikko.AddItemHandler(1, Exit);
411
412
413        Add(alkuValikko);
414
415    }
416
417    void Hyppaa(PlatformCharacter hahmo, double nopeus)
418    {
419        hahmo.Jump(nopeus);
420    }
421
422    void TormaaTahteen(PhysicsObject hahmo, PhysicsObject tahti)
423    {
424
425        MessageDisplay.Add("Keräsit tähden!");
426        tahti.Destroy();
427    }
428
429
430
431}
Note: See TracBrowser for help on using the repository browser.