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

Revision 921, 5.9 KB checked in by anlakane, 12 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 Peli2 : Game
10    {
11        int montakoRivia;
12        int montakoSaraketta;
13
14        double kortinLeveys = 80;
15        double kortinKorkeus = 100;
16        Kortti[,] kortit; // rivit, sarakkeet
17        int[,] korostettuKortti;
18        int montakoKorttia;
19        public enum Suunta { Vasen, Oikea, Ylos, Alas }
20        Suunta mihinSuuntaanMenossa;
21
22        protected override void Begin()
23        {
24            montakoKorttia = 21;
25            korostettuKortti = new int[2, 1];
26            montakoSaraketta = (int)Math.Sqrt(montakoKorttia);
27            montakoSaraketta = (int)Math.Floor((3.0 / 2.0) * montakoSaraketta);
28            montakoRivia = (int)Math.Ceiling((double)montakoKorttia / (double)montakoSaraketta);
29            kortit = new Kortti[montakoRivia, montakoSaraketta];
30            KortitRuudulle(montakoKorttia);
31
32            AsetaNappaimet();
33            KorostaKortti(new int[2, 1] { { 0 }, { 1 } });
34
35        }
36
37        void AsetaNappaimet()
38        {
39            Keyboard.Listen(Key.Left, ButtonState.Pressed, KortinValinta, null, Suunta.Vasen);
40            Keyboard.Listen(Key.Right, ButtonState.Pressed, KortinValinta, null, Suunta.Oikea);
41            Keyboard.Listen(Key.Up, ButtonState.Pressed, KortinValinta, null, Suunta.Ylos);
42            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);
45        }
46
47        void KorostaKortti(int[,] kortinNro)
48        {
49            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] + "]");
52            korostettuKortti = kortinNro;
53
54        }
55
56        private int[,] TarkistaKortinNro(int[,] kortinNro)
57        {
58            if (kortinNro[0, 0] >= montakoRivia)
59            {
60                kortinNro[0, 0] = 0;
61            }
62
63            if (kortinNro[1, 0] >= montakoSaraketta)
64            {
65                kortinNro[1, 0] = 0;
66            }
67
68            if (kortinNro[0, 0] < 0)
69            {
70                kortinNro[0, 0] = montakoRivia - 1;
71            }
72
73            if (kortinNro[1, 0] < 0)
74            {
75                kortinNro[1, 0] = montakoSaraketta - 1;
76            }
77
78            if (kortit[kortinNro[0, 0], kortinNro[1, 0]] == null) // Mentiin pelipakan "tyhjälle alueelle"
79            {
80                kortinNro = TultiinNullViitteeseen(kortinNro);
81            }
82
83            return kortinNro;
84        }
85
86        private int[,] TultiinNullViitteeseen(int[,] kortinNro)
87        {
88            if (mihinSuuntaanMenossa == Suunta.Vasen)
89            {
90                return new int[2, 1] { { korostettuKortti[0, 0] }, { (montakoKorttia%montakoSaraketta) -1 } };
91            }
92            if (mihinSuuntaanMenossa == Suunta.Oikea)
93            {
94                return new int[2, 1] { { korostettuKortti[0, 0] }, { 0 } };
95            }
96            if (mihinSuuntaanMenossa == Suunta.Ylos)
97            {
98                return new int[2, 1] { { montakoRivia - 2 }, { korostettuKortti[1, 0] } };
99
100            }
101
102            // alas
103            return new int[2, 1] { { 0 }, { korostettuKortti[1, 0] } };
104
105        }
106
107
108
109        void KortinValinta(Suunta suunta)
110        {
111            mihinSuuntaanMenossa = suunta;
112            PoistaKorostus(korostettuKortti);
113
114            if (mihinSuuntaanMenossa == Suunta.Vasen)
115            {
116                KorostaKortti(new int[2, 1] { { korostettuKortti[0, 0] }, { korostettuKortti[1, 0] - 1 } });
117            }
118            if (mihinSuuntaanMenossa == Suunta.Oikea)
119            {
120                KorostaKortti(new int[2, 1] { { korostettuKortti[0, 0] }, { korostettuKortti[1, 0] + 1 } });
121            }
122            if (mihinSuuntaanMenossa == Suunta.Ylos)
123            {
124                KorostaKortti(new int[2, 1] { { korostettuKortti[0, 0] - 1 }, { korostettuKortti[1, 0] } });
125
126            }
127            if (mihinSuuntaanMenossa == Suunta.Alas)
128            {
129                KorostaKortti(new int[2, 1] { { korostettuKortti[0, 0] + 1 }, { korostettuKortti[1, 0] } });
130
131            }
132
133        }
134
135        void PoistaKorostus(int[,] kortinNro)
136        {
137            kortit[kortinNro[0, 0], kortinNro[1, 0]].Color = Color.White;
138
139        }
140
141
142
143        /// <summary>
144        /// Aliohjelma lisää halutun määrän kortteja
145        /// taulukkoon ja edelleen ruudulle.
146        /// </summary>
147        /// <param name="montakoKorttiaLisataan">Kuinka monta korttia taulukkoon (attribuutti) lisätään.</param>
148        void KortitRuudulle(int montakoKorttiaLisataan)
149        {
150            int montakoKorttiaLisatty = 0;
151
152            for (int r = 0; r < kortit.GetLength(0); r++) // Rivit
153            {
154                for (int s = 0; s < kortit.GetLength(1); s++) // Sarakkeet
155                {
156                    // Jos tarvittava määrä kortteja on lisätty,
157                    // laitetaan loppuihin taulukon alkioihin null-viite
158                    if (montakoKorttiaLisataan == montakoKorttiaLisatty)
159                    {
160                        kortit[r, s] = null;
161                        continue;
162                    }
163
164                    kortit[r, s] = new Kortti(kortinLeveys, kortinKorkeus, false, Color.Red, Color.White);
165                    Add(kortit[r, s]);
166
167                    kortit[r, s].X = (-(montakoSaraketta * (kortinLeveys + 20)) / 2) + (s * (kortinLeveys + 20));
168                    kortit[r, s].Y = ((montakoRivia) * (kortinKorkeus + 20)) / 2 - r * (kortinKorkeus + 20);
169
170                    montakoKorttiaLisatty++;
171                }
172            }
173        }
174    }
175}
Note: See TracBrowser for help on using the repository browser.