source: 2017/30/HugoE/HanniAndHoo/HanniAndHoo/HanniAndHoo/HanniAndHoo.cs @ 9855

Revision 9855, 11.4 KB checked in by lukrmoil, 14 months ago (diff)
RevLine 
[9098]1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9public class HanniAndHoo : PhysicsGame
10{
[9128]11    Image HanninKuva = LoadImage("Hanni");
12    Image HoonKuva = LoadImage("Hoo");
[9854]13    Image taustis = LoadImage("pilvimaa");
[9827]14    Image taustis2 = LoadImage("avaruus");
[9854]15    bool peliOhi = false;
[9827]16     
[9128]17    PlasmaCannon HanninAse;
[9119]18    Cannon HoonAse;
[9855]19   
[9206]20    SoundEffect hyppyAani = LoadSoundEffect("jump");
[9855]21 
[9128]22    PeliUkko Hanni;
23    PeliUkko Hoo;
[9827]24
[9098]25    public override void Begin()
26    {
[9849]27        SmoothTextures = false;
[9855]28        AlkuValikko();
29        IsFullScreen = true;
[9098]30    }
31
32    void LuoPelaajat()
33    {
[9825]34        Hanni = new PeliUkko(90.0, 90.0);       
[9119]35        Hanni.X = Level.Left + 100.0;
[9098]36        Hanni.Y = 0.0;
37        Hanni.Color = Color.Blue;
[9118]38        Hanni.Image = HanninKuva;
[9128]39        Hanni.CanRotate = false;
[9141]40        Hanni.Tag = "pelaaja";
[9149]41        Add(Hanni);
[9822]42        Hanni.Ohjain = ControllerOne;
[9160]43        HanninAse = new PlasmaCannon(60, 20);       
[9111]44        HanninAse.ProjectileCollision = AmmusOsui;
[9824]45        HanninAse.Power.DefaultValue = 7500;
46        HanninAse.Power.Value = HanninAse.Power.DefaultValue;
[9118]47        HanninAse.X += 50;
[9141]48        HanninAse.CanHitOwner = false;
[9128]49        Hanni.Weapon = HanninAse;
50        Hoo = new PeliUkko(100.0, 100.0);
[9160]51        Hoo.Tag = "pelaaja2";
[9119]52        Hoo.X = Level.Right - 100.0;
[9098]53        Hoo.Y = 0.0;
54        Hoo.Color = Color.Red;
[9118]55        Hoo.Image = HoonKuva;
[9111]56        Hoo.CanRotate = false;
[9128]57        Add(Hoo);
[9822]58        Hoo.Ohjain = ControllerTwo;
[9128]59        HoonAse = new Cannon(90, 30);
[9141]60        HoonAse.ProjectileCollision = Ammus2Osui;
[9119]61        HoonAse.X += 80;
[9125]62        Hoo.Weapon = HoonAse;
[9141]63        HoonAse.CanHitOwner = false;
[9822]64        HoonAse.Power.DefaultValue = 32500;
[9166]65        HoonAse.Power.Value = HoonAse.Power.DefaultValue;
66        AddCollisionHandler(Hanni, "AlaReuna", ResattaaHyppyLaskuri);
[9824]67        AddCollisionHandler(Hanni, "taso", ResattaaHyppyLaskuri);
68
[9822]69        AddCollisionHandler(Hanni, "sivureuna", KimpoaReunasta);
70        AddCollisionHandler(Hoo, "sivureuna", KimpoaReunasta);
[9166]71        AddCollisionHandler(Hoo, "Alareuna", ResattaaHyppyLaskuri);
72        AddCollisionHandler(Hanni, Hoo, ResattaaHyppyLaskuri);
[9125]73        AddCollisionHandler(Hoo, Hanni, Tormaa);
[9850]74        Hoo.Elamalaskuri.LowerLimit +=LoppuValikko;
[9206]75        Hanni.Elamalaskuri.LowerLimit += LoppuValikko;       
[9098]76    }
[9149]77
[9822]78    void KimpoaReunasta(PhysicsObject tormaaja, PhysicsObject kohde)
79    {
80        PeliUkko aija = (PeliUkko)tormaaja;
81        aija.Hit(-tormaaja.Position);
82        aija.Ohjain.DisableAll();
83        Timer.SingleShot(0.3, delegate { PalautaOhjain(aija.Ohjain); });
84    }
85
86    private void PalautaOhjain(Controller ohjain)
87    {
[9854]88        if (peliOhi) return;
[9822]89        ohjain.EnableAll();
90        ClearControls();
91        LuoNappaimet();
92    }
93
[9149]94    void AlkuValikko()
[9191]95    {       
[9155]96        MediaPlayer.Play("taustamusiikki");
97        MediaPlayer.IsRepeating = true;
98        MultiSelectWindow alkuValikko = new MultiSelectWindow("Hanni vs. Hoo",
[9827]99        "Valitse kenttä", "Lopeta"); 
[9191]100        Level.Background.Color = Color.Black;
[9149]101        Add(alkuValikko);
[9827]102        alkuValikko.AddItemHandler(0, Kenttävalikko);
[9149]103        alkuValikko.AddItemHandler(1, Exit);
104
105
106    }
[9155]107    void LoppuValikko()
108    {
[9854]109        peliOhi = true;
[9191]110        MediaPlayer.Stop();
[9850]111        MultiSelectWindow loppuValikko = new MultiSelectWindow("Loppuvalikko",
[9827]112        "Pelaa uudestaan", "Lopeta");
[9854]113        Level.Background.Color = Color.Black;
[9155]114        Add(loppuValikko);
[9827]115        loppuValikko.AddItemHandler(0, Kenttävalikko);
[9155]116        loppuValikko.AddItemHandler(1, Exit);
117    }
[9149]118
[9827]119
[9850]120
[9827]121    void Kenttävalikko()
[9149]122    {
[9827]123        MultiSelectWindow Kenttävalikko = new MultiSelectWindow("Kenttävalikko", "Pilvimaa", "Avaruus");
124        Add(Kenttävalikko);
[9854]125        Kenttävalikko.AddItemHandler(0, Pilvimaa);
[9827]126        Kenttävalikko.AddItemHandler(1, Avaruus);               
127    }
128
129    void Avaruus()
130    {
[9149]131        ClearAll();
[9855]132        PhysicsObject AlaReuna = PhysicsObject.CreateStaticObject(Screen.Width, 80);
133        AlaReuna.Y = Screen.Bottom + 40;
[9827]134        AlaReuna.Tag = "AlaReuna";
135        AlaReuna.Color = Color.Black;
136        Add(AlaReuna);
137        Level.Background.Image = taustis2;
[9149]138        LuoKentta();
139        LuoPelaajat();
140        LuoNappaimet();
[9828]141        LuoTaso(Level.Left + 400.0, 0, true);
142        LuoTaso(Level.Right - 400.0, 0, true);
[9836]143        MediaPlayer.Stop();
144        MediaPlayer.Volume = 0.2;
[9844]145        MediaPlayer.Play("taistelumusaehdokas2");
[9836]146        MediaPlayer.IsRepeating = true;
[9149]147    }
148
[9854]149    void Pilvimaa()
[9827]150    {
151        ClearAll();
[9855]152        PhysicsObject AlaReuna = PhysicsObject.CreateStaticObject(Screen.Width, 80);
153        AlaReuna.Y = Screen.Bottom + 40;
[9827]154        AlaReuna.Tag = "AlaReuna";
155        AlaReuna.Color = Color.DarkBrown;
156        Add(AlaReuna);
157        Level.Background.Image = taustis;
158        LuoKentta();
159        LuoPelaajat();
160        LuoNappaimet();
[9828]161        LuoTaso(0.0, 300);
162        LuoTaso(Level.Left + 400.0, -50);
163        LuoTaso(Level.Right - 400.0, -50);
[9836]164        MediaPlayer.Stop();
[9845]165        MediaPlayer.Volume = 0.4;
[9848]166        MediaPlayer.Play("HanniVSHooGO");
[9836]167        MediaPlayer.IsRepeating = true;
[9827]168    }
[9149]169
[9827]170   
[9142]171    void Tormaa(PhysicsObject Tormaaja, PhysicsObject Kohde)
[9149]172    {
[9827]173        if (!Kohde.Tag.Equals("pelaaja")) return;     
[9142]174        PeliUkko pu = (PeliUkko)Kohde;
[9822]175        pu.Elamalaskuri.AddValue(-2);
[9206]176        PeliUkko pu2 = (PeliUkko)Tormaaja;
[9822]177        pu2.Elamalaskuri.AddValue(5);
[9206]178       
[9125]179    }
[9111]180
181    void AmmusOsui(PhysicsObject Ammus, PhysicsObject Kohde)
182    {
[9119]183        Ammus.Destroy();
[9168]184        if (!Kohde.Tag.Equals("pelaaja2")) return;
[9141]185        PeliUkko pu = (PeliUkko)Kohde;
[9206]186       
[9849]187        pu.Elamalaskuri.AddValue(-7);
[9206]188        if (Ammus.Tag.Equals("PelaajanAmmus"))
189        {
[9849]190           Hanni.Elamalaskuri.AddValue(4);
[9206]191        }
192       
[9149]193
[9111]194    }
[9149]195    void Ammus2Osui(PhysicsObject Ammus2, PhysicsObject Kohde2)
[9179]196    {     
[9141]197        Ammus2.Destroy();
[9179]198        if (!Kohde2.Tag.Equals("pelaaja")) return;
[9149]199        PeliUkko pu = (PeliUkko)Kohde2;
[9849]200        pu.Elamalaskuri.AddValue(-9);
[9141]201    }
202
[9098]203    void LuoNappaimet()
204    {
[9824]205        Keyboard.Listen(Key.W, ButtonState.Pressed, Hyppy, null, Hanni, 1250.0);
206        Keyboard.Listen(Key.D, ButtonState.Down, Kavely, null, Hanni, 650.0);
207        Keyboard.Listen(Key.A, ButtonState.Down, Kavely, null, Hanni, -650.0);
208       
209        Keyboard.Listen(Key.Up, ButtonState.Pressed, Hyppy, null, Hoo, 2100.0);
210        Keyboard.Listen(Key.Right, ButtonState.Down, Kavely, null, Hoo, 350.0);
211        Keyboard.Listen(Key.Left, ButtonState.Down, Kavely, null, Hoo, -350.0);
212
213        Keyboard.Listen(Key.S, ButtonState.Pressed, AmmuAseella, "Ammu", HanninAse);
214        Keyboard.Listen(Key.Down, ButtonState.Pressed, AmmuAseella2, "Ammu2", HoonAse);
[9098]215        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
[9822]216   
217        ControllerOne.Listen(Button.RightTrigger, ButtonState.Pressed, AmmuAseella, "Ammu", HanninAse);
218        ControllerTwo.Listen(Button.RightTrigger, ButtonState.Pressed, AmmuAseella2, "Ammu", HoonAse);
[9098]219
[9822]220        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppy, null, Hanni, 1350.0);
221        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Kavely, null, Hanni, 650.0);
222        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Kavely, null, Hanni, -650.0);
[9230]223
[9824]224        ControllerTwo.Listen(Button.A, ButtonState.Pressed, Hyppy, null, Hoo, 2100.0);     
[9822]225        ControllerTwo.Listen(Button.DPadRight, ButtonState.Down, Kavely, null, Hoo, 300.0);
226        ControllerTwo.Listen(Button.DPadLeft, ButtonState.Down, Kavely, null, Hoo, -300.0);
[9230]227
[9098]228    }
[9828]229    void LuoTaso(double x, double y, bool heiluu = false)
[9824]230    {
231        Image Taso = LoadImage("platform");
[9827]232        PhysicsObject taso = PhysicsObject.CreateStaticObject(275, 20);
[9824]233        taso.X = x;
234        taso.Y = y;
[9828]235        Add(taso);     
[9824]236        taso.Image = Taso;
237        taso.Tag = "taso";
[9836]238       
[9824]239        taso.MakeOneWay();
[9828]240        if (heiluu) taso.Oscillate(new Vector(0, 18), 68, 0.20);
241
[9824]242    }
[9098]243    void LuoKentta()
[9854]244    {
245        peliOhi = false;
[9160]246        Level.Width = Screen.Width;
247        Level.Height = Screen.Height;
[9191]248        Level.Background.ScaleToLevelByWidth();
[9822]249        Gravity = new Vector(0.0, -1750.0);       
[9179]250        PhysicsObject OikeaReuna = Level.CreateRightBorder(1.0, true);
251        OikeaReuna.Tag = "OikeaReuna";
[9822]252        OikeaReuna.Tag = "sivureuna";
[9179]253        PhysicsObject VasenReuna = Level.CreateLeftBorder(1.0, true);
254        VasenReuna.Tag = "VasenReuna";
[9822]255        VasenReuna.Tag = "sivureuna";
[9179]256        PhysicsObject YlaReuna = Level.CreateTopBorder(0.0, true);
257        YlaReuna.Tag = "YlaReuna";
[9828]258
[9098]259    }
260
261
262
[9141]263    void Kavely(PeliUkko tyyppi, double liikkumisenMaara)
[9098]264    {
[9128]265
[9125]266        tyyppi.Walk(liikkumisenMaara);
[9098]267
268    }
[9141]269    void Hyppy(PeliUkko tyyppi, double hypynMaara)
[9118]270    {
[9168]271        if (tyyppi.Tag.Equals("pelaaja"))
[9166]272        {           
273            if (tyyppi.HyppyLaskuri.Value == tyyppi.HyppyLaskuri.MaxValue)
274            {
275               
276                return;               
277            }
278
279            tyyppi.ForceJump(hypynMaara);
[9207]280            hyppyAani.Play();
[9166]281        }
282        else
[9207]283        {           
[9237]284            bool onnistuikoHyppy = tyyppi.Jump(hypynMaara);
285            if (onnistuikoHyppy)
286            {
287                hyppyAani.Play();
288            }
[9207]289        }                     
[9166]290        tyyppi.HyppyLaskuri.AddValue(1);
291     
[9118]292    }
[9098]293
[9166]294    void ResattaaHyppyLaskuri(PhysicsObject tyyppi, PhysicsObject lattia)
295    {
[9169]296        if (lattia.Y > tyyppi.Y)
[9824]297       
[9169]298        {
299            return;
300        }
[9166]301        (tyyppi as PeliUkko).HyppyLaskuri.Value = 0;
302    }
[9160]303
[9822]304 
[9125]305    void AmmuAseella(PlasmaCannon HanninAse)
[9111]306    {
[9827]307        PhysicsObject Ammus = HanninAse.Shoot();
[9822]308        HanninAse.FireRate = 3;
[9118]309        if (Ammus != null)
[9111]310        {
[9849]311            Ammus.Size *= 3.5;
[9118]312            Ammus.MaximumLifetime = TimeSpan.FromSeconds(2.0);
[9206]313            Ammus.Tag = "PelaajanAmmus";
[9849]314            Ammus.CollisionIgnoreGroup = 7;
[9111]315        }
316    }
[9098]317
[9119]318    void AmmuAseella2(Cannon HoonAse)
319    {
[9827]320        PhysicsObject Ammus2 = HoonAse.Shoot();       
[9822]321        HoonAse.FireRate = 2;
[9206]322        if (Ammus2 != null)
[9827]323       
[9119]324        {
[9849]325            Ammus2.Size *= 4.5;
[9827]326            Ammus2.MaximumLifetime = TimeSpan.FromSeconds(1.0);
[9206]327            Ammus2.Tag = "Pelaajan2Ammus";
[9849]328            Ammus2.CollisionIgnoreGroup = 8;
[9827]329        } 
[9206]330
[9125]331    }
[9111]332
[9149]333    class PeliUkko : PlatformCharacter
334    {
[9824]335        public IntMeter Elamalaskuri = new IntMeter(100, 0, 100);
[9166]336        public IntMeter HyppyLaskuri = new IntMeter(0, 0, 2);
[9822]337        public Controller Ohjain;       
[9128]338        public PeliUkko(double leveys, double korkeus)
339        : base(leveys, korkeus)
[9149]340        {
[9850]341            Elamalaskuri.LowerLimit += delegate { this.Destroy(); Explosion rajahdys = new Explosion(100);
342            rajahdys.Position = this.Position;
343            Game.Add (rajahdys);
344            };       
[9160]345            ProgressBar elamaPalkki = new ProgressBar(50, 20);
346            elamaPalkki.Color = Color.Gray;
347            elamaPalkki.X = 0.0;
348            elamaPalkki.Y = korkeus / 2.0 + korkeus / 4;
349            elamaPalkki.BindTo(Elamalaskuri);
350            Add(elamaPalkki);
[9854]351        }       
[9160]352    }   
[9854]353           
[9098]354}
[9125]355
356
[9149]357
358
359
Note: See TracBrowser for help on using the repository browser.