source: 2010/24/anlakane/Muistipeli/Peli.cs @ 921

Revision 921, 7.5 KB checked in by anlakane, 10 years ago (diff)

Kortteja laitetaan nyt 2-ulotteiseen taulukkoon. Liikkuminen korttien välillä toimii. Kortit eivät käänny eikä pelissä muutenkaan ole vielä mitään järkeä.

Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.ScreenObjects;
5using Jypeli.Assets;
6
7namespace Muistipeli
8{
9    public class Peli : Game
10    {
11        List<Kortti> kortit = new List<Kortti>();
12        double kortinLeveys = 80;
13        double kortinKorkeus = 100;
14        int montakoKorttia;
15        int korostettuKortti;
16        int montakoKorttiaRiviin;
17
18        public enum Suunta { Vasen, Oikea, Ylos, Alas }
19
20        Kortti kortti1;
21
22        //protected override void Begin()
23        //{
24        //    kortti1 = new Kortti(80, 100);
25        //    Add(kortti1);
26        //    AsetaNappaimet();
27
28        //}
29
30        protected override void Begin()
31        {
32            montakoKorttia = 50;
33            TeeKortit();
34            AsetaNappaimet();
35            KortitRuudulle(kortit);
36            ValitseEnsimmainen();
37        }
38
39        void ValitseEnsimmainen()
40        {
41            KorostaKortti(kortit.Count / 2);
42            korostettuKortti = kortit.Count / 2;
43        }
44
45        int KortinNumeronTarkistus(int kortinNro)
46        {
47            if (kortinNro < 0)
48            {
49                kortinNro = kortit.Count - 1;
50            }
51
52            if (kortinNro > kortit.Count - 1) // Hypätään viimeisestä kortista oikealle
53            {
54                kortinNro--; // "Palataan viimeiseen korttiin"
55                //kortinNro = 0;
56                int jj = kortit.Count % (montakoKorttiaRiviin + 1); // Montako korttia viimeisellä rivillä on
57                kortinNro = kortit.Count - jj; // Siirrytään viimeisen rivin ensimmäiseen korttiin
58            }
59
60            return kortinNro;
61        }
62
63        void KorostaKortti(int kortinNro)
64        {
65            kortinNro = KortinNumeronTarkistus(kortinNro);
66            Kortti.PuoliEsilla puoliesilla = kortit[kortinNro].KumpiPuoliEsilla();
67            if (puoliesilla == Kortti.PuoliEsilla.Taka)
68            {
69                double punainen = kortit[kortinNro].Color.RedComponent;               
70                double sininen = kortit[kortinNro].Color.BlueComponent;
71                double vihrea= kortit[kortinNro].Color.GreenComponent;
72
73
74                kortit[kortinNro].Color = new Color(
75                    punainen + 0.5,
76                    sininen+ 0.5,
77                    vihrea + 0.5);
78                korostettuKortti = kortinNro;
79            }
80            else
81            {
82                kortit[kortinNro].Color = Color.Gray;
83                korostettuKortti = kortinNro;
84            }
85        }
86
87        void PoistaKorostus(int kortinNro)
88        {
89            kortinNro = KortinNumeronTarkistus(kortinNro);
90
91            Kortti.PuoliEsilla puoliesilla = kortit[kortinNro].KumpiPuoliEsilla();
92            if (puoliesilla == Kortti.PuoliEsilla.Kuva)
93            {
94                kortit[kortinNro].Color = kortit[kortinNro].kuvapuoliVari;
95            }
96            if (puoliesilla == Kortti.PuoliEsilla.Taka)
97            {
98                kortit[kortinNro].Color = kortit[kortinNro].takaVari;
99            }
100
101        }
102
103        void AsetaNappaimet()
104        {
105            Keyboard.Listen(Key.Left, ButtonState.Pressed, KortinValinta, null, Suunta.Vasen);
106            Keyboard.Listen(Key.Right, ButtonState.Pressed, KortinValinta, null, Suunta.Oikea);
107            Keyboard.Listen(Key.Up, ButtonState.Pressed, KortinValinta, null, Suunta.Ylos);
108            Keyboard.Listen(Key.Down, ButtonState.Pressed, KortinValinta, null, Suunta.Alas);
109            Keyboard.Listen(Key.Space, ButtonState.Pressed, KaannaKortti, null);
110            Keyboard.Listen(Key.Escape, ButtonState.Pressed, Lopeta, null);
111        }
112
113        void Lopeta()
114        {
115            Exit();
116        }
117
118        void KaannaKortti()
119        {
120            kortit[korostettuKortti].Kaanna();
121        }
122
123        void KortinValinta(Suunta suunta)
124        {
125            bool rivinAlussa = false;
126            bool rivinLopussa = false;
127            if (korostettuKortti % (montakoKorttiaRiviin + 1) == 0)
128                rivinAlussa = true;
129            if ((korostettuKortti + 1) % (montakoKorttiaRiviin + 1) == 0)
130                rivinLopussa = true;
131
132
133            if (suunta == Suunta.Vasen)
134            {
135                PoistaKorostus(korostettuKortti);
136                if (rivinAlussa)
137                {
138                    KorostaKortti(korostettuKortti + montakoKorttiaRiviin);
139                    MessageDisplay.Add("Korostettu kortti: " + korostettuKortti);
140                    return;
141                }
142                KorostaKortti(--korostettuKortti);
143                MessageDisplay.Add("Korostettu kortti: " + korostettuKortti);
144
145            }
146
147            if (suunta == Suunta.Oikea)
148            {
149                PoistaKorostus(korostettuKortti);
150                if (rivinLopussa)
151                {
152                    KorostaKortti(korostettuKortti - montakoKorttiaRiviin);
153                    MessageDisplay.Add("Korostettu kortti: " + korostettuKortti);
154
155                    return;
156                }
157                KorostaKortti(++korostettuKortti);
158                MessageDisplay.Add("Korostettu kortti: " + korostettuKortti);
159
160            }
161
162            if (suunta == Suunta.Ylos)
163            {
164                PoistaKorostus(korostettuKortti);
165                KorostaKortti(korostettuKortti - montakoKorttiaRiviin - 1);
166                MessageDisplay.Add("Korostettu kortti: " + korostettuKortti);
167
168            }
169
170            if (suunta == Suunta.Alas)
171            {
172                PoistaKorostus(korostettuKortti);
173                KorostaKortti(korostettuKortti + montakoKorttiaRiviin + 1);
174                MessageDisplay.Add("Korostettu kortti: " + korostettuKortti);
175
176            }
177            //MessageDisplay.Add(montakoKorttiaRiviin.ToString());
178            //MessageDisplay.Add((korostettuKortti % (montakoKorttiaRiviin +1)).ToString());
179        }
180
181        void TeeKortit()
182        {
183            for (int i = 0; i < montakoKorttia; i++)
184            {
185                TeeKortti();
186            }
187        }
188
189        private void KortitRuudulle(List<Kortti> kortit)
190        {
191            int montakoKorttia = kortit.Count;
192            //int montakoKorttiaRiviin = 8;
193            montakoKorttiaRiviin = (int)Math.Sqrt(kortit.Count);
194            montakoKorttiaRiviin = (int)Math.Floor((3.0 / 2.0) * montakoKorttiaRiviin);
195            int montakoRivia = (kortit.Count / montakoKorttiaRiviin);
196
197            int i = 0;
198            int rivi = 1;
199            int rivilla = 0;
200            foreach (GameObject kortti in kortit)
201            {
202                Add(kortti);
203                //kortti.X = (-(montakoKorttia * (kortinLeveys + 20)) / 2) + (i * (kortinLeveys + 20));
204                kortti.X = (-(montakoKorttiaRiviin * (kortinLeveys + 20)) / 2) + (rivilla * (kortinLeveys + 20));
205                kortti.Y = ((montakoRivia+1) * (kortinKorkeus + 20)) / 2 - rivi * (kortinKorkeus + 20);
206                i++;
207                rivilla++;
208                if (rivilla > montakoKorttiaRiviin)
209                {
210                    rivi++;
211                    rivilla = 0;
212                }
213            }
214        }
215
216        void TeeKortti()
217        {
218            //GameObject kortti = new GameObject(kortinLeveys, kortinKorkeus, Shapes.Rectangle);
219            //kortti.Color = Color.White;
220
221            Kortti kortti = new Kortti(kortinLeveys, kortinKorkeus, true, Color.White, Color.Red);
222            kortit.Add(kortti);
223        }
224    }
225}
Note: See TracBrowser for help on using the repository browser.