Changeset 2872 for 2012/23/SamuH


Ignore:
Timestamp:
2012-06-08 11:05:01 (11 years ago)
Author:
hesahaut
Message:
 
Location:
2012/23/SamuH/BOMBDUDE/BOMBDUDE
Files:
8 added
3 edited

Legend:

Unmodified
Added
Removed
  • 2012/23/SamuH/BOMBDUDE/BOMBDUDE/BOMBDUDE/BOMBDUDE.cs

    r2800 r2872  
    99public class BOMBDUDE : PhysicsGame 
    1010{ 
     11    const double RUUDUN_SIVUN_PITUUS = 100.0; 
     12    int ruutujaVaakaan; 
     13    int ruutujaPystyyn; 
     14 
    1115    Image BombDudePic = LoadImage("BombDude"); 
    12     Image Kivi = LoadImage("Kivi"); 
    13     Image Laudat = LoadImage("Laudat"); 
    14     Image Uloskäynti = LoadImage("Uloskäynti"); 
    15     Image Pommi = LoadImage("Pommi"); 
    16     Image Timantti = LoadImage("Timantti"); 
    17  
    18     double liikkumisnopeus = 280; 
     16    Image KiviPic = LoadImage("Kivi"); 
     17    Image LaudatPic = LoadImage("Laudat"); 
     18    Image UloskayntiPic = LoadImage("Uloskäynti"); 
     19    Image PommiPic = LoadImage("Pommi"); 
     20    Image TimanttiPic = LoadImage("Timantti"); 
     21    Image MaaliPic = LoadImage("Maali2"); 
    1922     
     23    double liikkumisnopeus = 1800; 
     24 
    2025    PhysicsObject BombDude; 
     26    IntMeter timanttiLaskuri; 
     27    IntMeter pommiLaskuri; 
     28    ExplosionSystem es; 
     29    DoubleMeter alaspainLaskuri; 
     30    Timer aikaLaskuri; 
    2131     
    2232    public override void Begin() 
    2333    { 
    24         LuoKentta(); 
     34        MultiSelectWindow valikko = new MultiSelectWindow("BOMBDUDE(demo)", "Yksinpeli", "Parhaat pisteet", "Poistu"); 
     35        valikko.ItemSelected += PainettiinValikonNappia; 
     36        valikko.Color = Color.Azure; 
     37d        Add(valikko); 
     38 
     39    } 
     40 
     41    void AloitaPeli() 
     42    { 
     43        timanttiLaskuri = LuoLaskuri(0, 0, 32); 
     44        pommiLaskuri = LuoLaskuri(3, 0, 3); 
     45        pommiLaskuri.LowerLimit += PommitLoppui; 
     46        LuoNaytot(); 
     47        LuoEfektit(); 
     48        LuoKentta("BOMBDUDE mappi1"); 
    2549        AsetaNappaimet(); 
    26          
     50        LuoAikaLaskuri(); 
     51    } 
     52 
     53 
     54    void PommitLoppui(int laskurinarvo) 
     55    { 
     56        MessageDisplay.Add("Pommit loppui"); 
     57        Keyboard.Disable(Key.Space); 
     58        Timer.SingleShot(3.0, delegate 
     59        { 
     60            pommiLaskuri.Reset(); 
     61            Keyboard.Enable(Key.Space); 
     62        }); 
    2763    } 
    2864 
     
    3874        Keyboard.Listen(Key.D, ButtonState.Down, Liikuta, "Liiku oikealle.", BombDude, new Vector(1, 0)); 
    3975        Keyboard.Listen(Key.D, ButtonState.Released, Liikuta, null, BombDude, Vector.Zero); 
     76        Keyboard.Listen(Key.Space, ButtonState.Pressed, TiputaPommi, "Tiputa pommi", BombDude); 
     77        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Poistu"); 
     78    } 
     79 
     80    IntMeter LuoLaskuri(int def, int min, int max) 
     81    { 
     82        IntMeter laskuri = new IntMeter(def, min, max); 
     83        return laskuri; 
     84    } 
     85 
     86    Label LuoNaytto(double x, double y, IntMeter sidottavaMittari) 
     87    { 
     88        Label naytto = new Label(); 
     89        naytto.BindTo(sidottavaMittari); 
     90        naytto.X = x; 
     91        naytto.Y = y; 
     92        naytto.TextColor = Color.Aqua; 
     93        naytto.BorderColor = Color.Gray; 
     94        naytto.Color = Color.Gray; 
     95        Add(naytto); 
     96        return naytto; 
     97    } 
     98 
     99    void LuoNaytot() 
     100    { 
     101        Label timanttiNaytto = LuoNaytto(-490, -340, timanttiLaskuri); 
     102        LuoSelitystekstiMittarinaytolle(timanttiNaytto, "Timantteja: "); 
     103        Label pommiNaytto = LuoNaytto(-490, -380, pommiLaskuri); 
     104        LuoSelitystekstiMittarinaytolle(pommiNaytto, "Pommeja: "); 
     105    } 
     106 
     107    void LuoEfektit() 
     108    { 
     109        es = new ExplosionSystem(LoadImage("Räjähdys"), 1000); 
     110        Add(es); 
     111    } 
     112 
     113    Label LuoSelitystekstiMittarinaytolle(Label mittarinaytto, String teksti) 
     114    { 
     115        Label selitys = new Label(teksti); 
     116        selitys.Right = mittarinaytto.Left - 10; 
     117        selitys.Y = mittarinaytto.Y; 
     118        selitys.TextColor = Color.Aqua; 
     119        selitys.BorderColor = Color.Gray; 
     120        selitys.Color = Color.Gray; 
     121        Add(selitys); 
     122        return selitys; 
     123    } 
     124 
     125    void LuoKentta(String kentta) 
     126    { 
     127        TileMap ruudut = TileMap.FromLevelAsset(kentta); 
     128        ruudut.SetTileMethod('k', LuoKivi); 
     129        ruudut.SetTileMethod('l', LuoLaudat); 
     130        ruudut.SetTileMethod('p', LuoPelaaja); 
     131        ruudut.SetTileMethod('t', LuoTimantti); 
     132        ruudut.SetTileMethod('u', LuoUloskaynti); 
     133        ruudut.SetTileMethod('m', LuoMaali); 
     134        ruudut.Execute(RUUDUN_SIVUN_PITUUS, RUUDUN_SIVUN_PITUUS); 
     135        Level.CreateBorders(); 
     136        ruutujaVaakaan = ruudut.GetLength(1); 
     137        ruutujaPystyyn = ruudut.GetLength(0); 
     138 
     139        Level.BackgroundColor = Color.Gray; 
     140 
     141        Camera.ZoomToLevel(); 
     142    } 
     143 
     144    void LuoPelaaja(Vector paikka, double leveys, double korkeus) 
     145    { 
     146        BombDude = new PhysicsObject(70, 51); 
     147        AddCollisionHandler(BombDude, "Timantti", CollisionHandler.AddMeterValue(timanttiLaskuri, 1)); 
     148        AddCollisionHandler(BombDude, "Uloskaynti", PelaajaUloskaynnissa); 
     149        AddCollisionHandler(BombDude, "Timantti", delegate(PhysicsObject p, PhysicsObject kohde) { MessageDisplay.Add("Sait timantin!"); }); 
     150        AddCollisionHandler(BombDude, "Timantti", CollisionHandler.DestroyTarget); 
     151        AddCollisionHandler(BombDude, "Maali", CollisionHandler.DestroyObject); 
     152        Add(BombDude); 
     153        BombDude.CanRotate = false; 
     154        BombDude.Position = paikka; 
     155        BombDude.Image = BombDudePic; 
     156        BombDude.Tag = "BombDude"; 
     157        BombDude.LinearDamping = 0.2; 
     158        BombDude.Mass = 1; 
     159    } 
     160 
     161    void PelaajaUloskaynnissa(PhysicsObject pelaaja, PhysicsObject uloskaynti) 
     162    { 
     163        SeuraavaKentta("BOMBDUDE mappi2"); 
     164    } 
     165 
     166    void SeuraavaKentta(String kartta) 
     167    { 
     168        pommiLaskuri.Reset(); 
     169        ClearGameObjects(); 
     170        ClearControls(); 
     171        LuoNaytot(); 
     172        LuoEfektit(); 
     173        LuoKentta(kartta); 
     174        AsetaNappaimet(); 
     175        LuoAikaLaskuri(); 
     176    } 
     177 
     178    void LuoKivi(Vector paikka, double leveys, double korkeus) 
     179    { 
     180        PhysicsObject Kivi = PhysicsObject.CreateStaticObject(leveys, korkeus); 
     181        Kivi.Position = paikka; 
     182        Kivi.Image = KiviPic; 
     183        Add(Kivi); 
     184    } 
     185 
     186    void LuoLaudat(Vector paikka, double leveys, double korkeus) 
     187    { 
     188        PhysicsObject laudat = PhysicsObject.CreateStaticObject(leveys, korkeus); 
     189        laudat.Position = paikka; 
     190        laudat.Tag = "laudat"; 
     191        laudat.Image = LaudatPic; 
     192        Add(laudat); 
     193    } 
     194 
     195    void LuoMaali(Vector paikka, double leveys, double korkeus) 
     196    { 
     197    PhysicsObject Maali = PhysicsObject.CreateStaticObject(leveys, korkeus); 
     198    Maali.Position = paikka; 
     199    Maali.Tag = "Maali"; 
     200    Maali.Image = MaaliPic; 
     201        Add(Maali); 
     202    } 
     203 
     204    void LuoTimantti(Vector paikka, double leveys, double korkeus) 
     205    { 
     206        PhysicsObject Timantti = new PhysicsObject(leveys, korkeus); 
     207        Timantti.Position = paikka; 
     208        Timantti.Image = TimanttiPic; 
     209        Timantti.Tag = "Timantti"; 
     210        Add(Timantti); 
     211    } 
     212 
     213    void LuoUloskaynti(Vector paikka, double leveys, double korkeus) 
     214    { 
     215        PhysicsObject Uloskaynti = PhysicsObject.CreateStaticObject(leveys, korkeus); 
     216        Uloskaynti.Position = paikka; 
     217        Uloskaynti.Image = UloskayntiPic; 
     218        Add(Uloskaynti); 
     219        Uloskaynti.Tag = "Uloskaynti"; 
     220    } 
     221 
     222 
     223 
     224    void TiputaPommi(PhysicsObject BombDude) 
     225    { 
     226        GameObject pommi = new GameObject(RUUDUN_SIVUN_PITUUS, RUUDUN_SIVUN_PITUUS); 
     227        Vector paikka = RuudunKeskipiste(BombDude); 
     228        pommi.Position = paikka; 
     229        pommi.Image = PommiPic; 
     230        Add(pommi); 
     231        pommiLaskuri.Value--; 
     232 
     233        Timer.SingleShot(2.5, delegate 
     234        { 
     235            Explosion rajahdys = new Explosion(30); 
     236            rajahdys.IsVisible = false; 
     237            Add(rajahdys); 
     238            es.MinScale = 40; 
     239            es.MaxScale = 120; 
     240            es.MinVelocity = 50; 
     241            es.MaxVelocity = 80; 
     242            es.MinLifetime = 0.5; 
     243            es.MaxLifetime = 1.5; 
     244            es.AddEffect(paikka, 50); 
     245            rajahdys.Position = pommi.Position; 
     246            rajahdys.ShockwaveReachesObject += RajahdysOsui; 
     247            pommi.Destroy(); 
     248        }); 
     249    } 
     250 
     251    void RajahdysOsui(IPhysicsObject mihinOsui, Vector suunta) 
     252    { 
     253        if (mihinOsui.Tag.ToString() == "laudat") 
     254        { 
     255            mihinOsui.Destroy(); 
     256        } 
     257    } 
     258 
     259 
     260    Vector RuudunKeskipiste(PhysicsObject olio) 
     261    { 
     262        double pelaajanEtaisyysVasemmastaReunasta = Math.Abs(olio.X - Level.Left); 
     263        int moneskoRuutuVasemmalta = (int)(pelaajanEtaisyysVasemmastaReunasta / RUUDUN_SIVUN_PITUUS); 
     264 
     265        double pelaajanEtaisyysYlaReunasta = Math.Abs(Level.Top - olio.Y); 
     266        int moneskoRuutuYlhaalta = (int)(pelaajanEtaisyysYlaReunasta / RUUDUN_SIVUN_PITUUS); 
     267 
     268        double x = Level.Left + moneskoRuutuVasemmalta * RUUDUN_SIVUN_PITUUS + RUUDUN_SIVUN_PITUUS / 2; 
     269        double y = Level.Top - (moneskoRuutuYlhaalta * RUUDUN_SIVUN_PITUUS + RUUDUN_SIVUN_PITUUS / 2); 
     270        return new Vector(x, y); 
     271    } 
     272 
     273    void Liikuta(PhysicsObject BombDude, Vector suunta) 
     274    { 
     275        BombDude.Velocity = suunta * liikkumisnopeus; 
     276    } 
     277 
     278    void LuoAikaLaskuri() 
     279    { 
     280        alaspainLaskuri = new DoubleMeter(148, 0, 148); 
     281        alaspainLaskuri.LowerLimit += delegate { aikaLaskuri.Stop(); }; 
     282        alaspainLaskuri.LowerLimit += delegate { MessageDisplay.Add("Aika loppui..."); }; 
     283        alaspainLaskuri.LowerLimit += delegate { BombDude.Destroy(); }; 
     284 
     285        aikaLaskuri = new Timer(); 
     286        aikaLaskuri.Interval = 0.1; 
     287        aikaLaskuri.Timeout += LaskeAlaspain; 
     288        aikaLaskuri.Start(); 
     289 
     290        Label aikaNaytto = new Label(); 
     291        aikaNaytto.TextColor = Color.White; 
     292        aikaNaytto.DecimalPlaces = 1; 
     293        aikaNaytto.BindTo(alaspainLaskuri); 
     294        aikaNaytto.X = -600; 
     295        aikaNaytto.Y = -420; 
     296        Add(aikaNaytto); 
     297    } 
     298 
     299    void LaskeAlaspain() 
     300    { 
     301        alaspainLaskuri.Value -= 0.1; 
     302 
     303        //if (alaspainLaskuri.Value <= 0) 
     304        //{ 
     305        //    MessageDisplay.Add("Aika loppui..."); 
     306        //    aikaLaskuri.Stop(); 
     307             
     308        //} 
     309    } 
     310 
     311    void PainettiinValikonNappia(int valinta) 
     312    { 
    40313         
    41          
    42         Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli"); 
    43     } 
    44  
     314        switch (valinta) 
     315        { 
     316            case 0: 
     317                // AloitaPeli(); 
     318                break; 
     319            case 1: 
     320                // ParhaatPisteet(); 
     321                break; 
     322            case 2: 
     323                Exit(); 
     324                break; 
     325        } 
     326        AloitaPeli(); 
    45327     
    46      
    47     void Liikuta(PhysicsObject BombDude, Vector suunta) 
    48     { 
    49         BombDude.Velocity = suunta*liikkumisnopeus; 
    50     } 
    51  
    52     void LuoKentta() 
    53     { 
    54         BombDude = new PhysicsObject(60, 80); 
    55         Add(BombDude); 
    56         BombDude.Image = BombDudePic; 
    57     } 
     328    } 
     329 
    58330} 
    59    
  • 2012/23/SamuH/BOMBDUDE/BOMBDUDE/BOMBDUDEContent/BOMBDUDEContent.contentproj

    r2800 r2872  
    8686    </Compile> 
    8787  </ItemGroup> 
     88  <ItemGroup> 
     89    <Compile Include="BOMBDUDE mappi1.txt"> 
     90      <Name>BOMBDUDE mappi1</Name> 
     91      <Importer>TextFileImporter</Importer> 
     92      <Processor>TextFileContentProcessor</Processor> 
     93    </Compile> 
     94  </ItemGroup> 
     95  <ItemGroup> 
     96    <Compile Include="Räjähdys.png"> 
     97      <Name>Räjähdys</Name> 
     98      <Importer>TextureImporter</Importer> 
     99      <Processor>TextureProcessor</Processor> 
     100    </Compile> 
     101  </ItemGroup> 
     102  <ItemGroup> 
     103    <Compile Include="Räjähdyksenloppu.png"> 
     104      <Name>Räjähdyksenloppu</Name> 
     105      <Importer>TextureImporter</Importer> 
     106      <Processor>TextureProcessor</Processor> 
     107    </Compile> 
     108  </ItemGroup> 
     109  <ItemGroup> 
     110    <Compile Include="Räjährys.png"> 
     111      <Name>Räjährys</Name> 
     112      <Importer>TextureImporter</Importer> 
     113      <Processor>TextureProcessor</Processor> 
     114    </Compile> 
     115  </ItemGroup> 
     116  <ItemGroup> 
     117    <Compile Include="BOMBDUDE mappi2.txt"> 
     118      <Name>BOMBDUDE mappi2</Name> 
     119      <Importer>TextFileImporter</Importer> 
     120      <Processor>TextFileContentProcessor</Processor> 
     121    </Compile> 
     122  </ItemGroup> 
     123  <ItemGroup> 
     124    <Compile Include="Maali.png"> 
     125      <Name>Maali</Name> 
     126      <Importer>TextureImporter</Importer> 
     127      <Processor>TextureProcessor</Processor> 
     128    </Compile> 
     129  </ItemGroup> 
     130  <ItemGroup> 
     131    <Compile Include="Maali2.png"> 
     132      <Name>Maali2</Name> 
     133      <Importer>TextureImporter</Importer> 
     134      <Processor>TextureProcessor</Processor> 
     135    </Compile> 
     136  </ItemGroup> 
    88137  <Import Project="$(MSBuildExtensionsPath)\Microsoft\XNA Game Studio\$(XnaFrameworkVersion)\Microsoft.Xna.GameStudio.ContentPipeline.targets" /> 
    89138  <!--  To modify your build process, add your task inside one of the targets below and uncomment it.  
Note: See TracChangeset for help on using the changeset viewer.