source: 2015/koodauskerho/AarreP/Tasohyppelypeli1/Tasohyppelypeli1/Tasohyppelypeli1/Tasohyppelypeli1.cs @ 8430

Revision 8430, 11.3 KB checked in by sieerinn, 3 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    private IntMeter elamaLaskuri = new IntMeter(3, 0, 3);
12    public IntMeter ElamaLaskuri { get { return elamaLaskuri; } }
13
14    public Pelaaja(double leveys, double korkeus)
15        : base(leveys, korkeus)
16    {
17       // elamaLaskuri.LowerLimit += delegate { this.Destroy(); };
18    }
19}
20public class Tasohyppelypeli1 : PhysicsGame
21{
22    const double nopeus = 200;
23    const double hyppyNopeus = 750;
24    const int RUUDUN_KOKO = 40;
25
26    PlatformCharacter pelaaja1;
27    PlatformCharacter pelaaja2;
28    Image pelaajanKuva = LoadImage("originalhahmo");
29    Image kukkaKuva = LoadImage("ampujakukka");
30    Image tahtiKuva = LoadImage("sydansydan");
31    Image vihuKuva = LoadImage("originalvihu");
32    Image KuolemaKuva = LoadImage("kuolema3");
33    Image AmpujaKuva = LoadImage("ampujahahmo");
34    Image pommiKuva = LoadImage("pommi");
35    Image[] animaatioKuvat = LoadImages("originalhahmo", "hahmosydan", "hahmosyosydan");
36    Image[] animaatioKuvat2 = LoadImages("originalhahmo", "originalhahmokävely1");
37    Image[] animaatioKuvat3 = LoadImages("originalvihu", "originalvihukavelee");
38    Image[] animaatioKuvat4 = LoadImages("originalvihu", "ammuttuvihu");
39    Image ammuttuvihuKuva = LoadImage("ammuttuvihu");
40    Image ammusKuva = LoadImage("ammushahmo");
41    Image rakettikukkaKuva = LoadImage("rakettikukka");
42    Image rakettihahmoKuva = LoadImage("rakettihahmo");
43    SoundEffect maaliAani = LoadSoundEffect("maali");
44
45    bool omistaaRakettirepun = false;
46
47    AssaultRifle pelaajan1Ase;
48
49    //...
50    public override void Begin()
51    {
52        Gravity = new Vector(0, -1000);
53
54        LuoKentta();
55        LisaaNappaimet();
56
57        Camera.Follow(pelaaja1, pelaaja2);
58        Camera.ZoomFactor = 1.2;
59        Camera.StayInLevel = true;
60
61        MediaPlayer.Play("musa");
62        MediaPlayer.IsRepeating = true;
63    }
64
65    void LuoKentta()
66    {
67        TileMap kentta = TileMap.FromLevelAsset("kentta1");
68        kentta.SetTileMethod('#', LisaaTaso);
69        kentta.SetTileMethod('*', LisaaTahti);
70        kentta.SetTileMethod('N', lisaapelaaja1);
71        kentta.SetTileMethod('M', lisaapelaaja2);
72        kentta.SetTileMethod('v', LisaaVihu);
73        kentta.SetTileMethod('A', LisaaKukka);
74        kentta.SetTileMethod('r', LisaaRakettiKukka);
75        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
76        Level.CreateBorders();
77        Level.Background.CreateGradient(Color.Gray, Color.Black);
78    }
79
80    void LisaaTaso(Vector paikka, double leveys, double korkeus)
81    {
82        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
83        taso.Position = paikka;
84        taso.Color = Color.Red;
85        Add(taso);
86    }
87
88    void LisaaTahti(Vector paikka, double leveys, double korkeus)
89    {
90        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys, korkeus);
91        tahti.IgnoresCollisionResponse = true;
92        tahti.Position = paikka;
93        tahti.Image = tahtiKuva;
94        tahti.Tag = "tahti";
95        Add(tahti);
96    }
97
98    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
99    {
100        ammus.Destroy();
101        if (kohde.Tag.ToString() == "vihu")
102        {
103            AmpuuVihun(kohde);
104        }
105    }
106
107    Pelaaja LisaaPelaaja(Vector paikka, double leveys, double korkeus)
108    {
109        Pelaaja pelaaja1 = new Pelaaja(50, 70);
110        pelaaja1.Position = paikka;
111        pelaaja1.Mass = 9.0;
112        pelaaja1.AnimWalk = new Animation(animaatioKuvat2);
113        pelaaja1.AnimWalk.FPS = 6;
114        pelaaja1.AnimIdle = new Animation(pelaajanKuva);
115        pelaaja1.Image = pelaajanKuva;
116        pelaaja1.Tag = "pelaaja";
117        AddCollisionHandler(pelaaja1, "tahti", TormaaTahteen);
118        AddCollisionHandler(pelaaja1, "vihu", TormaaVihuun);
119        AddCollisionHandler(pelaaja1, "Kukka", TormaaKukkaan);
120        AddCollisionHandler(pelaaja1, "rakettiKukka", TormaaRakettiKukkaan);
121        Add(pelaaja1);
122        AddCollisionHandler(pelaaja1, "kuollut", TormaakuolleeseenPelaajaan);
123        pelaajan1Ase = new AssaultRifle(30, 10);
124        pelaaja1.ElamaLaskuri.LowerLimit += delegate { Kuole(pelaaja1); };
125        return pelaaja1;
126    }
127    void lisaapelaaja1(Vector paikka, double leveys, double korkeus)
128    {
129        pelaaja1 = LisaaPelaaja(paikka, leveys, korkeus);
130    }
131    void lisaapelaaja2(Vector paikka, double leveys, double korkeus)
132    {
133        pelaaja2 = LisaaPelaaja(paikka, leveys, korkeus);
134    }
135    void LisaaVihu(Vector paikka, double leveys, double korkeus)
136    {
137        PlatformCharacter vihu = new PlatformCharacter(50, 70);
138        vihu.Position = paikka;
139        vihu.Mass = 9.0;
140        vihu.Image = vihuKuva;
141        vihu.Tag = "vihu";
142        Add(vihu);
143        PlatformWandererBrain tasoAivot = new PlatformWandererBrain();
144        tasoAivot.Speed = 100;
145        vihu.Brain = tasoAivot;
146        vihu.AnimWalk = new Animation(animaatioKuvat3);
147        vihu.AnimWalk.FPS = 6;
148        vihu.AnimIdle = new Animation(vihuKuva);
149    }
150
151    void LisaaKukka(Vector paikka, double leveys, double korkeus)
152    {
153        PhysicsObject kukka = new PhysicsObject(50, 70);
154        kukka.Position = paikka;
155        kukka.Mass = 9.0;
156        kukka.Image = kukkaKuva;
157        kukka.Tag = "Kukka";
158        Add(kukka);
159    }
160
161    void LisaaRakettiKukka(Vector paikka, double leveys, double korkeus)
162    {
163        PhysicsObject kukka = new PhysicsObject(50, 70);
164        kukka.Position = paikka;
165        kukka.Mass = 9.0;
166        kukka.Image = rakettikukkaKuva;
167        kukka.Tag = "rakettiKukka";
168        Add(kukka);
169    }
170    void Tahtaa(AnalogState hiirenLiike)
171    {
172        Vector suunta = (Mouse.PositionOnWorld - pelaajan1Ase.AbsolutePosition).Normalize();
173        pelaajan1Ase.Angle = suunta.Angle;
174    }
175    void LisaaNappaimet()
176    {
177
178        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
179        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
180
181        Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
182        Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, nopeus);
183        Keyboard.Listen(Key.Up, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
184        Keyboard.Listen(Key.RightControl, ButtonState.Down, AmmuAseella, "Ammu", pelaajan1Ase);
185
186        Keyboard.Listen(Key.A, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja2, -nopeus);
187        Keyboard.Listen(Key.D, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja2, nopeus);
188        Keyboard.Listen(Key.W, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja2, hyppyNopeus);
189        Keyboard.Listen(Key.E, ButtonState.Down, Heitapommi, "heita", pelaaja2);
190
191        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
192
193        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
194        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
195        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
196
197        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
198    }
199
200    void Liikuta(PlatformCharacter hahmo, double nopeus)
201    {
202        if ("kuollut" == hahmo.Tag.ToString()) return;
203        hahmo.Walk(nopeus);
204    }
205    void Hyppaa(PlatformCharacter rakettihahmo, double nopeus)
206    {
207        if ("kuollut" == rakettihahmo.Tag.ToString()) return;
208        rakettihahmo.ForceJump(nopeus);
209    }
210
211    void RakettiHyppaa(PlatformCharacter hahmo, double nopeus)
212    {
213        if ("kuollut" == hahmo.Tag.ToString()) return;
214        hahmo.Jump(nopeus);
215    }
216    void TormaakuolleeseenPelaajaan(PhysicsObject hahmo, PhysicsObject tahti)
217    {
218       
219            maaliAani.Play();
220            MessageDisplay.Add(" Pelastit kaverin!");
221        // tahti.Destroy();
222        // lisaapelaaja2(tahti.Position, 0, 0);
223        herata(tahti as Pelaaja);
224       
225    }
226
227    void TormaaTahteen(PhysicsObject hahmo, PhysicsObject tahti)
228    {
229        maaliAani.Play();
230        MessageDisplay.Add("Söit sydämen!");
231        tahti.Destroy();
232
233        if (omistaaRakettirepun == false)
234        {
235            Animation animaatio = new Animation(animaatioKuvat);
236            animaatio.FPS = 2;
237            pelaaja1.PlayAnimation(animaatio);
238        }
239        {
240            Animation animaatio = new Animation(animaatioKuvat2);
241            animaatio.FPS = 2;
242            pelaaja1.PlayAnimation(animaatio);
243        }
244
245    }
246
247    void AmpuuVihun(PhysicsObject vihu)
248    {
249        maaliAani.Play();
250        MessageDisplay.Add("ammuit vihun");
251        vihu.Destroy();
252
253        //Animation animaatio = new Animation(animaatioKuvat4);
254        //animaatio.FPS = 2;
255        //pelaaja1.PlayAnimation(animaatio);
256    }
257
258    void TormaaVihuun(PhysicsObject hahmo, PhysicsObject vihu)
259    {
260        maaliAani.Play();
261        MessageDisplay.Add("kuolit *_*");
262        // hahmo.Destroy();
263        //
264        // PhysicsObject kuva = PhysicsObject.CreateStaticObject(70, 70);
265        // kuva.Position = hahmo.Position;
266        // kuva.Image = KuolemaKuva;
267        // Add(kuva);
268        OtaVahinkoa(hahmo as Pelaaja);
269    }
270    void OtaVahinkoa(Pelaaja hahmo)
271    {
272        hahmo.ElamaLaskuri.Value--;
273    }
274    void Kuole(Pelaaja hahmo)
275    {
276        hahmo.Image = KuolemaKuva;
277        hahmo.AnimIdle = new Animation(KuolemaKuva);
278        hahmo.Tag = "kuollut";
279    }
280
281    void herata (Pelaaja hahmo)
282    {
283        hahmo.Image = pelaajanKuva;
284        hahmo.AnimIdle = new Animation(pelaajanKuva);
285        hahmo.ElamaLaskuri.Value=3;
286        hahmo.Tag = "pelaaja";
287    }
288
289
290    void TormaaKukkaan(PhysicsObject hahmo, PhysicsObject kukka)
291    {
292       // hahmo.Image = AmpujaKuva;
293
294        //Ammusten määrä aluksi:
295        pelaajan1Ase.Ammo.Value = 30;
296       
297        //Mitä tapahtuu kun ammus osuu johonkin?
298        pelaajan1Ase.ProjectileCollision = AmmusOsui;
299
300
301        pelaaja1.Add(pelaajan1Ase);
302        Mouse.ListenMovement(0.1, Tahtaa, "Tähtää aseella");
303    }
304    void TormaaRakettiKukkaan(PhysicsObject hahmo, PhysicsObject rakettikukka)
305    {
306        hahmo.Image = rakettihahmoKuva;
307        hahmo.Animation = new Animation(rakettihahmoKuva);
308        omistaaRakettirepun = true;
309
310    }
311    void AmmuAseella(AssaultRifle ase)
312    {
313        if ("kuollut" == pelaaja1.Tag.ToString()) return;
314        PhysicsObject ammus = ase.Shoot();
315       
316   
317
318        if (ammus != null)
319        {
320            ammus.Image = ammusKuva;
321            //ammus.Size *= 3;
322            //ammus.Image = ...
323            //ammus.MaximumLifetime = TimeSpan.FromSeconds(2.0);
324        }
325    }
326    void Heitapommi(PlatformCharacter hahmo)
327    {
328        Grenade kranu = new Grenade(8.0);
329        kranu.Image = pommiKuva;
330        hahmo.Throw(kranu, Angle.FromDegrees(40), 10000);
331
332        kranu.Explosion.AddShockwaveHandler("vihu", vihurajahti);
333
334    }
335
336    void vihurajahti(IPhysicsObject vihu,Vector suunta)
337    {
338        vihu.Destroy();
339
340    }
341}
Note: See TracBrowser for help on using the repository browser.