Changeset 1030 for 2010/24


Ignore:
Timestamp:
2010-06-30 13:10:11 (9 years ago)
Author:
anlakane
Message:

Uusia kuvia. Kuvat (nyt elaimet-kansio) pitää olla saman kansion alla kuin mistä peliä ajetaan.

Location:
2010/24/anlakane/Muistipeli
Files:
32 added
2 edited

Legend:

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

    r1028 r1030  
    33using System.Linq; 
    44using Jypeli; 
    5 using Microsoft.Xna.Framework; 
    6 using Microsoft.Xna.Framework.Graphics; 
     5//using Microsoft.Xna.Framework; 
     6//using Microsoft.Xna.Framework.Graphics; 
    77 
    88namespace Muistipeli 
     
    4242 
    4343 
    44         public Kortti(double width, double height, bool kuvapuoliEsilla, Image kuvapuoliTekstuuri, Image takapuoliTekstuuri, int tunnus) 
    45             : base(width, height, Shapes.Rectangle) 
     44        public Kortti(double leveys, double korkeus, bool kuvapuoliEsilla, Image kuvapuoliTekstuuri, Image takapuoliTekstuuri, int tunnus) 
     45            : base(leveys, korkeus, Shapes.Rectangle) 
    4646        { 
    4747            this.kuvapuoliTekstuuri = kuvapuoliTekstuuri; 
    4848            this.takapuoliTekstuuri = takapuoliTekstuuri; 
    49             this.Image = kuvapuoliTekstuuri; 
     49            //this.Image = kuvapuoliTekstuuri; //Tarvitaanko tätä? 
    5050            this.liikkeenTila = Liikkeentila.Pysahtynyt; 
    5151            this.poistettuPelista = false; 
     
    5757 
    5858            IsUpdated = true; 
    59             this.alkuperainenKoko = new Vector(width, height); 
     59            this.alkuperainenKoko = new Vector(leveys, korkeus); 
    6060            this.tunniste = tunnus; 
     61        } 
    6162 
     63        public Kortti(double leveys, double korkeus, bool kuvapuoliEsilla, Image takapuoliTekstuuri, int tunnus) 
     64            : base(leveys, korkeus, Shapes.Rectangle) 
     65        { 
     66            this.kuvapuoliTekstuuri = Image.FromColor((int)Math.Floor(leveys), (int)Math.Floor(korkeus), Color.White); 
     67            this.takapuoliTekstuuri = takapuoliTekstuuri; 
     68            //this.Image = kuvapuoliTekstuuri; 
     69            this.liikkeenTila = Liikkeentila.Pysahtynyt; 
     70            this.poistettuPelista = false; 
     71 
     72            if (kuvapuoliEsilla) 
     73                AsetaPuoli(PuoliEsilla.Kuva); 
     74            else 
     75                AsetaPuoli(PuoliEsilla.Taka); 
     76 
     77            IsUpdated = true; 
     78            this.alkuperainenKoko = new Vector(leveys, korkeus); 
     79            this.tunniste = tunnus; 
    6280        } 
    6381 
  • 2010/24/anlakane/Muistipeli/Muistipeli.cs

    r1029 r1030  
    88using Jypeli.Effects; 
    99 
     10using Texture2D = Microsoft.Xna.Framework.Graphics.Texture2D; 
     11 
    1012 
    1113namespace Muistipeli 
     
    6062        const double aikaaEnnenPiilottamista = 2; 
    6163 
     64        String korttisarja; 
     65 
    6266        Pelaaja pelaaja1; 
    6367        Pelaaja pelaaja2; 
     
    7377            montakoKorttia = 16; // Pitää olla ennen laskureiden lisäämistä 
    7478            LisaaPelaajat(2); 
    75  
    7679            AloitaUusiPeli(); 
    77  
    7880        } 
    7981 
     
    8284            ClearAll(); 
    8385            LisaaPiilotusajastin(); 
    84             //LisaaKuvat(); 
    85             LisaaLaskurit(); 
    86             LisaaVuoronaytto(); 
    87  
    88             montakoKutakinKorttitunnusta = new int[montakoKorttia / 2]; // kortin tunnusNro indeksistä, alkiot tulkitaan siten että "montako tämän tunnuksen alkiota on lisätty peliin" 
    89             kaannetyt = new List<Kortti>(); 
     86            korttisarja = "elaimet"; 
     87            int montakoKuvaa = LataaKuvat(); 
     88            montakoKorttia = montakoKuvaa * 2; 
    9089 
    9190            // Laitetaan ensin rivejä ja sarakkeita yhtä paljon 
     
    9695            montakoRivia = (int)Math.Ceiling((double)montakoKorttia / (double)montakoSaraketta); 
    9796            kortit = new Kortti[montakoRivia, montakoSaraketta]; 
    98             KortitRuudulle(montakoKorttia); 
     97 
     98            // kortin tunnusNro indeksistä, alkiot tulkitaan siten että "montako tämän tunnuksen alkiota on lisätty peliin" 
     99            // Tämä pitää olla ennen kuin kortit lisätään ruudulle 
     100            montakoKutakinKorttitunnusta = new int[montakoKorttia / 2];  
     101 
     102            KortitRuudulle(); 
     103            //LisaaKuvat();  // Pitää olla ennen laskureiden lisäämistä 
     104 
     105            LisaaLaskurit(); 
     106            LisaaVuoronaytto(); 
    99107            LisaaHighLighter(); 
    100108 
     
    106114            PeliKayntiin(); 
    107115            AsetaNappaimet(); 
    108  
    109116        } 
    110117 
     
    127134            p1teksti.TextColor = Color.Black; 
    128135            p1teksti.Position = new Vector(Screen.Left + 140, Screen.Bottom + 70); 
    129             pisteNaytto1.Position = new Vector(p1teksti.X + (p1teksti.Width/2) + 10, p1teksti.Y); 
     136            pisteNaytto1.Position = new Vector(p1teksti.X + (p1teksti.Width / 2) + 10, p1teksti.Y); 
    130137            pisteNaytto1.TextColor = Color.Blue; 
    131138            pisteNaytto1.BindTo(pelaajan1Pisteet); 
    132             p1VoitotTeksti.Position = new Vector(Screen.Left + 140 - ((p1teksti.Width - p1VoitotTeksti.Width)/2), p1teksti.Y - 30); 
     139            p1VoitotTeksti.Position = new Vector(Screen.Left + 140 - ((p1teksti.Width - p1VoitotTeksti.Width) / 2), p1teksti.Y - 30); 
    133140            p1Voitot.Position = new Vector(p1VoitotTeksti.X + (p1VoitotTeksti.Width / 2) + 10, p1VoitotTeksti.Y); 
    134141 
     
    138145            Add(p1Voitot); 
    139146 
    140             pelaajan2Pisteet = new IntMeter(0);  
     147            pelaajan2Pisteet = new IntMeter(0); 
    141148            Label p2teksti = new Label("Pelaaja 2 pisteet: "); 
    142149            Label pisteNaytto2 = new Label(); 
     
    145152 
    146153            p2teksti.TextColor = Color.Black; 
    147             p2teksti.X = Screen.Right- 140; 
     154            p2teksti.X = Screen.Right - 140; 
    148155            p2teksti.Y = Screen.Bottom + 70; 
    149156            pisteNaytto2.X = p2teksti.X + (p2teksti.Width / 2) + 10; 
     
    165172        } 
    166173 
     174        /// <summary> 
     175        /// Korostetaan ensimmäinen kortti. 
     176        /// </summary> 
     177        public void PeliKayntiin() 
     178        { 
     179            kaannetyt = new List<Kortti>(); 
     180            korostettuKortti = new Paikka(0, 0); 
     181            KorostaKortti(new Paikka(0, 0)); 
     182            vuorossaOlevaPelaaja = pelaaja1; 
     183            vuoronaytto.Text = "Pelaaja 1"; 
     184            MessageDisplay.Add("Pelaaja 1 aloittaa pelin!"); 
     185        } 
     186 
     187 
    167188        public void KaikkiLoydetty(int arvo) 
    168189        { 
     
    185206 
    186207            MessageBox m = new MessageBox( 
    187                 "Peli päättyi",  
     208                "Peli päättyi", 
    188209                "" + voittoteksti + "Aloita uusi peli painamalla OK."); 
    189210            m.OkButton.Clicked += OKPainettu; 
     
    203224            vuoronaytto = new Label(); 
    204225            vuoronaytto.X = 0; 
    205             vuoronaytto.Y = vuorossaNyt.Y - 30;             
     226            vuoronaytto.Y = vuorossaNyt.Y - 30; 
    206227            Add(vuorossaNyt); 
    207228            Add(vuoronaytto); 
    208         } 
    209  
    210         /// <summary> 
    211         /// Korostetaan ensimmäinen kortti. 
    212         /// </summary> 
    213         public void PeliKayntiin() 
    214         { 
    215             korostettuKortti = new Paikka(0, 0); 
    216             KorostaKortti(new Paikka(0, 0)); 
    217             vuorossaOlevaPelaaja = pelaaja1; 
    218             vuoronaytto.Text = "Pelaaja 1"; 
    219             MessageDisplay.Add("Pelaaja 1 aloittaa pelin!"); 
    220229        } 
    221230 
     
    227236        } 
    228237 
    229         private void LisaaKuvat() 
     238        private int LataaKuvat() 
    230239        { 
    231240            List<String> kuvat = new List<string>(); 
    232             String[] kuvatiedostot = Directory.GetFiles("Content"); 
    233             char[] erottimet = new char[] { '\\', '.' }; 
    234             foreach (var kuva in kuvatiedostot) 
    235             { 
    236                 String[] splitattu = kuva.Split(erottimet); 
    237                 if (splitattu.Length > 1) 
    238                 { 
    239                     if (splitattu[1] != "highlight" && splitattu[1] != "taka") 
    240                         kuvat.Add(splitattu[1]); 
    241                 } 
    242             } 
     241            String[] kuvatiedostot = Directory.GetFiles(korttisarja); 
     242            return kuvatiedostot.Length; 
    243243        } 
    244244 
     
    263263        { 
    264264            Exit(); 
     265        } 
     266 
     267        #region Liikkuminen  
     268        void KorostaKortti(Paikka korostettavaKortti) 
     269        { 
     270            korostettavaKortti = TarkistaKortinNro(korostettavaKortti); 
     271            highlighter.Position = new Vector(KortinX(korostettavaKortti.Sarake), KortinY(korostettavaKortti.Rivi)); 
     272            Kortti.PuoliEsilla puoliesilla = kortit[korostettavaKortti.Rivi, korostettavaKortti.Sarake].KumpiPuoliEsilla(); 
     273            korostettuKortti = korostettavaKortti; 
     274        } 
     275 
     276        /// <summary> 
     277        /// Aliohjelma pitää huolen, että valittu kortti on aina 
     278        /// rivi- ja sarakeindeksien sisäpuolella. Toisin sanoen  
     279        /// rivistä/sarakkeesta "yli" hypättäessä kursori palautuu  
     280        /// oikeaan paikkaan. 
     281        /// </summary> 
     282        /// <param name="kortinNro">Kortin rivi, sarake</param> 
     283        /// <returns>"Korjatut" koordinaatit</returns> 
     284        private Paikka TarkistaKortinNro(Paikka paikka) 
     285        { 
     286            // Viimeisen rivin jälkeen palataan ensimmäiselle riville 
     287            if (paikka.Rivi >= montakoRivia) 
     288                paikka.Rivi = 0; 
     289 
     290            // Viimeisen sarakkeen jälkeen palataan ensimmäiseen sarakkeeseen 
     291            if (paikka.Sarake >= montakoSaraketta) 
     292                paikka.Sarake = 0; 
     293 
     294            // Ensimmäisestä rivistä "taaksepäin" liikuttaessa 
     295            // hypätään viimeiselle riville 
     296            if (paikka.Rivi < 0) 
     297                paikka.Rivi = montakoRivia - 1; 
     298 
     299            // Ensimmäisestä sarakkeesta "taaksepäin" liikuttaessa 
     300            // hypätään viimeiseen sarakkeeseen 
     301            if (paikka.Sarake < 0) 
     302                paikka.Sarake = montakoSaraketta - 1; 
     303 
     304            // Mentiin pelipakan "tyhjälle alueelle" 
     305            if (kortit[paikka.Rivi, paikka.Sarake] == null) 
     306                paikka = TultiinNullViitteeseen(paikka); 
     307 
     308            return paikka; 
     309        } 
     310 
     311        private Paikka TultiinNullViitteeseen(Paikka kortinPaikka) 
     312        { 
     313            if (mihinSuuntaanMenossa == Suunta.Vasen) 
     314                return new Paikka(kortinPaikka.Rivi, (montakoKorttia % montakoSaraketta) - 1); 
     315            if (mihinSuuntaanMenossa == Suunta.Oikea) 
     316                return new Paikka(kortinPaikka.Rivi, 0); 
     317            if (mihinSuuntaanMenossa == Suunta.Ylos) 
     318                return new Paikka(montakoRivia - 2, kortinPaikka.Sarake); 
     319 
     320            // alas 
     321            return new Paikka(0, kortinPaikka.Sarake); 
     322        } 
     323 
     324        void KortinValinta(Suunta suunta) 
     325        { 
     326            mihinSuuntaanMenossa = suunta; 
     327            if (mihinSuuntaanMenossa == Suunta.Vasen) 
     328                KorostaKortti(new Paikka(korostettuKortti.Rivi, korostettuKortti.Sarake - 1)); 
     329 
     330            if (mihinSuuntaanMenossa == Suunta.Oikea) 
     331                KorostaKortti(new Paikka(korostettuKortti.Rivi, korostettuKortti.Sarake + 1)); 
     332 
     333            if (mihinSuuntaanMenossa == Suunta.Ylos) 
     334                KorostaKortti(new Paikka(korostettuKortti.Rivi - 1, korostettuKortti.Sarake)); 
     335 
     336            if (mihinSuuntaanMenossa == Suunta.Alas) 
     337                KorostaKortti(new Paikka(korostettuKortti.Rivi + 1, korostettuKortti.Sarake)); 
     338        } 
     339        #endregion 
     340 
     341        #region Kääntäminen ja parin löytyminen 
     342 
     343        public bool VoikoKorttiaKaantaa(Kortti kortti) 
     344        { 
     345            // Ei käännetä kahta kertaa samaa korttia 
     346            if (kaannetyt.Count == 0 || kortit[korostettuKortti.Rivi, korostettuKortti.Sarake] != kaannetyt[0]) 
     347            { 
     348                // Jos kortti "on jo löydetty", niin sitä ei voi missään tapauksessa kääntää 
     349                bool onkoPoistettuPelista = kortit[korostettuKortti.Rivi, korostettuKortti.Sarake].PoistettuPelista; 
     350 
     351                if (!onkoPoistettuPelista) 
     352                { 
     353                    return true; 
     354                } 
     355            } 
     356            return false; 
    265357        } 
    266358 
     
    293385        } 
    294386 
     387        void PiilotaKaannetyt(Timer t) 
     388        { 
     389            foreach (var item in kaannetyt) 
     390            { 
     391                item.Kaanna(); 
     392            } 
     393            kaannetyt.Clear(); 
     394            piilotusAjastin.Stop(); 
     395            Keyboard.Enable(Key.Space); 
     396            VuoroVaihtuu(); 
     397        } 
     398 
    295399        public void PariLoytyi() 
    296400        { 
     
    342446                vuorossaOlevaPelaaja = pelaaja1; 
    343447                highlighter.Image = LoadImage("highlight1"); 
    344                 vuoronaytto.Text = "Pelaaja 1";  
     448                vuoronaytto.Text = "Pelaaja 1"; 
    345449                return; 
    346450            } 
    347451        } 
    348452 
    349         public bool VoikoKorttiaKaantaa(Kortti kortti) 
    350         { 
    351             // Ei käännetä kahta kertaa samaa korttia 
    352             if (kaannetyt.Count == 0 || kortit[korostettuKortti.Rivi, korostettuKortti.Sarake] != kaannetyt[0]) 
    353             { 
    354                 // Jos kortti "on jo löydetty", niin sitä ei voi missään tapauksessa kääntää 
    355                 bool onkoPoistettuPelista = kortit[korostettuKortti.Rivi, korostettuKortti.Sarake].PoistettuPelista; 
    356  
    357                 if (!onkoPoistettuPelista) 
    358                 { 
    359                     return true; 
    360                 } 
    361             } 
    362             return false; 
    363         } 
    364  
    365         void PiilotaKaannetyt(Timer t) 
    366         { 
    367             foreach (var item in kaannetyt) 
    368             { 
    369                 item.Kaanna(); 
    370             } 
    371             kaannetyt.Clear(); 
    372             piilotusAjastin.Stop(); 
    373             Keyboard.Enable(Key.Space); 
    374             VuoroVaihtuu(); 
    375         } 
    376  
    377         void KorostaKortti(Paikka korostettavaKortti) 
    378         { 
    379             korostettavaKortti = TarkistaKortinNro(korostettavaKortti); 
    380             highlighter.Position = new Vector(KortinX(korostettavaKortti.Sarake), KortinY(korostettavaKortti.Rivi)); 
    381             Kortti.PuoliEsilla puoliesilla = kortit[korostettavaKortti.Rivi, korostettavaKortti.Sarake].KumpiPuoliEsilla(); 
    382             korostettuKortti = korostettavaKortti; 
    383         } 
    384  
    385         /// <summary> 
    386         /// Aliohjelma pitää huolen, että valittu kortti on aina 
    387         /// rivi- ja sarakeindeksien sisäpuolella. Toisin sanoen  
    388         /// rivistä/sarakkeesta "yli" hypättäessä kursori palautuu  
    389         /// oikeaan paikkaan. 
    390         /// </summary> 
    391         /// <param name="kortinNro">Kortin rivi, sarake</param> 
    392         /// <returns>"Korjatut" koordinaatit</returns> 
    393         private Paikka TarkistaKortinNro(Paikka paikka) 
    394         { 
    395             // Viimeisen rivin jälkeen palataan ensimmäiselle riville 
    396             if (paikka.Rivi >= montakoRivia) 
    397                 paikka.Rivi = 0; 
    398  
    399             // Viimeisen sarakkeen jälkeen palataan ensimmäiseen sarakkeeseen 
    400             if (paikka.Sarake >= montakoSaraketta) 
    401                 paikka.Sarake = 0; 
    402  
    403             // Ensimmäisestä rivistä "taaksepäin" liikuttaessa 
    404             // hypätään viimeiselle riville 
    405             if (paikka.Rivi < 0) 
    406                 paikka.Rivi = montakoRivia - 1; 
    407  
    408             // Ensimmäisestä sarakkeesta "taaksepäin" liikuttaessa 
    409             // hypätään viimeiseen sarakkeeseen 
    410             if (paikka.Sarake < 0) 
    411                 paikka.Sarake = montakoSaraketta - 1; 
    412  
    413             // Mentiin pelipakan "tyhjälle alueelle" 
    414             if (kortit[paikka.Rivi, paikka.Sarake] == null) 
    415                 paikka = TultiinNullViitteeseen(paikka); 
    416  
    417             return paikka; 
    418         } 
    419  
    420         private Paikka TultiinNullViitteeseen(Paikka kortinPaikka) 
    421         { 
    422             if (mihinSuuntaanMenossa == Suunta.Vasen) 
    423                 return new Paikka(kortinPaikka.Rivi, (montakoKorttia % montakoSaraketta) - 1); 
    424             if (mihinSuuntaanMenossa == Suunta.Oikea) 
    425                 return new Paikka(kortinPaikka.Rivi, 0); 
    426             if (mihinSuuntaanMenossa == Suunta.Ylos) 
    427                 return new Paikka(montakoRivia - 2, kortinPaikka.Sarake); 
    428  
    429             // alas 
    430             return new Paikka(0, kortinPaikka.Sarake); 
    431         } 
    432  
    433         void KortinValinta(Suunta suunta) 
    434         { 
    435             mihinSuuntaanMenossa = suunta; 
    436             if (mihinSuuntaanMenossa == Suunta.Vasen) 
    437                 KorostaKortti(new Paikka(korostettuKortti.Rivi, korostettuKortti.Sarake - 1)); 
    438  
    439             if (mihinSuuntaanMenossa == Suunta.Oikea) 
    440                 KorostaKortti(new Paikka(korostettuKortti.Rivi, korostettuKortti.Sarake + 1)); 
    441  
    442             if (mihinSuuntaanMenossa == Suunta.Ylos) 
    443                 KorostaKortti(new Paikka(korostettuKortti.Rivi - 1, korostettuKortti.Sarake)); 
    444  
    445             if (mihinSuuntaanMenossa == Suunta.Alas) 
    446                 KorostaKortti(new Paikka(korostettuKortti.Rivi + 1, korostettuKortti.Sarake)); 
    447         } 
    448  
     453        #endregion 
     454 
     455        
    449456        /// <summary> 
    450457        /// Aliohjelma lisää halutun määrän kortteja 
     
    452459        /// </summary> 
    453460        /// <param name="montakoKorttiaLisataan">Kuinka monta korttia taulukkoon (attribuutti) lisätään.</param> 
    454         void KortitRuudulle(int montakoKorttiaLisataan) 
     461        void KortitRuudulle() 
    455462        { 
    456463            int montakoKorttiaLisatty = 0; 
     
    462469                    // Jos tarvittava määrä kortteja on lisätty,  
    463470                    // laitetaan loppuihin taulukon alkioihin null-viite 
    464                     if (montakoKorttiaLisataan == montakoKorttiaLisatty) 
     471                    if (montakoKorttia == montakoKorttiaLisatty) 
    465472                    { 
    466473                        kortit[r, s] = null; 
     
    468475                    } 
    469476 
    470                     kortit[r, s] = TeeKortti("kortti1"); 
    471                     kortit[r, s].KuvaPuoliTekstuuri = LoadImage("henkilo" + kortit[r, s].Tunniste.ToString()); 
     477                    kortit[r, s] = TeeKortti(); 
     478                    kortit[r, s].KuvaPuoliTekstuuri = Image.FromFile(korttisarja+"/" + kortit[r, s].Tunniste.ToString() + ".jpg"); 
    472479                    Add(kortit[r, s]); 
    473  
    474                     //Label tunnusTeksti = new Label(); 
    475                     //tunnusTeksti.Text = kortit[r, s].Tunniste.ToString(); 
    476                     //tunnusTeksti.TextColor = Color.White; 
    477                     //Add(tunnusTeksti); 
    478480 
    479481                    kortit[r, s].X = KortinX(s); 
    480482                    kortit[r, s].Y = KortinY(r); 
    481                     //tunnusTeksti.Position = new Vector(kortit[r, s].X, kortit[r, s].Y); 
    482483                    montakoKorttiaLisatty++; 
    483484                } 
     
    496497        } 
    497498 
    498         public Kortti TeeKortti(String kortinKuva) 
    499         { 
    500             Image kuvaTekstuuri = LoadImage(kortinKuva); 
     499        public Kortti TeeKortti() 
     500        { 
    501501            Image takaTekstuuri = LoadImage("taka"); 
    502             Kortti kortti = new Kortti(kortinLeveys, kortinKorkeus, false, kuvaTekstuuri, takaTekstuuri, 0); 
    503             int tunnus; 
     502            int tunniste = AnnaTunniste(); 
     503            return new Kortti(kortinLeveys, kortinKorkeus, false, takaTekstuuri, tunniste); 
     504        } 
     505 
     506        private int AnnaTunniste() 
     507        { 
     508            int tunniste; 
    504509            while (true) 
    505510            { 
    506                 tunnus = RandomGen.NextInt(0, montakoKutakinKorttitunnusta.Length - 1); 
    507                 if (montakoKutakinKorttitunnusta[tunnus] < 2) 
     511                tunniste = RandomGen.NextInt(0, montakoKutakinKorttitunnusta.Length - 1); 
     512                if (montakoKutakinKorttitunnusta[tunniste] < 2) 
    508513                { 
    509                     montakoKutakinKorttitunnusta[tunnus]++; 
     514                    montakoKutakinKorttitunnusta[tunniste]++; 
    510515                    break; 
    511516                } 
    512517            } 
    513  
    514             return new Kortti(kortinLeveys, kortinKorkeus, false, kuvaTekstuuri, takaTekstuuri, tunnus); 
     518            return tunniste; 
    515519        } 
    516520    } 
Note: See TracChangeset for help on using the changeset viewer.