source: 2012/23/LeoL/Tasohyppelypeli1.cs @ 2823

Revision 2823, 12.8 KB checked in by lemilaht, 7 years ago (diff)

Lisaa

Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9public class tasohyppelypeli : PhysicsGame
10{
11    string CurrentLevelFile = String.Empty;
12
13    DoubleMeter elamaMittari;
14    Image Ampujankuva = LoadImage("Ampuja");
15    Image DemoninKuva = LoadImage("Dem1.anm");
16    Image olionKuva = LoadImage("cafgar.anm");
17    Image magenKuva = LoadImage("Mage");
18    Image[] pelaajanAnim = LoadImages("pelaaja", "Pelaaja2", "Pelaaja3");
19    Image[] pelaajanAnimPeilattu;
20   
21    double nopeusYlos = 1250;
22    Vector nopeusOikea = new Vector(250, 0);
23    Vector nopeusVasen = new Vector(-250, 0);
24    Image pelaajanKuva = LoadImage("pelaaja");
25
26    PlatformCharacter pelaaja;
27
28    public override void Begin()
29    {
30        ClearAll();
31        MultiSelectWindow valikko = new MultiSelectWindow("Welcome to game",
32        "tutorial", "Start level 1", "Start level 2", "End");
33        valikko.ItemSelected += PainettiinValikonNappia;
34        Add(valikko);
35       
36
37
38
39    }
40    void 
41
42     lataaKenttä()
43    {
44    }
45
46    void LuoKenttä(string levelFile)
47    {
48        TileMap ruudut = TileMap.FromLevelAsset(levelFile);
49        ruudut.SetTileMethod('_', LuoPalikka);
50        ruudut.SetTileMethod('.', LuoSeina);
51        ruudut.SetTileMethod('"', LuoPiikki);
52        ruudut.SetTileMethod('!', LuoPelaaja);
53        ruudut.SetTileMethod('+', LuoCafgar);
54        ruudut.SetTileMethod('#', LuoDemoni);
55        ruudut.SetTileMethod('-', LuoAmpuja);
56        ruudut.SetTileMethod('=', LuoMaali);
57        ruudut.SetTileMethod(';', LuoMage);
58        ruudut.Execute(20, 20);
59        Level.Background.Color = Color.ForestGreen;
60        Camera.Follow(pelaaja);
61        Gravity = new Vector(0, -5000);
62
63        CurrentLevelFile = levelFile;
64    }
65
66    void LuoPalikka(Vector paikka, double leveys, double korkeus)
67    {
68        PhysicsObject palikka = PhysicsObject.CreateStaticObject(leveys, korkeus);
69        palikka.Position = paikka;
70        palikka.Shape = Shape.Rectangle;
71        palikka.Color = Color.DarkBrown;
72        Add(palikka);
73    }
74
75    void LuoSeina(Vector paikka, double leveys, double korkeus)
76    {
77        PhysicsObject seina = PhysicsObject.CreateStaticObject(leveys, korkeus);
78        seina.Position = paikka;
79        seina.Shape = Shape.Rectangle;
80        seina.Color = Color.DarkBrown;
81        Add(seina);
82    }
83
84    void LuoPiikki(Vector paikka, double leveys, double korkeus)
85    {
86        PhysicsObject piikki = PhysicsObject.CreateStaticObject(leveys, korkeus);
87        piikki.Position = paikka;
88        piikki.Shape = Shape.Triangle;
89        piikki.Color = Color.Black;
90        piikki.Tag = "piikki";
91        Add(piikki);
92    }
93
94    void AsetaOhjaimet()
95    {
96        Keyboard.Listen(Key.Escape, ButtonState.Down, ConfirmExit, "Poistu pelistä");
97        Keyboard.Listen(Key.A, ButtonState.Down, AsetaNopeus, "Pelaaja liikkuu vasemmalle", pelaaja, nopeusVasen);
98        Keyboard.Listen(Key.A, ButtonState.Released, AsetaNopeus, null, pelaaja, Vector.Zero);
99        Keyboard.Listen(Key.W, ButtonState.Pressed, Hyppy, "Pelaaja 1: Pelaaaja hyppää  ylös", pelaaja, nopeusYlos);
100        Keyboard.Listen(Key.D, ButtonState.Down, AsetaNopeus, "Pelaaja 1: Pelaaja Liikkuu Oikealle", pelaaja, nopeusOikea);
101        Keyboard.Listen(Key.D, ButtonState.Released, AsetaNopeus, null, pelaaja, Vector.Zero);
102        Keyboard.Listen(Key.E, ButtonState.Pressed, PelaajaLyo, null);
103        Keyboard.Listen(Key.Q, ButtonState.Pressed, PelaajaLyo2, null);
104    }
105
106    void LuoPelaaja(Vector paikka, double leveys, double korkeus)
107    {
108        pelaaja = new PlatformCharacter(20, 40);
109        pelaaja.Position = paikka;
110
111        pelaaja.Color = Color.Aquamarine;
112        pelaaja.Image = pelaajanKuva;
113        pelaaja.CanRotate = false;
114        AddCollisionHandler(pelaaja, "piikki", PelaajaKuolee);
115        AddCollisionHandler(pelaaja, "vihu", PelaajaMenettaa);
116        AddCollisionHandler(pelaaja, "Ampuja", PelaajaMenettaa2);
117        AddCollisionHandler(pelaaja, "cafgar", PelaajaMenettaa2);
118        AddCollisionHandler(pelaaja, "maali", SaavutitMaalin);
119        PelaajanElamat();
120        pelaaja.Mass = 5000;
121        pelaaja.Weapon = new PlasmaCannon(20, 5);
122        pelaaja.Weapon.IsVisible = false;
123       
124        Add(pelaaja);
125    }
126
127    void AsetaNopeus(PhysicsObject Pelaaja, Vector nopeus)
128    {
129        Pelaaja.Velocity = nopeus;
130    }
131
132
133
134    void PelaajaKuolee(PhysicsObject pelaaja, PhysicsObject kohde)
135    {
136        pelaaja.Destroy();
137        Replay();
138
139    }
140    void LuoCafgar(Vector paikka, double leveys, double korkeus)
141    {
142        PhysicsObject Cafgar = PhysicsObject.CreateStaticObject(20, 40);
143        Cafgar.Position = paikka;
144        Cafgar.Image = olionKuva;
145        Cafgar.Color = Color.Black;
146        Cafgar.Tag = "cafgar";
147        Cafgar.Brain = Aivot();
148        Add(Cafgar);
149    }
150    void LuoDemoni(Vector paikka, double leveys, double korkeus)
151    {
152        PhysicsObject Demoni = PhysicsObject.CreateStaticObject(20, 40);
153        Demoni.Position = paikka;
154        Demoni.Image = DemoninKuva;
155        Demoni.Color = Color.Black;
156        Demoni.Tag = "vihu";
157        Demoni.Brain = Aivot();
158        AddCollisionHandler(Demoni, "piikki", DemoniKuolee);
159        AddCollisionHandler(Demoni, "Ampuja", DemoniKuolee);
160        AddCollisionHandler(Demoni, "ammus", DemoniKuolee);
161        Demoni.Mass = 500;
162        Add(Demoni);
163    }
164    void Hyppy(PlatformCharacter pelaaja, double hypynVoima)
165    {
166        pelaaja.Jump(hypynVoima);
167    }
168    Brain Aivot()
169    {
170        FollowerBrain seuraajanAivot = new FollowerBrain(pelaaja);
171        seuraajanAivot.Speed = 150;
172        seuraajanAivot.TargetFollowDistance = 200;
173        seuraajanAivot.FollowAlways = true;
174        seuraajanAivot.TargetCloseDistance = 20;
175
176
177
178        seuraajanAivot.TargetClose += mitaTapahtuuKunOllaanLahella;
179        return seuraajanAivot;
180    }
181
182
183    void mitaTapahtuuKunOllaanLahella(object lahettajaAivot, EventArgs e)
184    {
185    }
186    void DemoniKuolee(PhysicsObject Demoni, PhysicsObject kohde)
187    {
188        Demoni.Destroy();
189    }
190    Brain AivotAmpuja()
191    {
192        FollowerBrain seuraajanAivot = new FollowerBrain(pelaaja);
193        seuraajanAivot.Speed = 0;
194        seuraajanAivot.TargetFollowDistance = 200;
195        seuraajanAivot.FollowAlways = true;
196        seuraajanAivot.TargetCloseDistance = 200;
197
198
199
200        seuraajanAivot.TargetClose += mitaTapahtuuKunOllaanLahella2;
201        return seuraajanAivot;
202    }
203
204
205    void mitaTapahtuuKunOllaanLahella2(object lahettajaAivot, EventArgs e)
206    {
207        ((lahettajaAivot as Brain).Owner as PlatformCharacter).Weapon.Angle = (pelaaja.Position - (lahettajaAivot as Brain).Owner.Position).Angle;
208        PhysicsObject ammus = ((lahettajaAivot as Brain).Owner as PlatformCharacter).Weapon.Shoot();
209        if (ammus != null)
210        {
211            AddCollisionHandler(ammus, pelaaja, PelaajaMenettaa2);
212            ammus.Tag = "ammus";
213        }
214    }
215    void LuoAmpuja(Vector paikka, double leveys, double korkeus)
216    {
217
218        PlatformCharacter Ampuja = new PlatformCharacter(20, 20);
219        Ampuja.IgnoresGravity = true;
220        Ampuja.IgnoresPhysicsLogics = true;
221        Ampuja.MaxVelocity = 0.0;
222        Ampuja.Position = paikka;
223        Ampuja.Image = Ampujankuva;
224        Ampuja.Color = Color.Black;
225        Ampuja.Tag = "Ampuja";
226        Ampuja.Brain = AivotAmpuja();
227        Ampuja.Weapon = new PlasmaCannon(5, 3);
228        Ampuja.Weapon.TimeBetweenUse = TimeSpan.FromSeconds(1);
229        Add(Ampuja);
230    }
231    void PelaajaMenettaa()
232    {
233    }
234    void PelaajanElamat()
235    {
236        elamaMittari = new DoubleMeter(50);
237        elamaMittari.MaxValue = 25;
238        ProgressBar elamaPalkki = new ProgressBar(150, 10);
239        elamaPalkki.BindTo(elamaMittari);
240        Add(elamaPalkki);
241
242        elamaPalkki.X = Screen.Right - 150;
243        elamaPalkki.Y = Screen.Top - 10;
244        elamaPalkki.Angle = Angle.RightAngle;
245        elamaPalkki.BarColor = Color.Green;
246        elamaPalkki.BorderColor = Color.White;
247        elamaPalkki.Angle = Angle.FromDegrees(90);
248        elamaMittari.Value = 50;
249
250        elamaMittari.LowerLimit += PelaajaTuhoutuu;
251       
252
253    }
254    void PelaajaMenettaa(PhysicsObject pelaaja, PhysicsObject kohde)
255    {
256        elamaMittari.Value -= 3;
257    }
258
259    void PelaajaTuhoutuu(double mittarinArvo)
260    {
261        pelaaja.Destroy();
262        MessageDisplay.Add("Dead");
263        Replay();
264    }
265    void PelaajaMenettaa2(PhysicsObject pelaaja, PhysicsObject kohde)
266    {
267        elamaMittari.Value -= 5;
268    }
269    void PelaajaLyo()
270    {
271        pelaaja.Animation = new Animation(pelaajanAnim);
272        pelaaja.Animation.Start();
273        pelaaja.Animation.Played += new Action(AnimValm);
274        pelaaja.Animation.FPS = 5;
275    }
276    void AnimValm()
277    {
278        pelaaja.Animation.Stop();
279    }
280    void PelaajaLyo2()
281    {
282        pelaaja.Animation = new Animation(pelaajanAnimPeilattu);
283        pelaaja.Animation.Start();
284        pelaaja.Animation.Played += new Action(AnimValm2);
285        pelaaja.Animation.FPS = 5;
286    }
287    void AnimValm2()
288    {
289        pelaaja.Animation.Stop();
290    }
291    void PainettiinValikonNappia(int valinta)
292    {
293        switch (valinta)
294        {
295            case 0:
296                 Aloitus("Tutorial map");
297                break;
298
299            case 1:
300                Aloitus("kartta");
301                break;
302
303            case 2:
304                Aloitus("Kentta2");
305                break;
306
307            case 3:
308                Exit();
309                break;
310        }
311    }
312    void Aloitus(string levelFile)
313    {
314       
315        pelaajanAnimPeilattu = Image.Mirror(pelaajanAnim);
316
317        LuoKenttä(levelFile);
318        lataaKenttä();
319        AsetaOhjaimet();
320    }
321   
322
323    void LuoMaali(Vector paikka, double leveys, double korkeus)
324    {
325        PhysicsObject maali = PhysicsObject.CreateStaticObject(40, 40);
326        maali.Position = paikka;
327        maali.Shape = Shape.Pentagon ;
328        maali.Tag = "maali";
329        maali.Color = Color.Blue;
330       
331        Add(maali);
332    }
333    void SaavutitMaalin(PhysicsObject pelaaja, PhysicsObject kohde)
334    {
335        YouWin();
336    }
337    void Replay()
338    {
339        ClearAll();
340        MultiSelectWindow valikko2 = new MultiSelectWindow("You Died", 
341        "Replay", "Menu", "End");
342        valikko2.ItemSelected += PainettiinValikonNappia2;
343        Add(valikko2);
344    }
345   void PainettiinValikonNappia2(int valinta)
346    {
347        switch (valinta)
348        {
349
350            case 0:
351                AloitaUudelleen();
352                break;
353
354            case 1:
355                Begin();
356                break;
357
358            case 2:
359                Exit();
360                break;
361        }
362    }
363    void YouWin()
364    {
365        ClearAll();
366        MultiSelectWindow valikko3 = new MultiSelectWindow("You Win", 
367        "Replay", "Menu", "End");
368       valikko3.ItemSelected += PainettiinValikonNappia3;
369        Add(valikko3);
370    }
371    void PainettiinValikonNappia3(int valinta)
372    {
373        switch (valinta)
374        {
375            case 0:
376                AloitaUudelleen();
377                break;
378
379            case 1:
380                Begin();
381                break;
382
383            case 2:
384                Exit();
385                break;
386        }
387    }
388   
389    void AloitaUudelleen()
390    {
391        ClearAll();
392        pelaajanAnimPeilattu = Image.Mirror(pelaajanAnim);
393
394        LuoKenttä(CurrentLevelFile);
395        lataaKenttä();
396        AsetaOhjaimet();
397    }
398    Brain AivotMage()
399    {
400        FollowerBrain seuraajanAivot = new FollowerBrain(pelaaja);
401        seuraajanAivot.Speed = 20;
402        seuraajanAivot.TargetFollowDistance = 200;
403        seuraajanAivot.FollowAlways = true;
404        seuraajanAivot.TargetCloseDistance = 300;
405
406
407
408        seuraajanAivot.TargetClose += mitaTapahtuuKunOllaanLahella3;
409        return seuraajanAivot;
410    }
411
412
413    void mitaTapahtuuKunOllaanLahella3(object lahettajaAivot, EventArgs e)
414    {
415        ((lahettajaAivot as Brain).Owner as PlatformCharacter).Weapon.Angle = (pelaaja.Position - (lahettajaAivot as Brain).Owner.Position).Angle;
416        PhysicsObject ammus = ((lahettajaAivot as Brain).Owner as PlatformCharacter).Weapon.Shoot();
417        if (ammus != null)
418        {
419            AddCollisionHandler(ammus, pelaaja, PelaajaMenettaa2);
420            ammus.Tag = "ammus";
421        }
422    }
423    void LuoMage(Vector paikka, double leveys, double korkeus)
424    {
425        PhysicsObject Mage = PhysicsObject.CreateStaticObject(20, 40);
426        Mage.Position = paikka;
427        Mage.Image = magenKuva;
428        Mage.Color = Color.Black;
429        Mage.Tag = "mage";
430        Mage.Brain = AivotMage();
431        Add(Mage);
432    }
433   
434}
435
Note: See TracBrowser for help on using the repository browser.