Ignore:
Timestamp:
2010-06-16 18:23:52 (11 years ago)
Author:
anlakane
Message:

Kortteja voi kääntää, enintään kaksi kerrallaan.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • 2010/24/anlakane/Muistipeli/Peli2.cs

    r921 r923  
    1111        int montakoRivia; 
    1212        int montakoSaraketta; 
    13  
    14         double kortinLeveys = 80; 
    15         double kortinKorkeus = 100; 
     13        bool voikoKaantaa; 
     14 
     15        double korttienVali = 20.0; 
     16 
     17        double kortinLeveys = 50; 
     18        double kortinKorkeus = 70; 
    1619        Kortti[,] kortit; // rivit, sarakkeet 
    1720        int[,] korostettuKortti; 
     
    2023        Suunta mihinSuuntaanMenossa; 
    2124 
     25        GameObject highlighter; 
     26        List<Kortti> kaannetyt; 
     27        Timer piilotusAjastin; 
     28        double aikaaEnnenPiilottamista = 2; 
    2229        protected override void Begin() 
    2330        { 
    24             montakoKorttia = 21; 
    25             korostettuKortti = new int[2, 1]; 
     31            piilotusAjastin = new Timer(); 
     32            piilotusAjastin.Interval = aikaaEnnenPiilottamista; 
     33            piilotusAjastin.Trigger += PiilotaKaannetyt; 
     34            Add(piilotusAjastin); 
     35 
     36            montakoKorttia = 52; 
     37            kaannetyt = new List<Kortti>(); 
     38 
     39            // Laitetaan ensin rivejä ja sarakkeita yhtä paljon 
    2640            montakoSaraketta = (int)Math.Sqrt(montakoKorttia); 
     41            // Sitte laitetaan kortit vähän mukavempaan muotoon kun näytöt on yleensä leveämpiä kuin korkeita 
    2742            montakoSaraketta = (int)Math.Floor((3.0 / 2.0) * montakoSaraketta); 
     43            // Tarvittavien rivien määrä saadaan korttien määrän ja saadun sarakkeiden määrän suhteesta 
    2844            montakoRivia = (int)Math.Ceiling((double)montakoKorttia / (double)montakoSaraketta); 
    2945            kortit = new Kortti[montakoRivia, montakoSaraketta]; 
    3046            KortitRuudulle(montakoKorttia); 
    31  
     47            LisaaHighLighter(); 
    3248            AsetaNappaimet(); 
    33             KorostaKortti(new int[2, 1] { { 0 }, { 1 } }); 
    34  
     49 
     50            // Laitetaan kenttä sopivan kokoiseksi että kortit täyttävät aina mahollisimman paljon ruutukapasiteetista 
     51            Level.Width = montakoSaraketta * (korttienVali + kortinLeveys) + kortinLeveys; 
     52            Level.Height = montakoRivia * (korttienVali + kortinKorkeus) + kortinKorkeus; 
     53            Camera.ZoomToLevel(); 
     54            AloitaPeli(); 
     55        } 
     56 
     57        /// <summary> 
     58        /// Korostetaan ensimmäinen kortti. 
     59        /// </summary> 
     60        public void AloitaPeli() 
     61        { 
     62            korostettuKortti = new int[2, 1]; 
     63            KorostaKortti(new int[2, 1] { { 0 }, { 0 } }); 
     64            voikoKaantaa = true; 
     65        } 
     66 
     67        private void LisaaHighLighter() 
     68        { 
     69            highlighter = new GameObject(kortinLeveys, kortinKorkeus); 
     70            highlighter.Image = LoadImage("highlight"); 
     71            Add(highlighter); 
    3572        } 
    3673 
     
    4178            Keyboard.Listen(Key.Up, ButtonState.Pressed, KortinValinta, null, Suunta.Ylos); 
    4279            Keyboard.Listen(Key.Down, ButtonState.Pressed, KortinValinta, null, Suunta.Alas); 
    43             //Keyboard.Listen(Key.Space, ButtonState.Pressed, KaannaKortti, null); 
    44             //Keyboard.Listen(Key.Escape, ButtonState.Pressed, Lopeta, null); 
     80            Keyboard.Listen(Key.Space, ButtonState.Pressed, KaannaKortti, null); 
     81            Keyboard.Listen(Key.Escape, ButtonState.Pressed, Lopeta, null); 
     82        } 
     83 
     84        void Lopeta() 
     85        { 
     86            Exit(); 
     87        } 
     88 
     89        void KaannaKortti() 
     90        { 
     91            if (voikoKaantaa) 
     92            { 
     93                // Ei käännetä kahta kertaa samaa korttia 
     94                if (kaannetyt.Count == 0 || kortit[korostettuKortti[0, 0], korostettuKortti[1, 0]] != kaannetyt[0]) 
     95                { 
     96                    kortit[korostettuKortti[0, 0], korostettuKortti[1, 0]].Kaanna(); 
     97                    kaannetyt.Add(kortit[korostettuKortti[0, 0], korostettuKortti[1, 0]]); 
     98 
     99                    if (kaannetyt.Count == 2) 
     100                    { 
     101                        // Jos kaksi korttia on käännetty niin ajastin lähtee käyntiin eikä sinä aikana voi kääntää kortteja 
     102                        voikoKaantaa = false;  
     103                        piilotusAjastin.Start(); 
     104                    } 
     105                } 
     106            } 
     107        } 
     108 
     109        void PiilotaKaannetyt(Timer t) 
     110        { 
     111            foreach (var item in kaannetyt) 
     112            { 
     113                item.Kaanna(); 
     114            } 
     115            kaannetyt.Clear(); 
     116            piilotusAjastin.Stop(); 
     117            voikoKaantaa = true; 
    45118        } 
    46119 
     
    48121        { 
    49122            kortinNro = TarkistaKortinNro(kortinNro); 
    50             kortit[kortinNro[0, 0], kortinNro[1, 0]].Color = Color.Gray; 
    51             MessageDisplay.Add("Korostettu kortti: [" + kortinNro[0, 0] + ", " + kortinNro[1, 0] + "]"); 
     123            highlighter.Position = new Vector(KortinX(kortinNro[1, 0]), KortinY(kortinNro[0, 0])); 
     124            Kortti.PuoliEsilla puoliesilla = kortit[kortinNro[0, 0], kortinNro[1, 0]].KumpiPuoliEsilla(); 
    52125            korostettuKortti = kortinNro; 
    53  
    54126        } 
    55127 
     
    88160            if (mihinSuuntaanMenossa == Suunta.Vasen) 
    89161            { 
    90                 return new int[2, 1] { { korostettuKortti[0, 0] }, { (montakoKorttia%montakoSaraketta) -1 } }; 
     162                return new int[2, 1] { { korostettuKortti[0, 0] }, { (montakoKorttia % montakoSaraketta) - 1 } }; 
    91163            } 
    92164            if (mihinSuuntaanMenossa == Suunta.Oikea) 
     
    105177        } 
    106178 
    107  
    108  
    109179        void KortinValinta(Suunta suunta) 
    110180        { 
    111181            mihinSuuntaanMenossa = suunta; 
    112             PoistaKorostus(korostettuKortti); 
    113  
    114182            if (mihinSuuntaanMenossa == Suunta.Vasen) 
    115183            { 
     
    123191            { 
    124192                KorostaKortti(new int[2, 1] { { korostettuKortti[0, 0] - 1 }, { korostettuKortti[1, 0] } }); 
    125  
    126193            } 
    127194            if (mihinSuuntaanMenossa == Suunta.Alas) 
     
    132199 
    133200        } 
    134  
    135         void PoistaKorostus(int[,] kortinNro) 
    136         { 
    137             kortit[kortinNro[0, 0], kortinNro[1, 0]].Color = Color.White; 
    138  
    139         } 
    140  
    141  
    142201 
    143202        /// <summary> 
     
    162221                    } 
    163222 
    164                     kortit[r, s] = new Kortti(kortinLeveys, kortinKorkeus, false, Color.Red, Color.White); 
     223                    kortit[r, s] = TeeKortti(); 
    165224                    Add(kortit[r, s]); 
    166225 
    167                     kortit[r, s].X = (-(montakoSaraketta * (kortinLeveys + 20)) / 2) + (s * (kortinLeveys + 20)); 
    168                     kortit[r, s].Y = ((montakoRivia) * (kortinKorkeus + 20)) / 2 - r * (kortinKorkeus + 20); 
     226                    kortit[r, s].X = KortinX(s); 
     227                    kortit[r, s].Y = KortinY(r); 
    169228 
    170229                    montakoKorttiaLisatty++; 
     
    172231            } 
    173232        } 
     233 
     234        public double KortinX(int sarake) 
     235        { 
     236            return (-(montakoSaraketta * (kortinLeveys + korttienVali)) / 2) + (sarake * (kortinLeveys + korttienVali)) + korttienVali; 
     237        } 
     238 
     239        public double KortinY(int rivi) 
     240        { 
     241            // Viimeinen termi tulee siitä että viimeisen kortin perässä ei tarvita välistystä 
     242            return ((montakoRivia) * (kortinKorkeus + korttienVali)) / 2 - rivi * (kortinKorkeus + korttienVali) - korttienVali; 
     243        } 
     244 
     245        public Kortti TeeKortti() 
     246        { 
     247            Image kuvaTekstuuri = LoadImage("kortti1"); 
     248            Image takaTekstuuri = LoadImage("taka"); 
     249            return new Kortti(kortinLeveys, kortinKorkeus, false, kuvaTekstuuri, takaTekstuuri); 
     250        } 
    174251    } 
    175252} 
Note: See TracChangeset for help on using the changeset viewer.