source: 2015/koodauskerho/GordeyZ/Tasohyppelypeli4/Tasohyppelypeli4/Tasohyppelypeli4/Tasohyppelypeli4.cs @ 7139

Revision 7139, 14.7 KB checked in by sieerinn, 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
9class Pelaaja : PlatformCharacter
10{
11    public IntMeter[] Ammukset;
12    public int ValittuAse = 0;
13
14    private IntMeter elamaLaskuri = new IntMeter(5, 0, 5);
15    public IntMeter ElamaLaskuri { get { return elamaLaskuri; } }
16
17    public Pelaaja(double leveys, double korkeus)
18        : base(leveys, korkeus)
19    {
20        Ammukset = new IntMeter[Tasohyppelypeli4.ammusKuvat.Length];
21        for (int i = 0; i < Ammukset.Length; i++)
22        {
23            Ammukset[i] = new IntMeter(0);
24            elamaLaskuri.LowerLimit += delegate { this.Destroy(); };
25        }
26    }
27}
28
29public class Tasohyppelypeli4 : PhysicsGame
30{
31    const double nopeus = 400;
32    const double hyppyNopeus = 750;
33    const int RUUDUN_KOKO = 40;
34
35    double nopeuskerroin = 1;
36
37    bool mp = false;
38
39    public static Image[] ammusKuvat = LoadImages("Ammus", "ammus2", "ammus3", "ammus4", "ammus5");
40
41    int sydamia = 3;
42    Widget sydamet;
43
44    Pelaaja pelaaja1;
45    Pelaaja pelaaja2;
46
47    Image aseKuva = LoadImage("Ase");
48    Image ammusKuva = LoadImage("Ammus");
49    static Image pelaajanKuva = LoadImage("Gordey3");
50    Animation pelaajaAnim = new Animation(pelaajanKuva);
51    Image hyppyKuva = LoadImage("Gordey4");
52    static Image ampumisKuva = LoadImage("Gordey5");
53    Animation ampumisAnim = new Animation(ampumisKuva);
54    Image seinänKuva = LoadImage("gordeytile");
55    Image tahtiKuva = LoadImage("tahti");
56    Image vihuKuva = LoadImage("vihu");
57    Image piikkiKuva = LoadImage("piikki");
58    Image miinaKuva = LoadImage("miina");
59    Image boostKuva = LoadImage("boost");
60    Image sydanKuva = LoadImage("hart");
61    Image miekanKuva = LoadImage("ammus2");
62    Image ammus3Kuva = LoadImage("ammus3");
63    Image pelaaja2Kuva = LoadImage("pelaaja2");
64    Animation pelaaja2Anim;
65    Image pelaaja2hyppyKuva = LoadImage("pelaaja2hyppaa");
66    static Image pelaaja2ampumisKuva = LoadImage("pelaaja2ampuu");
67    Animation pelaaja2ampumisAnim = new Animation(ampumisKuva);
68    public Image inventorynKuva = LoadImage("inventory");
69
70    SoundEffect maaliAani = LoadSoundEffect("maali");
71
72    public override void Begin()
73    {
74        pelaaja2Anim = new Animation(pelaaja2Kuva);
75        AloitaPeli();
76    }
77
78    public void AloitaPeli()
79    {
80        ClearAll();
81        Gravity = new Vector(0, -1000);
82
83        LuoKentta();
84        LisaaNappaimet();
85        LuoElamaLaskuri();
86
87        IsMouseVisible = true;
88
89        Camera.Follow(pelaaja1, pelaaja2);
90        Camera.ZoomFactor = 2;
91    }
92
93    void KaytaTavaraa(PhysicsObject tavara)
94    {
95        MessageDisplay.Add("Kaytit tavaraa");
96    }
97
98    void LuoElamaLaskuri()
99    {
100        HorizontalLayout asettelu = new HorizontalLayout();
101        asettelu.Spacing = 10;
102
103        sydamet = new Widget(asettelu);
104        sydamet.Color = Color.Transparent;
105        sydamet.X = Screen.Center.X;
106        sydamet.Y = Screen.Top - 30;
107        Add(sydamet);
108
109        for (int i = 0; i < sydamia; i++)
110        {
111            Widget sydan = new Widget(30, 30, Shape.Rectangle);
112            sydan.Image = sydanKuva;
113            sydamet.Add(sydan);
114        }
115    }
116
117    void LuoKentta()
118    {
119        TileMap Gordey2 = TileMap.FromLevelAsset("kentta1");
120        Gordey2.SetTileMethod('#', LisaaTaso);
121        Gordey2.SetTileMethod('*', LisaaTahti);
122        Gordey2.SetTileMethod('N', LisaaPelaaja1);
123        Gordey2.SetTileMethod('U', LisaaPelaaja2);
124        Gordey2.SetTileMethod('V', LisaaVihu);
125        Gordey2.SetTileMethod('P', LisaaPiikki);
126        Gordey2.SetTileMethod('M', LisaaMiina);
127        Gordey2.SetTileMethod('X', LisaaMoottoripyora);
128
129        Gordey2.SetTileMethod('1', LisaaAmmus, 1);
130        Gordey2.SetTileMethod('2', LisaaAmmus, 2);
131        Gordey2.SetTileMethod('3', LisaaAmmus, 3);
132        Gordey2.SetTileMethod('4', LisaaAmmus, 4);
133        Gordey2.SetTileMethod('5', LisaaAmmus, 5);
134
135        Gordey2.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
136        Level.CreateBorders();
137        Level.Background.Color = Color.Crimson;
138
139    }
140
141    void LisaaTaso(Vector paikka, double leveys, double korkeus)
142    {
143        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
144        taso.Position = paikka;
145        taso.Image = seinänKuva;
146        Add(taso);
147    }
148
149    void LisaaTahti(Vector paikka, double leveys, double korkeus)
150    {
151        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys, korkeus);
152        tahti.IgnoresCollisionResponse = true;
153        tahti.Position = paikka;
154        tahti.Image = tahtiKuva;
155        tahti.Tag = "tahti";
156        Add(tahti);
157    }
158
159    void LisaaAmmus(Vector paikka, double leveys, double korkeus, int ase)
160    {
161        PhysicsObject ammus = PhysicsObject.CreateStaticObject(leveys, korkeus);
162        ammus.IgnoresCollisionResponse = true;
163        ammus.Position = paikka;
164        ammus.Image = ammusKuvat[ase - 1];
165        ammus.Tag = "ammus" + ase;
166        Add(ammus);
167    }
168
169    Pelaaja LisaaPelaaja(Vector paikka, double leveys, double korkeus, double ammusKuvatX)
170    {
171        Pelaaja pelaaja = new Pelaaja(leveys, korkeus);
172        pelaaja.Position = paikka;
173        pelaaja.Mass = 4.0;
174
175        pelaaja.Weapon = new AssaultRifle(30, 5);
176        pelaaja.Weapon.Image = aseKuva;
177        pelaaja.Weapon.FireRate = 5.0;
178        pelaaja.Weapon.ProjectileCollision = AmmusOsui;
179        Grenade kranaatti = new Grenade(4.0);
180
181        for (int i = 1; i < ammusKuvat.Length; i++)
182        {
183            Label kuvake = new Label();
184            kuvake.Image = ammusKuvat[i];
185            kuvake.Width = 30;
186            kuvake.Height = 30;
187            kuvake.X = ammusKuvatX;
188            kuvake.Y = (-Screen.Height / 2 + 100) + i * 50;
189            Add(kuvake);
190
191            Label ammusTeksti = new Label();
192            ammusTeksti.BindTo(pelaaja.Ammukset[i]);
193            ammusTeksti.Y = kuvake.Y;
194            ammusTeksti.X = kuvake.X + 50;
195            Add(ammusTeksti);
196        }
197
198        AddCollisionHandler(pelaaja, "tahti", TormaaTahteen);
199        AddCollisionHandler(pelaaja, "ammus1", (PhysicsObject a, PhysicsObject b) => TormaaAmmukseen(a, b, 1));
200        AddCollisionHandler(pelaaja, "ammus2", (PhysicsObject a, PhysicsObject b) => TormaaAmmukseen(a, b, 2));
201        AddCollisionHandler(pelaaja, "ammus3", (PhysicsObject a, PhysicsObject b) => TormaaAmmukseen(a, b, 3));
202        AddCollisionHandler(pelaaja, "ammus4", (PhysicsObject a, PhysicsObject b) => TormaaAmmukseen(a, b, 4));
203        AddCollisionHandler(pelaaja, "ammus5", (PhysicsObject a, PhysicsObject b) => TormaaAmmukseen(a, b, 5));
204        AddCollisionHandler(pelaaja, "vihu", TormaaVihuun);
205        Add(pelaaja);
206        return pelaaja;
207    }
208
209    void LisaaPelaaja1(Vector paikka, double leveys, double korkeus)
210    {
211        pelaaja1 = LisaaPelaaja(paikka, leveys, korkeus, -Screen.Width / 2 + 100);
212        pelaaja1.Image = pelaajanKuva;
213        pelaaja1.AnimJump = new Animation(hyppyKuva);
214        pelaaja1.AnimIdle = pelaajaAnim;
215    }
216    void LisaaPelaaja2(Vector paikka, double leveys, double korkeus)
217    {
218        pelaaja2 = LisaaPelaaja(paikka, leveys, korkeus, Screen.Width / 2 - 300);
219        pelaaja2.Image = pelaaja2Kuva;
220        pelaaja2.AnimJump = new Animation(pelaaja2hyppyKuva);
221        pelaaja2.AnimIdle = pelaaja2Anim;
222    }
223
224    void TormaaVihuun(PhysicsObject pelaaja, PhysicsObject vihu)
225    {
226        Explosion poks = new Explosion(200);
227        poks.Position = pelaaja.Position;
228        Add(poks);
229        pelaaja.Destroy();
230
231        MenetaElama();
232    }
233
234    void MenetaElama()
235    {
236        if (sydamia > 1)
237        {
238            var sydan = sydamet.Objects[0];
239            sydamet.Objects.Remove(sydan);
240            sydamia--;
241
242            Timer.SingleShot(3, AloitaPeli);
243        }
244        else
245        {
246            GameOver();
247        }
248    }
249
250    void GameOver()
251    {
252        ClearAll();
253        Label viesti = new Label("Game over");
254        Add(viesti);
255
256        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
257
258    }
259
260    void LisaaVihu(Vector paikka, double leveys, double korkeus)
261    {
262        PhysicsObject vihu = PhysicsObject.CreateStaticObject(leveys * 1, korkeus * 1);
263        vihu.IgnoresCollisionResponse = true;
264        vihu.Position = paikka;
265        vihu.Image = vihuKuva;
266        vihu.Tag = "vihu";
267        vihu.Oscillate(Vector.UnitX, 200, 0.1);
268        Add(vihu);
269    }
270
271    void LisaaPiikki(Vector paikka, double leveys, double korkeus)
272    {
273        PhysicsObject piikki = PhysicsObject.CreateStaticObject(leveys, korkeus);
274        piikki.IgnoresCollisionResponse = true;
275        piikki.Position = paikka;
276        piikki.Image = piikkiKuva;
277        piikki.Tag = "piikki";
278        AddCollisionHandler(piikki, MiinaanOsui);
279        Add(piikki);
280    }
281
282    void LisaaMiina(Vector paikka, double leveys, double korkeus)
283    {
284        PhysicsObject miina = PhysicsObject.CreateStaticObject(leveys, korkeus * 0.3);
285        miina.IgnoresCollisionResponse = true;
286        miina.Position = paikka - (Vector.UnitY * korkeus * 0.35);
287        miina.Image = miinaKuva;
288        miina.Tag = "miina";
289        AddCollisionHandler(miina, MiinaanOsui);
290        Add(miina);
291    }
292    void PiikkiinOsui(PhysicsObject piikki, PhysicsObject kohde)
293    {
294        Explosion poks = new Explosion(10);
295        poks.Position = kohde.Position;
296        Add(poks);
297        kohde.Destroy();
298    }
299
300    void MiinaanOsui(PhysicsObject piikki, PhysicsObject kohde)
301    {
302        Explosion poks = new Explosion(10);
303        poks.Position = kohde.Position;
304        Add(poks);
305        kohde.Destroy();
306    }
307
308    void LisaaMoottoripyora(Vector paikka, double leveys, double korkeus)
309    {
310        PhysicsObject mp = PhysicsObject.CreateStaticObject(leveys, korkeus);
311        mp.IgnoresCollisionResponse = true;
312        mp.Position = paikka;
313        mp.Image = boostKuva;
314        mp.Tag = "boost";
315        AddCollisionHandler(mp, AjaMoottoripyoraa);
316        Add(mp);
317    }
318
319    void AjaMoottoripyoraa(PhysicsObject mp, PhysicsObject kohde)
320    {
321        mp.Destroy();
322        nopeuskerroin = 10;
323        Timer.SingleShot(5.0, delegate { nopeuskerroin = 3; });
324        //this.mp = true;
325    }
326
327    void LisaaNappaimet()
328    {
329        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
330        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
331
332        Keyboard.Listen(Key.A, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
333        Keyboard.Listen(Key.D, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, nopeus);
334        Keyboard.Listen(Key.W, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
335        Keyboard.Listen(Key.Up, ButtonState.Pressed, AmmuAseella, "Ampuu", pelaaja1);
336        Keyboard.Listen(Key.Down, ButtonState.Pressed, HeitaKranaatti, "Heittää kranaatin", pelaaja1);
337
338        Keyboard.Listen(Key.D1, ButtonState.Pressed, ValitseAse, "", pelaaja1, 1);
339        Keyboard.Listen(Key.D2, ButtonState.Pressed, ValitseAse, "", pelaaja1, 2);
340        Keyboard.Listen(Key.D3, ButtonState.Pressed, ValitseAse, "", pelaaja1, 3);
341        Keyboard.Listen(Key.D4, ButtonState.Pressed, ValitseAse, "", pelaaja1, 4);
342        Keyboard.Listen(Key.D5, ButtonState.Pressed, ValitseAse, "", pelaaja1, 5);
343
344        Keyboard.Listen(Key.NumPad4, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja2, -nopeus);
345        Keyboard.Listen(Key.NumPad6, ButtonState.Down, Liikuta, "Liikkuu oikealle", pelaaja2, nopeus);
346        Keyboard.Listen(Key.NumPad8, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja2, hyppyNopeus);
347        Keyboard.Listen(Key.NumPad0, ButtonState.Pressed, AmmuAseella, "Ampuu", pelaaja2);
348        Keyboard.Listen(Key.NumPad3, ButtonState.Pressed, HeitaKranaatti, "Heittää kranaatin", pelaaja2);
349
350        Keyboard.Listen(Key.Divide, ButtonState.Pressed, ValitseAse, "", pelaaja2, 1);
351        Keyboard.Listen(Key.Multiply, ButtonState.Pressed, ValitseAse, "", pelaaja2, 2);
352        Keyboard.Listen(Key.Subtract, ButtonState.Pressed, ValitseAse, "", pelaaja2, 3);
353        Keyboard.Listen(Key.Add, ButtonState.Pressed, ValitseAse, "", pelaaja2, 4);
354        Keyboard.Listen(Key.Enter, ButtonState.Pressed, ValitseAse, "", pelaaja2, 5);
355
356        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
357        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
358        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
359    }
360
361    void ValitseAse(Pelaaja pelaaja, int ase)
362    {
363        pelaaja.ValittuAse = ase - 1;
364        MessageDisplay.Add("Ase valittu: " + ase);
365    }
366
367    void HeitaKranaatti(PlatformCharacter pelaaja)
368    {
369        Grenade kranu = new Grenade(4.0);
370        pelaaja.Throw(kranu, Angle.FromDegrees(30), 10000);
371    }
372
373    void AmmuAseella(PlatformCharacter hahmo)
374    {
375        Pelaaja pelaaja = hahmo as Pelaaja;
376
377        if (pelaaja.ElamaLaskuri.Value <= 0)
378            return;
379
380        if (pelaaja.ValittuAse == 0 || pelaaja.Ammukset[pelaaja.ValittuAse].Value > 0)
381        {
382            pelaaja.PlayAnimation(ampumisAnim);
383
384            PhysicsObject ammus = pelaaja.Weapon.Shoot();
385            if (ammus != null)
386            {
387                pelaaja.Ammukset[pelaaja.ValittuAse].Value--;
388                ammus.Image = ammusKuvat[pelaaja.ValittuAse];
389            }
390        }
391    }
392
393    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
394    {
395        if (kohde.Tag.Equals("vihu"))
396        {
397            Explosion poks = new Explosion(500);
398            poks.Position = kohde.Position;
399            Add(poks);
400            kohde.Destroy();
401        }
402
403        if (kohde is Pelaaja)
404        6{
405            ((Pelaaja)kohde).ElamaLaskuri.Value--;
406        }
407
408        ammus.Destroy();
409    }
410
411    void Liikuta(PlatformCharacter hahmo, double nopeus)
412    {
413        hahmo.Walk(nopeus * nopeuskerroin);
414    }
415
416    void Hyppaa(PlatformCharacter pelaaja, double nopeus)
417    {
418        if (!mp)
419        {
420            pelaaja.ForceJump(nopeus);
421        }
422    }
423
424    void TormaaTahteen(PhysicsObject hahmo, PhysicsObject tahti)
425    {
426        maaliAani.Play();
427
428        tahti.Destroy();
429    }
430
431    void TormaaAmmukseen(PhysicsObject hahmo, PhysicsObject ammus, int ase)
432    {
433        Pelaaja pelaaja = hahmo as Pelaaja;
434        if (pelaaja != null)
435        {
436            ammus.Destroy();
437            pelaaja.Ammukset[ase - 1].Value += 1;
438        }
439    }
440}
Note: See TracBrowser for help on using the repository browser.