Changeset 1612 for 2010/23


Ignore:
Timestamp:
2010-08-04 16:33:17 (9 years ago)
Author:
anlakane
Message:

Kerättäviä palikoita ja mato kasvaa niitä syödessä. Lisättävä matopala kylläkin aluksi vilahtaa kentän keskellä (pitää korjata...).

File:
1 edited

Legend:

Unmodified
Added
Removed
  • 2010/23/hniemi/Matopeli/Peli.cs

    r1609 r1612  
    99    //GameObject[] mato; 
    1010    const double ruudunKoko = 20; 
    11     const int madonPituus = 6; 
     11    int madonPituus = 6; 
    1212    const double vaikeusaste = 0.2; 
     13 
     14    double kerattavienLisaysAikaSek = 1.0; 
    1315 
    1416    int ruutujaVaakasuunnassa; 
     
    1921    Direction viimesuunta; 
    2022    Timer liikutusajastin; 
     23    Timer kerattavienLisaysAjastin; 
    2124 
    2225    protected override void Begin() 
    2326    { 
    2427        LuoKentta(); 
    25         LuoLiikutusAjastin(); 
     28        LuoAjastimet(); 
    2629        LuoMato(madonPituus); 
    2730        LisaaOhjaimet(); 
     
    4043    void LuoMato(int pituus) 
    4144    { 
    42         for (int i = 0; i < pituus-1; i++) 
    43         { 
    44             mato.Add(new GameObject(ruudunKoko - 1, ruudunKoko - 1)); 
    45             mato[i].Tag = "matopala"; 
    46             Add(mato[i]); 
     45        for (int i = 0; i < pituus - 1; i++) 
     46        { 
     47            LisaaPalaMatoon(); 
    4748        } 
    4849        //Luo madon pään viimeiseksi, jotta sen pään värin muuttaminen näkyy 
     
    5051        mato.Insert(0, new GameObject(ruudunKoko - 1, ruudunKoko - 1)); 
    5152        mato[0].Tag = "matopala"; 
    52         Add(mato[0]);  
     53        Add(mato[0]); 
     54    } 
     55 
     56    void LisaaPalaMatoon() 
     57    { 
     58        GameObject pala = new GameObject(ruudunKoko - 1, ruudunKoko - 1); 
     59        pala.Tag = "matopala"; 
     60        mato.Add(pala); 
     61        Add(pala); 
    5362    } 
    5463 
     
    6069        Keyboard.Listen(Key.Right, ButtonState.Pressed, AsetaSuunta, "Kääntää oikealle", Direction.Right); 
    6170        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, "Poistuu pelistä"); 
    62     } 
    63  
    64     void LuoKerattava() 
    65     { 
    66         GameObject kerattava = new GameObject(ruudunKoko / 2, ruudunKoko / 2, Shapes.Circle); 
    67          
    68         Add(kerattava); 
    69         kerattavat.Add(kerattava); 
    70  
    7171    } 
    7272 
     
    8282    } 
    8383 
    84     void LuoLiikutusAjastin() 
     84    void LuoAjastimet() 
    8585    { 
    8686        liikutusajastin = new Timer(); 
    8787        liikutusajastin.Interval = vaikeusaste; 
    8888        liikutusajastin.Trigger += SiirraMatoa; 
     89 
     90        kerattavienLisaysAjastin = new Timer(); 
     91        kerattavienLisaysAjastin.Interval = kerattavienLisaysAikaSek; 
     92        kerattavienLisaysAjastin.Trigger += LisaaKerattava; 
    8993    } 
    9094 
     
    9397        Vector suunta = Vector.FromLengthAndAngle(ruudunKoko, Angle.FromDirection(liikkumissuunta)); 
    9498 
    95         for (int i = mato.Count-1; i > 0; i--) 
     99        for (int i = mato.Count - 1; i > 0; i--) 
    96100        { 
    97101            mato[i].Position = mato[i - 1].Position; 
    98102        } 
    99103 
    100         GameObject tormasiko = MitaSisaltaa(mato[0].Position + suunta); 
    101  
     104        GameObject seuraavanRuudunOlio = MitaSisaltaa(mato[0].Position + suunta); 
    102105        mato[0].Position = mato[0].Position + suunta; 
    103  
    104         if (tormasiko != null && (tormasiko.Tag.ToString() == "seina" || tormasiko.Tag.ToString() == "matopala")) 
     106        viimesuunta = liikkumissuunta; 
     107 
     108        if (seuraavanRuudunOlio == null) 
     109        { 
     110            return; 
     111        } 
     112 
     113        if (seuraavanRuudunOlio.Tag.ToString() == "kerattava") 
     114        { 
     115            seuraavanRuudunOlio.Destroy(); 
     116            kerattavat.Remove(seuraavanRuudunOlio); 
     117            madonPituus++; 
     118            LisaaPalaMatoon(); 
     119        } 
     120 
     121        if (seuraavanRuudunOlio.Tag.ToString() == "seina" || seuraavanRuudunOlio.Tag.ToString() == "matopala") 
    105122        { 
    106123            liikutusajastin.Stop(); 
    107124            mato[0].Color = Color.Blue; 
    108125        } 
    109         viimesuunta = liikkumissuunta; 
     126    } 
     127 
     128    /// <summary> 
     129    /// Lisää kerättävän esineen satunnaiseen paikkaan pelikentällä.  
     130    /// Ei lisätä kentällä jo olemassa olevien kamojen päälle. 
     131    /// </summary> 
     132    /// <param name="ajastin"></param> 
     133    void LisaaKerattava(Timer ajastin) 
     134    { 
     135        double kerattavanX = RandomGen.NextInt(-ruutujaVaakasuunnassa/2, ruutujaVaakasuunnassa/2) * ruudunKoko; 
     136        double kerattavanY = RandomGen.NextInt(-ruutujaPystysuunnassa/2, ruutujaPystysuunnassa/2) * ruudunKoko; 
     137 
     138        if (kerattavat.Count >= ruutujaVaakasuunnassa * ruutujaPystysuunnassa - madonPituus) return; 
     139 
     140        while (MitaSisaltaa(new Vector(kerattavanX, kerattavanY)) != null) 
     141        { 
     142            kerattavanX = RandomGen.NextInt(-ruutujaVaakasuunnassa / 2, ruutujaVaakasuunnassa / 2) * ruudunKoko; 
     143            kerattavanY = RandomGen.NextInt(-ruutujaPystysuunnassa / 2, ruutujaPystysuunnassa / 2) * ruudunKoko; 
     144        } 
     145 
     146        GameObject kerattava = new GameObject(ruudunKoko, ruudunKoko, Shapes.Rectangle); 
     147        Add(kerattava); 
     148        kerattava.X = kerattavanX; 
     149        kerattava.Y = kerattavanY; 
     150        kerattava.Tag = "kerattava"; 
     151        kerattava.Color = RandomGen.NextColor(); 
     152        kerattavat.Add(kerattava); 
    110153    } 
    111154 
     
    118161    /// </summary> 
    119162    /// <param name="paikka">Tarkistettava paikka</param> 
    120     /// <returns>null, jos paikasta ei löydy mitään</returns> 
     163    /// <returns>Ruudun sisältämä GameObject. Palauttaa null, jos paikasta ei löydy mitään.</returns> 
    121164    GameObject MitaSisaltaa(Vector paikka) 
    122165    { 
    123         double puskuri = ruudunKoko / 5; 
     166        double puskuri = ruudunKoko / 2; 
    124167 
    125168        //Tarkistaa, onko annettu paikka madon sisällä 
     
    147190 
    148191        return null; 
    149         } 
     192    } 
    150193 
    151194    void AloitaPeli() 
     
    153196        liikkumissuunta = Direction.Right; 
    154197        liikutusajastin.Start(); 
     198        kerattavienLisaysAjastin.Start(); 
    155199    } 
    156200} 
Note: See TracChangeset for help on using the changeset viewer.