Ignore:
Timestamp:
2017-07-06 14:54:47 (2 years ago)
Author:
npo17_47
Message:
 
File:
1 edited

Legend:

Unmodified
Added
Removed
  • 2017/27/OttoK/1v1MeBitch/1v1MeBitch/_1v1MeBitch/_1v1MeBitch.cs

    r8938 r8967  
    99public class _1v1MeBitch : PhysicsGame 
    1010{ 
     11    //Nopeuksien ja ruutujen kokojen vakioiden määrittäminen. 
    1112    const double nopeus = 200; 
    1213    const double hyppyNopeus = 750; 
     
    1617    Pelaaja pelaaja2; 
    1718 
     19    //Kuvien lisääminen. 
    1820    Image ohjuksenKuva = LoadImage("ohjus"); 
    1921    Image pelaaja1kuva = LoadImage("pelaaja1"); 
    2022    Image pelaaja2kuva = LoadImage("pelaaja2"); 
    21     Image tikkaankuva = LoadImage("tikas"); 
     23    Image tikkaankuva = LoadImage("tikassejokapaistetaan"); 
    2224    Image taustakuva = LoadImage("takajeejee"); 
     25    Image shrinenkuva = LoadImage("shrinejuttu"); 
     26 
     27 
     28    //Äänien lisääminen. 
     29    SoundEffect lasersound = Game.LoadSoundEffect("pumpum1"); 
    2330 
    2431    public override void Begin() 
    2532    { 
     33        Alkuvalikko(); 
     34    } 
     35    //Alkuvalikon luominen. 
     36    void Alkuvalikko() 
     37    { 
     38        MultiSelectWindow alkuValikko = new MultiSelectWindow("Pelin alkuvalikko","Aloita peli", "Lopeta"); 
     39        Add(alkuValikko); 
     40 
     41        alkuValikko.AddItemHandler(0, Aloitapeli); 
     42        alkuValikko.AddItemHandler(1, Exit); 
     43    } 
     44    //Pelin aloitus. 
     45    void Aloitapeli() 
     46    { 
     47        ClearAll(); 
    2648        Gravity = new Vector(0, -1000); 
    27  
    2849        LuoKentta(); 
    2950        LisaaNappaimet(); 
    30         IsFullScreen = false; 
    31  
     51        IsFullScreen = true; 
     52 
     53        //Ammuslaskurien sijaintien määrittäminen 
    3254        pelaaja1.Ammuslaskuri = LuoAmmuslaskuri(Screen.Right - 100, Screen.Bottom + 100); 
    3355        pelaaja2.Ammuslaskuri = LuoAmmuslaskuri(Screen.Left + 100, Screen.Bottom + 100); 
    3456 
     57        //Kameran määrittäminen. 
    3558        Camera.ZoomToLevel(); 
    3659        Camera.StayInLevel = true; 
    37     } 
    38  
     60    }     
     61 
     62    //Kentän luonti. 
    3963    void LuoKentta() 
    4064    { 
     
    4771        Level.CreateBorders(); 
    4872        Level.Background.Image = taustakuva; 
    49  
     73        Level.Background.FitToLevel(); 
     74 
     75        //Shrinen ajastin(Kuinka usein shrinejä spawnaa). 
    5076        Timer ajastin = new Timer(); 
    51         ajastin.Interval = 2; 
     77        ajastin.Interval = 4; 
    5278        ajastin.Timeout += LuoShrine; 
    5379        ajastin.Start(); 
     
    6086        Add(taso); 
    6187    } 
    62  
     88    //Luodaan platformit, joiden läpi voi mennä ja joiden päällä voi myös seistä. 
    6389    void LisaaTikas(Vector paikka, double leveys, double korkeus) 
    64     { 
    65         //Luodaan tikkaat. 
     90    {       
    6691        Tikas tikas = new Tikas(leveys, korkeus); 
    6792        tikas.MakeOneWay(); 
     
    6994        tikas.MakeStatic(); 
    7095        tikas.Color = Color.Beige; 
     96        tikas.Image = tikkaankuva; 
    7197        tikas.Position = paikka; 
    7298        tikas.Tag = "tikas"; 
     
    74100    } 
    75101 
    76  
     102    //Pelaajan luonti 
    77103    Pelaaja LisaaPelaaja(Vector paikka, double leveys, double korkeus, Color vari, Vector laskurinpaikka) 
    78104    { 
     
    81107        pelaaja.Mass = 4.0; 
    82108        pelaaja.Color = vari; 
    83         pelaaja.Ammu = Ammu1; 
     109        pelaaja.Ammu = AmmuNolla; 
    84110        pelaaja.Tag = "pelaaja"; 
    85111        Add(pelaaja); 
    86112 
     113        //Elämäpalkin luominen. 
    87114        ProgressBar elamaPalkki = new ProgressBar(150, 20); 
    88115        elamaPalkki.Position = laskurinpaikka; 
     
    90117        Add(elamaPalkki); 
    91118 
     119        //Powerupin (shrinen) törmäyskäsittelijä. 
    92120        AddCollisionHandler<Pelaaja, PhysicsObject>(pelaaja, "shrine", PowerUp); 
    93121        return pelaaja; 
     
    109137    { 
    110138        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet"); 
    111         Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli"); 
     139        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Alkuvalikko, "Lopeta peli"); 
    112140 
    113141        Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus); 
     
    123151 
    124152        Keyboard.Listen(Key.NumPad0, ButtonState.Pressed, Ammu, "Ammu ohjus", pelaaja1); 
    125         Keyboard.Listen(Key.LeftControl, ButtonState.Pressed, Ammu, "Ammu ohjus", pelaaja2); 
    126     } 
     153        Keyboard.Listen(Key.H, ButtonState.Pressed, Ammu, "Ammu ohjus", pelaaja2); 
     154    } 
     155    //Pelaajien ammuslaskurien luonti. 
    127156    IntMeter LuoAmmuslaskuri(double sijaintix, double sijaintiy) 
    128157    { 
     
    137166        Add(pisteNaytto); 
    138167 
     168        //Ammuslaskurin 4 sekuntin latausaika. 
    139169        ammuslaskuri.LowerLimit += delegate 
    140170        { 
     
    157187    void Alas(Pelaaja hahmo, double nopeus, string tag) 
    158188    { 
     189        //Tikkaiden läpi meneminen. 
    159190        List<GameObject> tikkaat = GetObjectsAt(new Vector(hahmo.X, hahmo.Bottom - 5)); 
    160191        bool voiPudota = false; 
     
    173204    } 
    174205 
     206    //Aloitusase, jolla ei voi ampua(tyhjää). 
     207    void AmmuNolla(Pelaaja hahmo) 
     208    { 
     209 
     210    } 
    175211    void Ammu(Pelaaja hahmo) 
    176212    { 
     
    180216        hahmo.Ammu(hahmo); 
    181217    } 
    182  
     218    //Ensimmäinen ase, joka ampuu ohjuksia. 
    183219    void Ammu1(Pelaaja hahmo) 
    184220    { 
     
    202238        }); 
    203239    } 
    204     void Ammu2(Pelaaja hahmo) 
    205     { 
    206         PhysicsObject laaseri = new PhysicsObject(70, 5); 
    207         laaseri.Position = hahmo.Position; 
    208         laaseri.X += hahmo.FacingDirection.GetVector().X * 70; 
    209         laaseri.Color = hahmo.Color; 
    210         laaseri.CollisionIgnoreGroup = 1; 
    211         laaseri.IgnoresGravity = true; 
    212         laaseri.IgnoresCollisionResponse = true; 
    213         Add(laaseri); 
    214  
    215         hahmo.Ammuslaskuri.AddValue(-1); 
    216  
    217         laaseri.Hit(hahmo.FacingDirection.GetVector() * 4000); 
    218         if (laaseri.Velocity.X < 0) laaseri.Angle += Angle.FromDegrees(180); 
    219         AddCollisionHandler(laaseri, delegate (PhysicsObject a, PhysicsObject b) 
    220         { 
    221             TuhoaLaser(a, b, hahmo); 
    222         }); 
    223      } 
    224     void Ammu3(Pelaaja hahmo) 
    225     { 
    226  
    227     } 
     240    // Ohjuksen tuhoaminen ja osuminen. 
    228241    void TuhoaOhjus(PhysicsObject ohjus, PhysicsObject kohde, PhysicsObject ampuja) 
    229242    { 
     
    242255                    kohdePelaaja.ElamaLaskuri.Value--; 
    243256 
    244                     if (kohdePelaaja.IsDestroyed || kohdePelaaja.IsDestroying) Timer.SingleShot(2.0, ConfirmExit); 
     257                    if (kohdePelaaja.IsDestroyed || kohdePelaaja.IsDestroying) Timer.SingleShot(2.0, Alkuvalikko); 
    245258                } 
    246259            }; 
     
    248261        } 
    249262    } 
     263    //Toinen ase, joka ampuu laaseria, joka ei räjähdä ja etenee nopeasti. 
     264    void Ammu2(Pelaaja hahmo) 
     265    { 
     266        PhysicsObject laaseri = new PhysicsObject(70, 5); 
     267        laaseri.Position = hahmo.Position; 
     268        laaseri.X += hahmo.FacingDirection.GetVector().X * 70; 
     269        laaseri.Color = hahmo.Color; 
     270        laaseri.CollisionIgnoreGroup = 1; 
     271        laaseri.IgnoresGravity = true; 
     272        laaseri.IgnoresCollisionResponse = true; 
     273        Add(laaseri); 
     274 
     275        lasersound.Play(); 
     276 
     277        hahmo.Ammuslaskuri.AddValue(-1); 
     278 
     279        laaseri.Hit(hahmo.FacingDirection.GetVector() * 4000); 
     280        if (laaseri.Velocity.X < 0) laaseri.Angle += Angle.FromDegrees(180); 
     281        AddCollisionHandler(laaseri, delegate (PhysicsObject a, PhysicsObject b) 
     282        { 
     283            TuhoaLaser(a, b, hahmo); 
     284        }); 
     285    } 
     286    //Laaserin tuhoaminen ja osuminen. 
     287   void TuhoaLaser(PhysicsObject laaseri, PhysicsObject kohde, PhysicsObject ampuja) 
     288    { 
     289        if (kohde.Tag != "pelaaja") return; 
     290        Pelaaja p = (Pelaaja)kohde; 
     291        p.ElamaLaskuri.AddValue(-2); 
     292        laaseri.Destroy(); 
     293 
     294        if (p.IsDestroyed || p.IsDestroying) Timer.SingleShot(2.0, Alkuvalikko); 
     295    } 
     296    //Kolmas ase, joka ampuu hitaita kanuunankuulia, jotka törmätessään tekevät ison räjähdyksen. 
     297    void Ammu3(Pelaaja hahmo) 
     298    { 
     299        PhysicsObject jytky = new PhysicsObject(40, 40); 
     300        jytky.Position = hahmo.Position; 
     301        jytky.X += hahmo.FacingDirection.GetVector().X * 80; 
     302        jytky.Color = hahmo.Color; 
     303        jytky.Shape = Shape.Circle; 
     304        jytky.CollisionIgnoreGroup = 1; 
     305        jytky.IgnoresGravity = true; 
     306        jytky.IgnoresCollisionResponse = true; 
     307        Add(jytky); 
     308 
     309        hahmo.Ammuslaskuri.AddValue(-1); 
     310 
     311        jytky.Hit(hahmo.FacingDirection.GetVector() * 600); 
     312        if (jytky.Velocity.X < 0) jytky.Angle += Angle.FromDegrees(180); 
     313        AddCollisionHandler(jytky, delegate (PhysicsObject a, PhysicsObject b) 
     314        { 
     315            TuhoaJytky(a, b, hahmo); 
     316        }); 
     317    } 
     318    //Kanuunankuulien tuhoaminen ja osuminen. 
     319    void TuhoaJytky(PhysicsObject jytky, PhysicsObject kohde, PhysicsObject ampuja) 
     320    { 
     321        if (kohde.Tag != "tikas") 
     322        { 
     323 
     324            Explosion rajahdys = new Explosion(200); 
     325            rajahdys.Force = 45; 
     326            rajahdys.Position = jytky.Position; 
     327            Add(rajahdys); 
     328            rajahdys.ShockwaveReachesObject += delegate (IPhysicsObject rajahdyksenKohde, Vector shokki) 
     329            { 
     330                Pelaaja kohdePelaaja = rajahdyksenKohde as Pelaaja; 
     331                if (kohdePelaaja != null && kohdePelaaja != ampuja) 
     332                { 
     333                    kohdePelaaja.ElamaLaskuri.Value--; 
     334 
     335                    if (kohdePelaaja.IsDestroyed || kohdePelaaja.IsDestroying) Timer.SingleShot(2.0, Alkuvalikko); 
     336                } 
     337            }; 
     338            jytky.Destroy(); 
     339        } 
     340    } 
     341    //PowerUp shrinejen luonti. 
    250342    void LuoShrine() 
    251343    { 
     
    257349        shrine.IgnoresGravity = true; 
    258350        shrine.Tag = "shrine"; 
     351        shrine.Image = shrinenkuva; 
    259352        Add(shrine); 
    260353    } 
     354    //Aseiden arpominen yksi kolmesta. 
    261355    void PowerUp(Pelaaja pelaaja, PhysicsObject shrine) 
    262356    { 
     
    264358 
    265359        Action<Pelaaja> vanha = pelaaja.Ammu; 
    266         while(pelaaja.Ammu == vanha) 
     360        while (pelaaja.Ammu == vanha) 
    267361            pelaaja.Ammu = RandomGen.SelectOne<Action<Pelaaja>>(Ammu1, Ammu2, Ammu3); 
    268362    } 
    269     void TuhoaLaser(PhysicsObject laaseri, PhysicsObject kohde, PhysicsObject ampuja) 
    270     { 
    271         if (kohde.Tag != "pelaaja") return; 
    272         Pelaaja p = (Pelaaja)kohde; 
    273         p.ElamaLaskuri.AddValue(-2); 
    274         laaseri.Destroy(); 
    275  
    276         if (p.IsDestroyed || p.IsDestroying) Timer.SingleShot(2.0, ConfirmExit); 
    277     } 
    278363} 
Note: See TracChangeset for help on using the changeset viewer.