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

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