Changeset 865


Ignore:
Timestamp:
2010-06-15 13:47:12 (9 years ago)
Author:
arhetaka
Message:

päivitys

Location:
2010/24/arhetaka/FysiikkaPeli1/FysiikkaPeli1
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • 2010/24/arhetaka/FysiikkaPeli1/FysiikkaPeli1/Content/Content.contentproj

    r817 r865  
    6565    </Compile> 
    6666  </ItemGroup> 
     67  <ItemGroup> 
     68    <Compile Include="special.png"> 
     69      <Name>special</Name> 
     70      <Importer>TextureImporter</Importer> 
     71      <Processor>TextureProcessor</Processor> 
     72    </Compile> 
     73  </ItemGroup> 
    6774</Project> 
  • 2010/24/arhetaka/FysiikkaPeli1/FysiikkaPeli1/Peli.cs

    r817 r865  
    1818    PhysicsObject ylaReuna; 
    1919 
    20     IntMeter pelaajan1Pisteet; 
    21     IntMeter pelaajan2Pisteet; 
     20    IntMeter p1Pisteet; 
     21    IntMeter p2Pisteet; 
     22 
     23    BarGauge p1special; 
     24    BarGauge p2special; 
     25     
     26    DoubleMeter p1specialTeho; 
     27    DoubleMeter p2specialTeho; 
     28 
     29    Double specialLifeTime = 1; 
     30 
     31    Boolean p1specialkentalla = false; 
     32    Boolean p2specialkentalla = false; 
     33 
     34    Timer p1specialTimer; 
     35    Timer p2specialTimer; 
     36 
     37    int specialNopeus = 750; 
    2238 
    2339    Animation alus1_kaasu_tekst; 
     
    2743    double resolutionY; 
    2844 
     45    Timer UpdateTimer; 
     46    double updateInterval = 0.1; 
     47 
     48    int siirtymaLaidassa = 80; 
     49 
    2950    bool alus1_kaasuttaa = false; 
    30     bool alus2_kaasuttaa = false;    
     51    bool alus2_kaasuttaa = false; 
     52 
     53    int perusAmmusKoko = 3; 
     54    int AlustenHealth = 10; 
     55    double alustenIlmanvastus = 0.999; 
    3156 
    3257    protected override void Begin() 
    3358    { 
    34         LuoKentta();         
     59        AloitaPeli();         
     60    } 
     61    void AloitaPeli() 
     62    { 
     63        ClearAll(); 
     64        alus1_kaasuttaa = false; 
     65        alus2_kaasuttaa = false; 
     66        p1specialkentalla = false; 
     67        p2specialkentalla = false; 
     68        LuoKentta(); 
    3569        AsetaOhjaimet(); 
    3670        LisaaLaskurit(); 
    37         AloitaPeli(); 
    38     } 
    39  
     71    } 
    4072    void LuoKentta() 
    4173    { 
    42    
     74        TeeAlukset(); 
     75        UpDate(); //tekee ajopisteet ja tutkii ovatko alukset vielä kentällä 
     76        TeeSpecial(); //tekee special aseet ja lisää kuuntelijat 
     77        resolutionX = Screen.Width; 
     78        resolutionY = Screen.Height; 
     79        TeeReunat(); 
     80        Level.Background.CreateStars(1000); 
     81        Camera.ZoomToLevel(); 
     82    } 
     83    void TeeAlukset() 
     84    { 
    4385        alus1 = LuoAlus(1, Level.Left + 20.0, 0.0); 
    4486        alus1.Tag = "alus1"; 
     
    4688 
    4789        Image[] alus_kaasu1 = LoadImages( 
    48         "alus1",         
     90        "alus1", 
    4991        "alus1_kaasuttaa" 
    5092        ); 
    5193        alus1_kaasu_tekst = new Animation(alus_kaasu1); 
    52         alus1_kaasu_tekst.FPS = 5; 
     94        alus1_kaasu_tekst.FPS = 10; 
    5395        alus1.Animation = alus1_kaasu_tekst; 
    54         
     96 
     97        alus1.LinearDamping = alustenIlmanvastus; 
     98 
    5599        alus2 = LuoAlus(2, Level.Right - 20.0, 0.0); 
    56         alus2.Tag = "alus2";         
     100        alus2.Tag = "alus2"; 
    57101        alus2.Image = LoadImage("alus2"); 
    58102 
    59103        Image[] alus_kaasu2 = LoadImages( 
    60         "alus2",         
     104        "alus2", 
    61105        "alus2_kaasuttaa" 
    62         );        
     106        ); 
    63107 
    64108        alus2_kaasu_tekst = new Animation(alus_kaasu2); 
     
    66110        alus2.Animation = alus2_kaasu_tekst; 
    67111        alus2.Angle = Angle.StraightAngle; 
    68         //TeeAjoviivaa(); 
    69  
    70         resolutionX = Screen.Width; 
    71         resolutionY = Screen.Height; 
    72  
     112        alus2.LinearDamping = alustenIlmanvastus; 
     113 
     114    } 
     115    void TeeReunat() 
     116    { 
    73117 
    74118        vasenReuna = PhysicsObject.CreateStaticObject(5, resolutionX + 500); 
    75119        vasenReuna.IgnoresPhysicsLogics = true; 
    76120        vasenReuna.Color = Color.White; 
    77         vasenReuna.X = -(resolutionX / 2) - 50;         
     121        vasenReuna.X = -(resolutionX / 2) - 50; 
    78122        vasenReuna.Restitution = 1.0; 
    79123        vasenReuna.IsVisible = true; 
     
    108152        alaReuna.IgnoresPhysicsLogics = true; 
    109153        alaReuna.Color = Color.White; 
    110         alaReuna.Y = -(resolutionY / 2) -50; 
     154        alaReuna.Y = -(resolutionY / 2) - 50; 
    111155        alaReuna.Restitution = 0.0; 
    112156        alaReuna.IsVisible = true; 
     
    115159        AddCollisionHandler(alaReuna, ReunaanOsuu); 
    116160        Add(alaReuna); 
    117         
    118         Level.Background.CreateStars(1000); 
    119         Camera.ZoomToLevel(); 
    120     } 
    121  
     161    } 
    122162    PhysicsObject LuoAlus(int kumpi, double x, double y) 
    123163    { 
     
    134174        return alus; 
    135175    } 
    136  
    137176    void LisaaLaskurit() 
    138177    { 
    139         pelaajan1Pisteet = LuoPisteLaskuri(Screen.Left + 100.0, Screen.Top - 100.0); 
    140         pelaajan2Pisteet = LuoPisteLaskuri(Screen.Right - 100.0, Screen.Top - 100.0); 
    141     } 
    142  
     178        p1Pisteet = LuoPisteLaskuri(Screen.Left + 100.0, Screen.Top - 100.0); 
     179        p2Pisteet = LuoPisteLaskuri(Screen.Right - 100.0, Screen.Top - 100.0); 
     180    } 
    143181    IntMeter LuoPisteLaskuri(double x, double y) 
    144182    { 
    145183        IntMeter laskuri = new IntMeter(0); 
    146         laskuri.MaxValue = 100; 
     184        laskuri.MaxValue = AlustenHealth; 
    147185        ValueDisplay naytto = new ValueDisplay(); 
    148186        naytto.BindTo(laskuri); 
     
    150188        naytto.Y = y; 
    151189        naytto.ValueColor = Color.White; 
     190        laskuri.UpperLimit += Voitto; 
     191 
    152192        Add(naytto); 
    153193        return laskuri; 
    154194    } 
    155  
    156     void KasittelePallonTormays(PhysicsObject pallo, PhysicsObject kohde) 
    157     { 
    158         if (kohde == oikeaReuna) 
    159         { 
    160             pelaajan1Pisteet.Value += 1; 
    161         } 
    162         else if (kohde == vasenReuna) 
    163         { 
    164             pelaajan2Pisteet.Value += 1; 
    165         } 
    166     } 
    167  
    168     void AloitaPeli() 
    169     { 
    170     
    171     } 
    172  
    173195    void AsetaOhjaimet() 
    174196    { 
     
    190212        Keyboard.Listen(Key.RightShift, ButtonState.Pressed, ammu, null, alus2, 1); 
    191213 
    192  
    193214        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet"); 
    194215        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, "Poistu"); 
    195        
    196         ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu"); 
    197         ControllerTwo.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu"); 
    198     } 
    199  
    200     
     216        Keyboard.Listen(Key.F2, ButtonState.Pressed, AloitaPeli, "uusi peli");         
     217    }    
    201218    void kaannaVasen(PhysicsObject alus, int nopeus) 
    202219    { 
     
    211228        alus.AngularVelocity = 0; 
    212229    } 
    213  
    214230    void kaasua(PhysicsObject alus, int nopeus) 
    215231    { 
     
    243259    void ammu(PhysicsObject alus, int nopeus) 
    244260    { 
    245          
    246             PhysicsObject ammus = new PhysicsObject(3, 3); 
    247             ammus.Shape = Shapes.Circle; 
    248             ammus.Color = Color.YellowGreen; 
    249             ammus.X = alus.X; 
    250             ammus.Y = alus.Y; 
    251             ammus.IgnoresCollisionResponse = true; 
    252             TimeSpan elinaika = new TimeSpan(20000000); 
    253             ammus.MaximumLifetime = elinaika; 
    254             ammus.Tag = alus.Tag; 
    255             AddCollisionHandler(ammus, AmmusOsuu); 
    256             Add(ammus); 
    257             Angle aluksenKulma = alus.Angle; 
    258             Vector impulssi = Vector.FromLengthAndAngle(500, aluksenKulma); 
    259             ammus.Hit(impulssi); 
     261        PhysicsObject ammus = new PhysicsObject(perusAmmusKoko, perusAmmusKoko); 
     262        ammus.Shape = Shapes.Circle; 
     263        ammus.Color = Color.YellowGreen; 
     264        ammus.X = alus.X; 
     265        ammus.Y = alus.Y; 
     266        ammus.IgnoresCollisionResponse = true; 
     267        ammus.IgnoresExplosions = true; 
     268        TimeSpan elinaika = new TimeSpan(15000000); 
     269        ammus.MaximumLifetime = elinaika; 
     270        ammus.Tag = alus.Tag; 
     271        AddCollisionHandler(ammus, AmmusOsuu); 
     272        Add(ammus); 
     273        Angle aluksenKulma = alus.Angle; 
     274        Vector impulssi = Vector.FromLengthAndAngle(500, aluksenKulma); 
     275        ammus.Hit(impulssi); 
    260276    } 
    261277    void AmmusOsuu(PhysicsObject ammus, PhysicsObject kohde) 
    262278    { 
    263279        if (ammus.Tag != kohde.Tag && kohde.Tag != "ajopiste") 
    264         { 
    265             ammus.Destroy(); 
    266             Explosion rajahdys = new Explosion(20); 
    267             rajahdys.Position = ammus.Position; 
    268             Add(rajahdys); 
     280        {    
     281            if (ammus.Width != perusAmmusKoko) //jos special 
     282            { 
     283                if (kohde.Tag == "alus1") 
     284                { 
     285                    rajaytap2Special(p2specialTimer); 
     286                } 
     287                else 
     288                { 
     289                    rajaytap1Special(p1specialTimer); 
     290                } 
     291            } 
     292            else  
     293            { 
     294                Explosion rajahdys; 
     295                rajahdys = new Explosion(40); 
     296                rajahdys.Position = ammus.Position; 
     297                Add(rajahdys); 
     298            } 
     299             
    269300            if (kohde.Tag == "alus2") 
    270301            { 
    271                 pelaajan1Pisteet.Value += 1; 
     302                p1Pisteet.Value += (int)(ammus.Width / 3); 
    272303            } 
    273304            else if (kohde.Tag == "alus1") 
    274305            { 
    275                 pelaajan2Pisteet.Value += 1; 
     306                p2Pisteet.Value += (int)(ammus.Width / 3); 
    276307            } 
    277         } 
     308            ammus.Destroy(); 
     309        } 
     310         
    278311    } 
    279312    void AlusOsuu(PhysicsObject alus, PhysicsObject kohde) 
    280313    { 
    281314         
    282     } 
    283      
    284     void TeeAjoviivaa() 
    285     { 
    286         Timer aikaLaskuri = new Timer();                     // luodaan uusi ajastin, nimeltä aikaLaskuri 
    287         aikaLaskuri.Interval = 0.1;                      // ajastukseksi 5 sekuntia 
    288         aikaLaskuri.Trigger += new Timer.TriggerHandler(PudotaAjopiste);  //   // asetetaan tapahtuma, kun aikaLaskuri kun 5 sekuntia on kulunut. 
    289         Add(aikaLaskuri);                       // lisätään aikaLaskuri peliin 
    290         aikaLaskuri.Start();                           // käynnistetään aikaLaskuri      
    291     } 
    292  
    293     private void PudotaAjopiste(Timer sender) 
    294     { 
    295         if (alus1_kaasuttaa) 
     315    }     
     316    void UpDate() 
     317    { 
     318        UpdateTimer = new Timer();                     // luodaan uusi ajastin, nimeltä aikaLaskuri 
     319        UpdateTimer.Interval = updateInterval;                      // ajastukseksi 5 sekuntia 
     320        UpdateTimer.Trigger += new Timer.TriggerHandler(Paivitys);  //   // asetetaan tapahtuma, kun aikaLaskuri kun 5 sekuntia on kulunut. 
     321        Add(UpdateTimer);                       // lisätään aikaLaskuri peliin 
     322        UpdateTimer.Start();                           // käynnistetään aikaLaskuri      
     323    } 
     324    private void Paivitys(Timer sender) 
     325    { 
     326        //ovatko alukset kentällä 
     327        if (alus1.X < (vasenReuna.X - 50)) 
     328        { 
     329            alus1.X = oikeaReuna.X - siirtymaLaidassa; 
     330        } 
     331        if (alus2.X < (vasenReuna.X - 50)) 
     332        { 
     333            alus2.X = oikeaReuna.X - siirtymaLaidassa; 
     334        } 
     335        if (alus1.X > (oikeaReuna.X + 50)) 
     336        { 
     337            alus1.X = vasenReuna.X + siirtymaLaidassa; 
     338        } 
     339        if (alus2.X > (oikeaReuna.X + 50)) 
     340        { 
     341            alus2.X = vasenReuna.X + siirtymaLaidassa; 
     342        } 
     343        if (alus1.Y > (ylaReuna.Y + 50)) 
     344        { 
     345            alus1.Y = alaReuna.Y + siirtymaLaidassa; 
     346        } 
     347        if (alus2.Y > (ylaReuna.Y + 50)) 
     348        { 
     349            alus2.Y = alaReuna.Y + siirtymaLaidassa; 
     350        } 
     351        if (alus1.Y < (alaReuna.Y - 50)) 
     352        { 
     353            alus1.Y = ylaReuna.Y - siirtymaLaidassa; 
     354        } 
     355        if (alus2.Y < (alaReuna.Y - 50)) 
     356        { 
     357            alus1.Y = ylaReuna.Y - siirtymaLaidassa; 
     358        } 
     359 
     360 
     361        if (alus1_kaasuttaa) //ajopisteen teko 
    296362        { 
    297363            PhysicsObject piste = teeAjopiste(alus1); 
    298364            Add(piste); 
    299365        } 
    300         if (alus2_kaasuttaa) 
     366        if (alus2_kaasuttaa) //ajopisteen teko 
    301367        { 
    302368            PhysicsObject piste = teeAjopiste(alus2); 
     
    319385        return piste; 
    320386    } 
    321  
    322387    void ReunaanOsuu(PhysicsObject reuna, PhysicsObject osuja) 
    323388    { 
    324389        if (reuna.Tag == "ylareuna") 
    325390        { 
    326             osuja.Y = alaReuna.Y + 80; 
     391            osuja.Y = alaReuna.Y + siirtymaLaidassa; 
    327392        } 
    328393 
    329394        if (reuna.Tag == "alareuna") 
    330395        { 
    331             osuja.Y = ylaReuna.Y - 80; 
     396            osuja.Y = ylaReuna.Y - siirtymaLaidassa; 
    332397        } 
    333398        if (reuna.Tag == "vasenreuna") 
    334399        { 
    335             osuja.X = (oikeaReuna.X - 80); 
     400            osuja.X = (oikeaReuna.X - siirtymaLaidassa); 
    336401        } 
    337402 
    338403        if (reuna.Tag == "oikeareuna") 
    339404        { 
    340             osuja.X = (vasenReuna.X + 80); 
    341         } 
    342     } 
    343  
     405            osuja.X = (vasenReuna.X + siirtymaLaidassa); 
     406        } 
     407    } 
     408    void TeeSpecial() 
     409    { 
     410        p1specialTimer = new Timer();         
     411        p2specialTimer = new Timer(); 
     412 
     413        Add(p1specialTimer); 
     414        Add(p2specialTimer); 
     415         
     416        LisaaSpecialOhjaimet(); 
     417        LisaaSpecialMittarit(); 
     418    } 
     419    void LisaaSpecialOhjaimet() 
     420    {        
     421        Keyboard.Listen(Key.LeftShift, ButtonState.Down, LataaSpecial, "Special lataus", alus1, 1); 
     422        Keyboard.Listen(Key.LeftShift, ButtonState.Released, LaukaiseSpecial, "laukaise special", alus1, 1); 
     423        Keyboard.Listen(Key.RightControl, ButtonState.Down, LataaSpecial, "Special lataus", alus2, 1); 
     424        Keyboard.Listen(Key.RightControl, ButtonState.Released, LaukaiseSpecial, "laukaise special", alus2, 1); 
     425    } 
     426    void LisaaSpecialMittarit() 
     427    { 
     428        p1specialTeho = new DoubleMeter(perusAmmusKoko + 1); 
     429        p1specialTeho.MaxValue = 100; 
     430 
     431        p2specialTeho = new DoubleMeter(perusAmmusKoko + 1); 
     432        p2specialTeho.MaxValue = 100; 
     433         
     434        p1special = new BarGauge(); 
     435        p1special.Max = 100; 
     436        p1special.ValueColor = Color.LightBlue; 
     437        p1special.BindTo(p1specialTeho); 
     438        p1special.X = Screen.Left + 100; 
     439        p1special.Y = Screen.Top - 200; 
     440        p1special.Width = 40; 
     441        Add(p1special); 
     442 
     443        p2special = new BarGauge(); 
     444        p2special.Max = 100; 
     445        p2special.ValueColor = Color.LightBlue; 
     446        p2special.BindTo(p2specialTeho); 
     447        p2special.X = Screen.Right - 100; 
     448        p2special.Y = Screen.Top - 200; 
     449        p2special.Width = 40; 
     450        Add(p2special); 
     451    }     
     452    void LataaSpecial(PhysicsObject alus, int nopeus) 
     453    { 
     454        if (alus.Tag == "alus1" && !p1specialkentalla) 
     455        { 
     456            p1specialTeho.Value += 2; 
     457        } 
     458        if (alus.Tag == "alus2" && !p2specialkentalla) 
     459        { 
     460            p2specialTeho.Value += 2; 
     461        } 
     462 
     463    } 
     464    void LaukaiseSpecial(PhysicsObject alus, int nopeus) 
     465    { 
     466        if (alus.Tag == "alus1" && !p1specialkentalla) 
     467        { 
     468            PhysicsObject ammus = new PhysicsObject((p1specialTeho / 2), (p1specialTeho / 2)); 
     469            ammus.Shape = Shapes.Circle; 
     470            ammus.Color = Color.LightBlue; 
     471            ammus.X = alus.X; 
     472            ammus.Y = alus.Y; 
     473            ammus.IgnoresCollisionResponse = true;             
     474            ammus.Tag = alus.Tag; 
     475            AddCollisionHandler(ammus, AmmusOsuu); 
     476            ammus.Image = LoadImage("special"); 
     477            ammus.CanRotate = true; 
     478            ammus.AngularVelocity = 3; 
     479            Add(ammus); 
     480            Angle aluksenKulma = alus.Angle; 
     481            Vector impulssi = Vector.FromLengthAndAngle(specialNopeus, aluksenKulma); 
     482            ammus.Hit(impulssi); 
     483            p1specialkentalla = true; 
     484            p1specialTimer.Tag = ammus; 
     485            p1specialTimer.Interval = specialLifeTime; 
     486            p1specialTimer.Trigger += new Timer.TriggerHandler(rajaytap1Special);  //   // asetetaan tapahtuma, kun aikaLaskuri kun 5 sekuntia on kulunut.             
     487            p1specialTimer.Start(); 
     488            p1specialTeho.Value = 1; 
     489        } 
     490        if (alus.Tag == "alus2" && !p2specialkentalla) 
     491        { 
     492            PhysicsObject ammus = new PhysicsObject((p2specialTeho / 2), (p2specialTeho / 2)); 
     493            ammus.Shape = Shapes.Circle; 
     494            ammus.Color = Color.LightBlue; 
     495            ammus.X = alus.X; 
     496            ammus.Y = alus.Y; 
     497            ammus.IgnoresCollisionResponse = true; 
     498            TimeSpan elinaika = TimeSpan.FromSeconds(specialLifeTime); 
     499            ammus.MaximumLifetime = elinaika; 
     500            ammus.Tag =alus.Tag; 
     501            AddCollisionHandler(ammus, AmmusOsuu); 
     502            ammus.Image = LoadImage("special"); 
     503            ammus.CanRotate = true; 
     504            ammus.AngularVelocity = 3; 
     505            Add(ammus); 
     506            Angle aluksenKulma = alus.Angle; 
     507            Vector impulssi = Vector.FromLengthAndAngle(specialNopeus, aluksenKulma); 
     508            ammus.Hit(impulssi); 
     509            p2specialkentalla = true; 
     510            p2specialTimer.Tag = ammus; 
     511            p2specialTimer.Interval = specialLifeTime; 
     512            p2specialTimer.Trigger += new Timer.TriggerHandler(rajaytap2Special);  //   // asetetaan tapahtuma, kun aikaLaskuri kun 5 sekuntia on kulunut.             
     513            p2specialTimer.Start(); 
     514            p2specialTeho.Value = 1;             
     515        } 
     516    } 
     517    private void rajaytap1Special(Timer sender) 
     518    {   
     519        PhysicsObject ammus = (PhysicsObject)sender.Tag; 
     520        Explosion jysays = new Explosion(ammus.Width * 3); 
     521        jysays.Position = ammus.Position; 
     522        jysays.Force = 100; 
     523        Add(jysays); 
     524        ammus.Destroy();       
     525        sender.Stop();         
     526        p1specialkentalla = false; 
     527    } 
     528    private void rajaytap2Special(Timer sender) 
     529    { 
     530        PhysicsObject ammus = (PhysicsObject)sender.Tag;         
     531        Explosion jysays = new Explosion(ammus.Width * 3); 
     532        jysays.Position = ammus.Position; 
     533        jysays.Force = 100; 
     534        Add(jysays); 
     535        ammus.Destroy(); 
     536        sender.Stop(); 
     537        p2specialkentalla = false;     
     538    } 
     539    void Voitto(int laskuri) 
     540    { 
     541        if (p1Pisteet.Value >= AlustenHealth) 
     542        { 
     543            MessageDisplay.TextColor = Color.White; 
     544            MessageDisplay.Add("Pelaaja 1 voitti pelin."); 
     545        } 
     546        if (p2Pisteet.Value >= AlustenHealth) 
     547        { 
     548            MessageDisplay.TextColor = Color.White; 
     549            MessageDisplay.Add("Pelaaja 2 voitti pelin."); 
     550        }         
     551    } 
    344552} 
Note: See TracChangeset for help on using the changeset viewer.