source: 2014/26/UkkoK/TasoHyppelyUkkoK/TasoHyppelyUkkoK/TasoHyppelyUkkoK/TasoHyppelyUkkoK.cs @ 5142

Revision 5142, 11.2 KB checked in by ukviveka, 8 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
10class Vihu : PlatformCharacter
11{
12    private IntMeter elamaLaskuri = new IntMeter(3, 0, 3);
13    public IntMeter ElamaLaskuri { get { return elamaLaskuri; } }
14
15    public Vihu(double leveys, double korkeus)
16        : base(leveys, korkeus)
17    {
18        elamaLaskuri.LowerLimit += delegate { this.Destroy(); };
19    }
20}
21
22
23public class TasoHyppelyUkkoK : PhysicsGame
24{
25    const double nopeus = 500;
26    const double hyppyNopeus = 1200;
27    const int RUUDUN_KOKO = 100;
28
29    PlatformCharacter pelaaja1;
30    IntMeter kranuLaskuri;
31
32
33    //Image pelaajanKuva = LoadImage("sankari");
34    // Image tahtiKuva = LoadImage("tahti");
35    // Image aseenKuva = LoadImage("AK-47");
36    //Image moronKuva = LoadImage("Mörkö");
37    // Image ammuksenKuva = LoadImage("Luoti");
38    Image taustaKuva = LoadImage("Taustakuva3");
39    //Image Tie = LoadImage("Tie");
40    Image Pilvi = LoadImage("Pilvi");
41    Image Zeus = LoadImage("Zeus");
42    Image Salama = LoadImage("Salama");
43    Image Tyhjä = LoadImage("Tyhjä");
44    Image Pilvipullo = LoadImage("Pilvipullo");
45    Image rajahtavaPilvi = LoadImage("RäjähtäväPilvi");
46    Image Devil = LoadImage("Devil");
47    Image Kolikko = LoadImage("Kolikko");
48    // Image Dragon = LoadImage("Lohikäärme");
49    Image AmmoCrate = LoadImage("AmmoCrate");
50    Image Portti = LoadImage("Portti");
51
52    IntMeter pisteLaskuri = new IntMeter(0);
53    DoubleMeter elamaLaskuri;
54
55
56    //IntMeter ammusLaskuri;
57
58
59    SoundEffect maaliAani = LoadSoundEffect("maali");
60
61    PlasmaCannon pelaajan1Ase;
62
63    int Kenttanumero = 1;
64
65
66    public override void Begin()
67    {
68        AlkuValikko();
69       // AloitaPeli();
70    }
71
72    void AloitaPeli()
73    {
74        ClearAll();
75        Gravity = new Vector(0, -1000);
76
77        if (Kenttanumero == 3)
78        {
79            Label Voittoteksti = new Label("Voitit pelin!!!");
80            Add(Voittoteksti);
81            Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
82        }
83        else
84        {
85            LuoKentta();
86            LisaaNappaimet();
87            LuoElamaLaskuri();
88            LuoKranuLaskuri();
89            LuoAmmusLaskuri();
90            //LuoKolikkoLaskuri();
91
92            Camera.Follow(pelaaja1);
93            Camera.ZoomFactor = 1.0;
94            Camera.StayInLevel = true;
95        }
96    }
97
98    void LuoKentta()
99    {
100        pisteLaskuri.Value=0;
101        TileMap kentta = TileMap.FromLevelAsset("kentta" + Kenttanumero);
102        kentta.SetTileMethod('#', LisaaTaso);
103        kentta.SetTileMethod('*', LisaaTahti);
104        kentta.SetTileMethod('P', LisaaPelaaja);
105        kentta.SetTileMethod('V', LisaaVihollinen);
106        kentta.SetTileMethod('M', LisaaMaali);
107        //kentta.SetTileMethod('S', LisaaSeina);
108        kentta.SetTileMethod('L', LisaaLaatikko);
109
110        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
111        Level.CreateBorders();
112        Level.Background.CreateGradient(Color.Black, Color.Green);
113        Level.Background.Image = taustaKuva;
114    }
115
116    void LisaaTaso(Vector paikka, double leveys, double korkeus)
117    {
118        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
119        taso.Position = paikka;
120        taso.Color = Color.DarkBlue;
121        taso.Image = Pilvi;
122        Add(taso);
123    }
124
125    void LisaaTahti(Vector paikka, double leveys, double korkeus)
126    {
127        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys, korkeus);
128        tahti.IgnoresCollisionResponse = true;
129        tahti.Position = paikka;
130        tahti.Image = Kolikko;
131        tahti.Tag = "tahti";
132        Add(tahti);
133        pisteLaskuri.Value++;
134    }
135
136    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
137    {
138        pelaaja1 = new PlatformCharacter(leveys, korkeus);
139        pelaaja1.Position = paikka;
140        pelaaja1.Mass = 4.0;
141        pelaaja1.Image = Zeus;
142        AddCollisionHandler(pelaaja1, "tahti", TormaaTahteen);
143        AddCollisionHandler(pelaaja1, "vihollinen", TormaaViholliseen);
144        AddCollisionHandler(pelaaja1, "laatikko", TormaaLaatikkoon);
145        AddCollisionHandler(pelaaja1, "Maali", TormaaMaaliin);
146
147        Add(pelaaja1);
148
149        pelaajan1Ase = new PlasmaCannon(90, 30);
150        pelaajan1Ase.Image = Tyhjä;
151
152        //Ammusten määrä aluksi:
153        pelaajan1Ase.Ammo.Value = 10;
154        pelaajan1Ase.Ammo.LowerLimit += AmmuksetLoppuu;
155
156
157
158        //Mitä tapahtuu kun ammus osuu johonkin?
159        pelaajan1Ase.ProjectileCollision = AmmusOsui;
160
161        pelaaja1.Add(pelaajan1Ase);
162
163    }
164
165    void AmmuksetLoppuu()
166    {
167        MessageDisplay.Add("Ammukset loppuivat!");
168    }
169
170    void LisaaNappaimet()
171    {
172        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
173        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
174
175        Keyboard.Listen(Key.A, ButtonState.Down, Liikuta, "Liikkuu oikealle", pelaaja1, -nopeus);
176        Keyboard.Listen(Key.D, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, nopeus);
177        Keyboard.Listen(Key.W, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
178        Keyboard.Listen(Key.Space, ButtonState.Down, AmmuAseella, "Ammu", pelaajan1Ase);
179        Keyboard.Listen(Key.G, ButtonState.Pressed, HeitaKranaatti, "Heitä kranaatti", pelaaja1);
180
181
182    }
183
184    void Liikuta(PlatformCharacter hahmo, double nopeus)
185    {
186        hahmo.Walk(nopeus);
187        pelaajan1Ase.AbsoluteAngle = hahmo.FacingDirection.Angle;
188    }
189
190    void Hyppaa(PlatformCharacter hahmo, double nopeus)
191    {
192        hahmo.Jump(nopeus);
193    }
194
195    void TormaaTahteen(PhysicsObject hahmo, PhysicsObject tahti)
196    {
197        pisteLaskuri.Value--;
198        MessageDisplay.Add("Keräsit kolikon!");
199        tahti.Destroy();
200    }
201
202    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
203    {
204        ammus.Destroy();
205
206        if (kohde.Tag == "vihollinen")
207        {
208            //kohde.Destroy();
209            (kohde as Vihu).ElamaLaskuri.Value--;
210            MessageDisplay.Add("Ammuit vihollista!");
211        }
212
213
214    }
215
216
217    void AmmuAseella(PlasmaCannon ase)
218    {
219        //if (ammusLaskuri.Value > 0)
220        //{
221            PhysicsObject ammus = ase.Shoot();
222
223           
224            if (ammus != null)
225            {
226                //ammusLaskuri.Value--;
227                ammus.Size *= 7;
228                ammus.Image = Salama;
229                ammus.MaximumLifetime = TimeSpan.FromSeconds(2.0);
230
231            }
232        //}
233    }
234
235    void LisaaVihollinen(Vector paikka, double leveys, double korkeus)
236    {
237        Vihu Vihollinen = new Vihu(leveys, korkeus);
238        Vihollinen.Position = paikka;
239        Vihollinen.Mass = 4.0;
240        Vihollinen.Image = Devil;
241        Vihollinen.Tag = "vihollinen";
242        Vihollinen.CollisionIgnoreGroup = 1;
243
244        Add(Vihollinen);
245
246        PlatformWandererBrain tasoAivot = new PlatformWandererBrain();
247        tasoAivot.Speed = 100;
248
249        Vihollinen.Brain = tasoAivot;
250    }
251
252    void HeitaKranaatti(PlatformCharacter pelaaja)
253    {
254        if (kranuLaskuri.Value > 0)
255        {
256            Grenade kranu = new Grenade(30.0);
257            kranu.FuseTime = TimeSpan.FromSeconds(1);
258            kranu.Explosion.AddShockwaveHandler("vihollinen", KranaattiOsui);
259            kranu.Image = Pilvipullo;
260            kranu.Explosion.Image = rajahtavaPilvi;
261            kranuLaskuri.Value--;
262            kranu.CollisionIgnoreGroup = 1;
263
264            pelaaja.Throw(kranu, Angle.FromDegrees(30), 10000);
265        }
266    }
267
268    void KranaattiOsui(IPhysicsObject rajahdyksenKohde, Vector v)
269    {
270        rajahdyksenKohde.Destroy();
271        MessageDisplay.Add("Pilvipullosi tuhosi vihollisen!");
272    }
273
274    void VihuTormaaTahteen(PhysicsObject hahmo, PhysicsObject tahti)
275    {
276        MessageDisplay.Add("Vihollinen tuhosi tähden!");
277        tahti.Destroy();
278
279    }
280
281    void LisaaSeina(Vector paikka, double leveys, double korkeus)
282    {
283        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
284        taso.Position = paikka;
285        // taso.Color = Color.DarkBlue;
286
287        Add(taso);
288    }
289
290    void LuoElamaLaskuri()
291    {
292        elamaLaskuri = new DoubleMeter(10);
293        elamaLaskuri.MaxValue = 10;
294        elamaLaskuri.LowerLimit += ElamaLoppui;
295
296        ProgressBar elamaPalkki = new ProgressBar(150, 20);
297        elamaPalkki.X = 0;
298        elamaPalkki.Y = Screen.Top - 20;
299        elamaPalkki.BindTo(elamaLaskuri);
300        Add(elamaPalkki);
301    }
302
303    void ElamaLoppui()
304    {
305        MessageDisplay.Add("Kuolit.");
306        pelaaja1.Destroy();
307
308        Timer.SingleShot(3, AloitaPeli);
309
310    }
311
312    void TormaaViholliseen(PhysicsObject hahmo, PhysicsObject vihollinen)
313    {
314        elamaLaskuri.Value--;
315        MessageDisplay.Add("Vihollinen vahingoitti sinua!");
316
317    }
318
319
320    void LuoKranuLaskuri()
321    {
322        kranuLaskuri = new IntMeter(3);
323
324        Label pisteNaytto = new Label();
325        pisteNaytto.X = 0;
326        pisteNaytto.Y = Screen.Top - 50;
327        pisteNaytto.TextColor = Color.LightBlue;
328        pisteNaytto.Color = Color.DarkBlue;
329        pisteNaytto.Title = "Pilvipulloja";
330
331        pisteNaytto.BindTo(kranuLaskuri);
332        Add(pisteNaytto);
333    }
334
335    void LisaaLaatikko(Vector paikka, double leveys, double korkeus)
336    {
337        PhysicsObject laatikko = PhysicsObject.CreateStaticObject(leveys, korkeus);
338        laatikko.IgnoresCollisionResponse = true;
339        laatikko.Position = paikka;
340        laatikko.Image = AmmoCrate;
341        laatikko.Tag = "laatikko";
342        Add(laatikko);
343    }
344
345    void TormaaLaatikkoon(PhysicsObject hahmo, PhysicsObject laatikko)
346    {
347
348        MessageDisplay.Add("Keräsit tarvikelaatikon!");
349        laatikko.Destroy();
350        kranuLaskuri.Value += 1;
351        pelaajan1Ase.Ammo.Value += 5;
352    }
353
354
355    void LuoAmmusLaskuri()
356    {
357        //ammusLaskuri = new IntMeter(pelaajan1Ase.Ammo.Value);
358
359        Label pisteNaytto = new Label();
360        pisteNaytto.X = 0;
361        pisteNaytto.Y = Screen.Top - 100;
362        pisteNaytto.TextColor = Color.LightBlue;
363        pisteNaytto.Color = Color.DarkBlue;
364        pisteNaytto.Title = "Ammuksia";
365
366        pisteNaytto.BindTo(pelaajan1Ase.Ammo);
367        Add(pisteNaytto);
368    }
369
370    void LisaaMaali(Vector paikka, double leveys, double korkeus)
371    {
372        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
373        taso.Position = paikka;
374        taso.Color = Color.DarkBlue;
375        taso.Image = Portti;
376        taso.Tag = "Maali";
377        Add(taso);
378    }
379
380    void TormaaMaaliin(PhysicsObject pelaaja1, PhysicsObject Maali)
381    {
382        //kenttä2 41 kolikkoo
383        if(pisteLaskuri.Value == 0)
384        {
385            Kenttanumero++;
386            AloitaPeli();
387        }
388       
389    }
390    void AlkuValikko()
391    {
392        MultiSelectWindow alkuValikko = new MultiSelectWindow("Pelin alkuvalikko",
393"Aloita peli", "Lopeta");
394        alkuValikko.AddItemHandler(0, AloitaPeli);
395       
396        alkuValikko.AddItemHandler(1, Exit);
397
398        Add(alkuValikko);
399
400    }
401}
Note: See TracBrowser for help on using the repository browser.