source: 2012/24/AkiR/Fight the Rambo/Fight the Rambo/Fight the Rambo/Peli.cs @ 3005

Revision 3005, 17.0 KB checked in by akosrahi, 9 years ago (diff)

Talletus.

Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9
10public class Peli : PhysicsGame
11{
12    const double nopeus = 300;
13    const double hyppyNopeus = 750;
14    const int RUUDUN_KOKO = 30;
15    PlatformCharacter pelaaja1;
16    GameObject pelaajanpaikka;
17    PlatformCharacter vihollinen;
18    PlatformCharacter Maali;
19    PlatformCharacter Piikkilanka;
20    List<Label> valikonKohdat;
21    IntMeter ammusLaskuri;
22    Image tekstinkuva = LoadImage("TEKSTI");
23    Image piikkilangankuva = LoadImage("spikewire");
24    Image pelaajanKuva = LoadImage("rambo2");
25    Image vihollisenkuva = LoadImage("Nuhasotilas");
26    Image maalinkuva = LoadImage("goal");
27    Image LisaaPelaaajanKentallekuvan = LoadImage("sponer");
28    Image maankuva = LoadImage("ground");
29    Image aidankuva = LoadImage("fence");
30    Image KullanKuva = LoadImage("Kulta");
31    Image AmmuksenKuva = LoadImage("Ammus");
32   
33
34
35    Image paikallaanVasemmalle = LoadImage("rambo2");
36    Image paikallaanOikealle;
37    Image[] kavelyVasemmalle = LoadImages("rambo2");
38    Image[] kavelyOikealle;
39
40    Image VihollinenpaikallaanVasemmalle = LoadImage("Nuhasotilas");
41    Image VihollinenpaikallaanOikealle;
42    Image[] VihollinenKavelyVasemmalle = LoadImages("Nuhasotilas");
43    Image[] VihollinenKavelyOikealle;
44
45    IntMeter pisteLaskuri;
46
47    DoubleMeter voimaMittari;
48
49    int kenttaNro = 1;
50
51    public override void Begin()
52    {
53
54        ClearAll();
55        Valikko();
56
57
58        paikallaanOikealle = Image.Mirror(paikallaanVasemmalle);
59        kavelyOikealle = Image.Mirror(kavelyVasemmalle);
60
61        VihollinenpaikallaanOikealle = Image.Mirror(VihollinenpaikallaanVasemmalle);
62        VihollinenKavelyOikealle = Image.Mirror(VihollinenKavelyVasemmalle);
63
64
65
66
67
68
69    }
70
71    void SeuraavaKentta(int kentanNro)
72    {
73        ClearAll();
74        Gravity = new Vector(0, -1000);
75        MediaPlayer.Play("GameStarts");
76       
77        LuoLaskuri();
78        LisaavoimaMittari();
79        if (kentanNro == 1) luoKentta1();
80        else if (kentanNro == 2) LuoKentta2();
81        else if (kentanNro == 3) LuoKentta3();
82        else if (kentanNro > 3) LuoKentta4();
83        else if (kentanNro > 4) Valikko();
84        lisaaNappaimet();
85        LuoAmmusLaskuri();
86       
87        Camera.Follow(pelaaja1);
88        Camera.ZoomFactor = 2.0;
89        Camera.StayInLevel = true;
90
91
92    }
93
94    void luoKentta1()
95    {
96        lisaaPelaaja(20);
97
98        TileMap kentta = TileMap.FromLevelAsset("kentta1");
99        kentta['G'] = lisaaMaali;
100        kentta['E'] = lisaaVihollinen;
101        kentta['#'] = lisaaTaso;
102        kentta['N'] = lisaapelaajanPaikka;
103        kentta['S'] = LisaaPiikkilanka;
104        kentta['M'] = Lisaamaa;
105        kentta['F'] = LisaaAita;
106        kentta['A'] = LisaaAmmusPaketti;
107        kentta['T'] = LisaaKulta;
108        kentta['X'] = Lisaaseina;
109        kentta.Insert(RUUDUN_KOKO, RUUDUN_KOKO);
110
111        pelaaja1.Position = pelaajanpaikka.Position;
112
113        Level.CreateBorders();
114        Level.Background.CreateGradient(Color.Brown, Color.Blue);
115    }
116    void LuoKentta2()
117    {
118        lisaaPelaaja(20);
119
120        TileMap kentta = TileMap.FromFile("TextFile2.txt");
121        kentta['G'] = lisaaMaali;
122        kentta['E'] = lisaaVihollinen;
123        kentta['#'] = Lisaamaa;
124        kentta['N'] = lisaapelaajanPaikka;
125        kentta['S'] = LisaaPiikkilanka;
126        kentta['F'] = LisaaAita;
127        kentta['A'] = LisaaAmmusPaketti;
128        kentta['X'] = Lisaaseina;
129        kentta['T'] = LisaaKulta;
130        kentta.Insert(RUUDUN_KOKO, RUUDUN_KOKO);
131
132        pelaaja1.Position = pelaajanpaikka.Position;
133
134        Level.CreateBorders();
135        Level.Background.CreateGradient(Color.Brown, Color.Blue);
136    }
137
138
139    void LuoKentta3()
140    {
141        lisaaPelaaja(20);
142
143        TileMap kentta = TileMap.FromFile("TextFile3.txt");
144        kentta['G'] = lisaaMaali;
145        kentta['E'] = lisaaVihollinen;
146        kentta['#'] = Lisaamaa;
147        kentta['N'] = lisaapelaajanPaikka;
148        kentta['S'] = LisaaPiikkilanka;
149        kentta['F'] = LisaaAita;
150        kentta['A'] = LisaaAmmusPaketti;
151        kentta['X'] = Lisaaseina;
152        kentta['T'] = LisaaKulta;
153        kentta.Insert(RUUDUN_KOKO, RUUDUN_KOKO);
154
155        pelaaja1.Position = pelaajanpaikka.Position;
156
157        Level.CreateBorders();
158        Level.Background.CreateGradient(Color.Brown, Color.Blue);
159    }
160    void LuoKentta4()
161    {
162        lisaaPelaaja(20);
163
164        TileMap kentta = TileMap.FromFile("TextFile1.txt");
165        kentta['G'] = lisaaMaali;
166        kentta['E'] = lisaaVihollinen;
167        kentta['#'] = Lisaamaa;
168        kentta['N'] = lisaapelaajanPaikka;
169        kentta['S'] = LisaaPiikkilanka;
170        kentta['F'] = LisaaAita;
171        kentta['A'] = LisaaAmmusPaketti;
172        kentta['X'] = Lisaaseina;
173        kentta['T'] = LisaaKulta;
174        kentta.Insert(RUUDUN_KOKO, RUUDUN_KOKO);
175
176        pelaaja1.Position = pelaajanpaikka.Position;
177
178        Level.CreateBorders();
179        Level.Background.CreateGradient(Color.Blue, Color.Black);
180    }
181    GameObject lisaapelaajanPaikka()
182    {
183        pelaajanpaikka = new GameObject(100, 150);
184        pelaajanpaikka.Image = LisaaPelaaajanKentallekuvan;
185        return pelaajanpaikka;
186    }
187
188    PhysicsObject lisaaTaso()
189    {
190        PhysicsObject taso = PhysicsObject.CreateStaticObject(RUUDUN_KOKO, RUUDUN_KOKO);
191        taso.Color = Color.Black;
192        return taso;
193    }
194
195    PlatformCharacter lisaaPelaaja(int ammukset)
196    {
197        pelaaja1 = new PlatformCharacter(40, 60);
198        pelaaja1.Mass = 3.5;
199        pelaaja1.Image = pelaajanKuva;
200
201        pelaaja1.Weapon = new AssaultRifle(50, 20);
202        pelaaja1.Weapon.ProjectileCollision = AmmusOsui;
203        pelaaja1.Weapon.Ammo.Value = ammukset;
204        pelaaja1.Weapon.Y = -5;
205        pelaaja1.Weapon.X = 0.5;
206
207        pelaaja1.RightIdleAnimation = new Animation(paikallaanVasemmalle);
208        pelaaja1.LeftIdleAnimation = new Animation(paikallaanOikealle);
209        pelaaja1.RightWalkingAnimation = new Animation(kavelyVasemmalle);
210        pelaaja1.LeftWalkingAnimation = new Animation(kavelyOikealle);
211        Add(pelaaja1, 1);
212        AddCollisionHandler(pelaaja1, "vihollinen", CollisionHandler.AddMeterValue(voimaMittari, -10));
213        AddCollisionHandler(pelaaja1, "Ansa", CollisionHandler.AddMeterValue(voimaMittari, -25));
214        Vector oikea = new Vector(10000, 50);
215        Vector vaara = new Vector(1000, 500);
216        AddCollisionHandler(pelaaja1, "vihollinen", CollisionHandler.HitTarget(oikea));
217        AddCollisionHandler(pelaaja1, "Ansa", CollisionHandler.HitTarget(vaara));
218       
219        return pelaaja1;
220    }
221
222    void lisaaNappaimet()
223    {
224        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
225        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Valikko, "Poistu pelistä");
226
227        Keyboard.Listen(Key.Left, ButtonState.Down, liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
228        Keyboard.Listen(Key.Right, ButtonState.Down, liikuta, "Liikkuu oikealle", pelaaja1, nopeus);
229        Keyboard.Listen(Key.Up, ButtonState.Pressed, hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
230        Keyboard.Listen(Key.Space, ButtonState.Down, AmmuAseella, "Ammu");
231        Keyboard.Listen(Key.W, ButtonState.Down, TahtaaYlos, "Tähtää ylös rynnäkkökiväärillä");
232        Keyboard.Listen(Key.S, ButtonState.Down, TahtaaAlas, "Tähtää alas rynnäkkökiväärillä");
233    }
234
235    void liikuta(PlatformCharacter hahmo, double nopeus)
236    {
237        hahmo.Walk(nopeus);
238    }
239
240    void hyppaa(PlatformCharacter hahmo, double nopeus)
241    {
242        hahmo.Jump(1000.0);
243    }
244
245
246
247    void AmmuAseella()
248    {
249        PhysicsObject Ammus = pelaaja1.Weapon.Shoot();
250        if (Ammus != null)
251        {
252            Ammus.Size *= 1;
253            Ammus.IgnoresGravity = true;
254            Ammus.MaximumLifetime = TimeSpan.FromSeconds(4.1);
255            AddCollisionHandler(Ammus, KasitteleVihollinenKuoli);
256        }
257    }
258    void AmmusOsui(PhysicsObject Ammus, PhysicsObject Kohde)
259    {
260
261        Explosion rajahdys = new Explosion(50);
262        rajahdys.Position = Ammus.Position;
263        Ammus.Destroy();
264    }
265
266
267
268
269
270    PlatformCharacter lisaaVihollinen()
271    {
272        PlatformCharacter vihollinen = new PlatformCharacter(40, 80);
273        vihollinen.Mass = 3.5;
274        vihollinen.Image = vihollisenkuva;
275        vihollinen.Tag = "vihollinen";
276        vihollinen.IgnoresGravity = false;
277
278        vihollinen.LeftIdleAnimation = new Animation(VihollinenpaikallaanVasemmalle);
279        vihollinen.RightIdleAnimation = new Animation(VihollinenpaikallaanOikealle);
280        vihollinen.LeftWalkingAnimation = new Animation(VihollinenKavelyVasemmalle);
281        vihollinen.RightWalkingAnimation = new Animation(VihollinenKavelyOikealle);
282        vihollinen.CanMoveOnAir = true;
283       
284        //if (vihollinen.Velocity.X == 0)
285        //{
286        //    vihollinen.Jump(1000);
287        //}
288       
289        // lisää törmäyksenkäsisttelijä
290        // kun vihu törmää "esteeseen" (oma tägi)
291        // --> delegate { vihollinen.Jump(600); }
292
293        FollowerBrain seuraajanAivot = new FollowerBrain();
294        seuraajanAivot.Target = pelaaja1;
295        seuraajanAivot.Speed = 100;
296        seuraajanAivot.StopWhenTargetClose = false;
297        seuraajanAivot.TargetFollowDistance = 50;
298        seuraajanAivot.FollowAlways = true;
299        seuraajanAivot.Active = true;
300        vihollinen.Brain = seuraajanAivot;
301
302        AddCollisionHandler(vihollinen, "seina", delegate(PhysicsObject tormaaja, PhysicsObject kohde) { vihollinen.Jump(2000);});
303
304
305        return vihollinen;
306    }
307   
308
309   
310
311    void KasitteleVihollinenKuoli(PhysicsObject Ammus, PhysicsObject kohde)
312    {
313        if (kohde.Tag.ToString() == "vihollinen")
314        {
315            MediaPlayer.Play("kill");
316            kohde.Destroy();
317
318        }
319
320    }
321    PhysicsObject lisaaMaali()
322    {
323        PhysicsObject Maali = PhysicsObject.CreateStaticObject(RUUDUN_KOKO, RUUDUN_KOKO);
324        Maali.Image = maalinkuva;
325        AddCollisionHandler(Maali, KasitteleMaaliinTulo);
326        return Maali;
327
328    }
329
330    PhysicsObject LisaaAmmusPaketti()
331    {
332        PhysicsObject AmmusPaketti = new PhysicsObject(20, 20);
333        AmmusPaketti.Image = AmmuksenKuva;
334        AmmusPaketti.Mass = (50);
335        AddCollisionHandler(pelaaja1, AmmusPaketti, KeraaAmmus);
336
337
338        return AmmusPaketti;
339
340    }
341
342    PhysicsObject LisaaKulta()
343    {
344        PhysicsObject Kulta = new PhysicsObject(50, 50);
345        Kulta.Image = KullanKuva;
346        Kulta.Mass = (50);
347        Kulta.Tag = "kulta";
348        AddCollisionHandler(pelaaja1, Kulta, Keraakulta);
349
350
351
352        return Kulta;
353    }
354
355    void KeraaAmmus(IPhysicsObject pelaaja1, IPhysicsObject AmmusPaketti)
356    {
357        (pelaaja1 as PlatformCharacter).Weapon.Ammo.Value += 5;
358        AmmusPaketti.Destroy();
359
360    }
361
362
363    void Keraakulta(IPhysicsObject tormaaja, IPhysicsObject kohde)
364    {
365        pisteLaskuri.Value =+ 10;
366        kohde.Destroy();
367    }
368
369    void KasitteleMaaliinTulo(PhysicsObject Maali, PhysicsObject kohde)
370    {
371        if (kohde == pelaaja1)
372        {
373            kenttaNro++;
374            SeuraavaKentta(kenttaNro);
375        }
376    }
377    void Valikko()
378    {
379        ClearAll();
380
381        Level.Background.Image = tekstinkuva;
382        valikonKohdat = new List<Label>();
383
384        Label kohta1 = new Label("Aloita kenttä");
385        kohta1.Position = new Vector(300, -20);
386        valikonKohdat.Add(kohta1);
387
388        Label kohta2 = new Label("Lopeta");
389        kohta2.Position = new Vector(300, -60);
390        valikonKohdat.Add(kohta2);
391        MediaPlayer.Play("the_matrix_-_theme_song_clubbed_to_death-gt3OptaZ20Q_fmt34");
392
393        foreach (Label valikonKohta in valikonKohdat)
394        {
395            Add(valikonKohta);
396        }
397
398        Mouse.ListenOn(kohta1, MouseButton.Left, ButtonState.Pressed, SeuraavaKentta, null, kenttaNro);
399        Mouse.ListenOn(kohta2, MouseButton.Left, ButtonState.Pressed, Exit, null);
400
401        Mouse.IsCursorVisible = true;
402        Mouse.ListenMovement(1.0, ValikossaLiikkuminen, null);
403        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, "");
404    }
405
406    void ValikossaLiikkuminen(AnalogState hiirenTila)
407    {
408        foreach (Label kohta in valikonKohdat)
409        {
410            if (Mouse.IsCursorOn(kohta))
411            {
412                kohta.TextColor = Color.Yellow;
413            }
414            else
415            {
416                kohta.TextColor = Color.YellowGreen;
417            }
418
419        }
420    }
421    void AloitaPeli()
422    {
423        ClearAll();
424        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Valikko, "Palaa valikkoon");
425
426    }
427    PhysicsObject LisaaPiikkilanka()
428    {
429        PhysicsObject Piikkilanka = PhysicsObject.CreateStaticObject(RUUDUN_KOKO, RUUDUN_KOKO);
430        Piikkilanka.Image = piikkilangankuva;
431        Piikkilanka.Tag = "Ansa";
432        //AddCollisionHandler(Piikkilanka, PiikkilankaanTormays);
433        return Piikkilanka;
434    }
435
436    PhysicsObject Lisaamaa()
437    {
438        PhysicsObject maa = PhysicsObject.CreateStaticObject(RUUDUN_KOKO, RUUDUN_KOKO);
439        maa.Image = maankuva;
440        return maa;
441    }
442
443    PhysicsObject Lisaaseina()
444    {
445        PhysicsObject seina = PhysicsObject.CreateStaticObject(RUUDUN_KOKO, RUUDUN_KOKO);
446        seina.Image = maankuva;
447        seina.Tag = "seina";
448        return seina;
449    }
450
451    PhysicsObject LisaaAita()
452    {
453        PhysicsObject Aita = PhysicsObject.CreateStaticObject(RUUDUN_KOKO, RUUDUN_KOKO);
454        Aita.Image = aidankuva;
455        Aita.IgnoresCollisionResponse = true;
456        Aita.MakeStatic();
457        return Aita;
458    }
459
460    //void PiikkilankaanTormays(PhysicsObject Piikkilanka, PhysicsObject kohde)
461    //{
462    //    if (kohde == pelaaja1)
463    //    {
464           
465    //        kohde.Destroy();
466    //        ClearAll();
467    //        Begin();
468           
469
470    //    }
471    //}
472
473    void TahtaaYlos()
474    {
475        if (pelaaja1.FacingDirection == Direction.Right)
476        {
477            pelaaja1.Weapon.Angle += Angle.FromDegrees(6);
478        }
479        if (pelaaja1.FacingDirection == Direction.Left)
480        {
481            pelaaja1.Weapon.Angle += Angle.FromDegrees(-6);
482        }
483    }
484
485    void TahtaaAlas()
486    {
487        if (pelaaja1.FacingDirection == Direction.Right)
488        {
489            pelaaja1.Weapon.Angle += Angle.FromDegrees(-6);
490        }
491        if (pelaaja1.FacingDirection == Direction.Left)
492        {
493            pelaaja1.Weapon.Angle += Angle.FromDegrees(6);
494        }
495    }
496
497    void LuoAmmusLaskuri()
498    {
499        ammusLaskuri = new IntMeter(0);
500
501        Label ammusNaytto = new Label();
502        ammusNaytto.X = Screen.Right - 100;
503        ammusNaytto.Y = Screen.Top - 100;
504        ammusNaytto.TextColor = Color.Black;
505        ammusNaytto.BindTo(pelaaja1.Weapon.Ammo);
506        Add(ammusNaytto);
507
508        Label ammusTeksti = new Label("Ammuksia jäljellä: ");
509        ammusTeksti.X = Screen.Right - 200;
510        ammusTeksti.Y = Screen.Top - 100;
511        ammusTeksti.TextColor = Color.Black;
512        Add(ammusTeksti);
513    }
514
515
516    void LuoLaskuri()
517    {
518        pisteLaskuri = new IntMeter(0);
519        Label pisteNaytto = new Label();
520        pisteNaytto.X = Screen.Left + 200;
521        pisteNaytto.Y = Screen.Top - 100;
522        pisteNaytto.TextColor = Color.Black;
523        pisteNaytto.BindTo(pisteLaskuri);
524        Add(pisteNaytto);
525
526        Label pisteTeksti = new Label("Pisteet: ");
527        pisteTeksti.X = Screen.Left + 150;
528        pisteTeksti.Y = Screen.Top - 100;
529        pisteTeksti.TextColor = Color.Black;
530        Add(pisteTeksti);
531    }
532
533    void LisaavoimaMittari()
534    {
535       
536
537        voimaMittari = new DoubleMeter(100);
538        voimaMittari.MaxValue = 100;
539
540        ProgressBar voimaPalkki = new ProgressBar(300, 30);
541        voimaPalkki.BindTo(voimaMittari);
542        Add(voimaPalkki);
543     
544        Timer aikaLaskuri = new Timer();
545        aikaLaskuri.Interval = 0.01;
546        aikaLaskuri.Timeout += delegate
547        {
548            if (voimaMittari.Value < 1)
549            {
550                pelaaja1.Destroy();
551                ClearAll();
552                Begin();
553            }
554            else
555            {
556                aikaLaskuri.Start();
557            }
558        };
559        aikaLaskuri.Start();
560
561
562
563        voimaPalkki.X = Screen.Right - 700;
564        voimaPalkki.Y = Screen.Top - 100;
565        voimaPalkki.Angle = Angle.RightAngle;
566        voimaPalkki.BarColor = Color.Green;
567        voimaPalkki.Angle = Angle.FromDegrees(0);
568        voimaPalkki.Image = LoadImage("tyhjapalkki");
569        voimaPalkki.BarImage = LoadImage("taysipalkki");
570
571        Label voimaTeksti = new Label(" Terveys: ");
572        voimaTeksti.X = Screen.Right - 900;
573        voimaTeksti.Y = Screen.Top - 100;
574        voimaTeksti.TextColor = Color.Black;
575        Add(voimaTeksti);
576    }
577}
Note: See TracBrowser for help on using the repository browser.