source: 2010/24/anlakane/Muistipeli/Kortti.cs @ 1038

Revision 1038, 4.8 KB checked in by anlakane, 11 years ago (diff)

Vähän kivoja efektejä ja ääniä. Korttien määrän voi "valita" alussa.

Line 
1using System;
2using System.Collections.Generic;
3using System.Linq;
4using Jypeli;
5
6namespace Muistipeli
7{
8    public class Kortti : GameObject
9    {
10        private enum LiikkeenTila { Pysahtynyt, Pienentyy, Suurentuu }
11       
12        protected Vector alkuperainenKoko;
13        private LiikkeenTila liikkeenTila;
14       
15        PuoliEsilla puoliEsilla;
16        private Image kuvapuoliTekstuuri;
17        public Image KuvaPuoliTekstuuri
18        {
19            set { kuvapuoliTekstuuri = value; }
20            get { return kuvapuoliTekstuuri; }
21        }
22        private Image takapuoliTekstuuri;
23       
24        public enum PuoliEsilla { Kuva, Taka }
25
26        private bool poistettuPelista;
27        public bool PoistettuPelista
28        {
29            get { return poistettuPelista; }
30            set { poistettuPelista = value; }
31        }
32
33        private int tunniste;
34
35        /// <summary>
36        /// Kortin tunnus, jolla parit tunnistetaan pariksi.
37        /// </summary>
38        public int Tunniste
39        {
40            get { return tunniste; }
41        }
42
43
44        public Kortti(double leveys, double korkeus, bool kuvapuoliEsilla, Image kuvapuoliTekstuuri, Image takapuoliTekstuuri, int tunnus)
45            : base(leveys, korkeus, Shapes.Rectangle)
46        {
47            this.kuvapuoliTekstuuri = kuvapuoliTekstuuri;
48            this.takapuoliTekstuuri = takapuoliTekstuuri;
49            this.liikkeenTila = LiikkeenTila.Pysahtynyt;
50            this.poistettuPelista = false;
51
52            if (kuvapuoliEsilla)
53                AsetaPuoli(PuoliEsilla.Kuva);
54            else
55                AsetaPuoli(PuoliEsilla.Taka);
56
57            IsUpdated = true;
58            this.alkuperainenKoko = new Vector(leveys, korkeus);
59            this.tunniste = tunnus;
60        }
61
62        public Kortti(double leveys, double korkeus, bool kuvapuoliEsilla, Image takapuoliTekstuuri, int tunnus)
63            : base(leveys, korkeus, Shapes.Rectangle)
64        {
65            this.kuvapuoliTekstuuri = Image.FromColor((int)Math.Floor(leveys), (int)Math.Floor(korkeus), Color.White);
66            this.takapuoliTekstuuri = takapuoliTekstuuri;
67            this.liikkeenTila = LiikkeenTila.Pysahtynyt;
68            this.poistettuPelista = false;
69
70            if (kuvapuoliEsilla)
71                AsetaPuoli(PuoliEsilla.Kuva);
72            else
73                AsetaPuoli(PuoliEsilla.Taka);
74
75            IsUpdated = true;
76            this.alkuperainenKoko = new Vector(leveys, korkeus);
77            this.tunniste = tunnus;
78        }
79
80        public void Kaanna()
81        {
82            liikkeenTila = LiikkeenTila.Pienentyy;
83        }
84
85        /// <summary>
86        /// Aliohjelma palauttaa tiedon siitä, onko kortin animaatio käynnissä vai ei.
87        /// </summary>
88        /// <returns>Animaatio käynnissä.</returns>
89        public bool OnkoLiikkeessa()
90        {
91            if (liikkeenTila == LiikkeenTila.Pysahtynyt)
92                return false;
93            return true;
94        }
95
96        public PuoliEsilla KumpiPuoliEsilla()
97        {
98            return this.puoliEsilla;
99        }
100
101        private void AsetaPuoli(PuoliEsilla puoli)
102        {
103            this.puoliEsilla = puoli;
104            switch (puoli)
105            {
106                case PuoliEsilla.Kuva:
107                    this.Image = kuvapuoliTekstuuri;
108                    break;
109                case PuoliEsilla.Taka:
110                    this.Image = takapuoliTekstuuri;
111                    break;
112            }
113        }
114
115        /// <summary>
116        /// Allows the game component to update itself.
117        /// </summary>
118        /// <param name="gameTime">Provides a snapshot of timing values.</param>
119        public override void Update(Time time)
120        {
121            if (liikkeenTila == LiikkeenTila.Pienentyy)
122            {
123                if (this.Width > 3)
124                {
125                    this.Size = new Vector(this.Width - 3, this.Height);
126                }
127                if (this.Width <= 3)
128                {
129
130                    if (puoliEsilla == PuoliEsilla.Kuva)
131                    {
132                        AsetaPuoli(PuoliEsilla.Taka);
133                    }
134                    else
135                    {
136                        AsetaPuoli(PuoliEsilla.Kuva);
137                    }
138                    liikkeenTila = LiikkeenTila.Suurentuu;
139                }
140            }
141
142            if (liikkeenTila == LiikkeenTila.Suurentuu)
143            {
144                if (this.Width < this.alkuperainenKoko.X)
145                {
146                    this.Size = new Vector(this.Width + 3, this.Height);
147                }
148                if (this.Width >= this.alkuperainenKoko.X)
149                {
150                    liikkeenTila = LiikkeenTila.Pysahtynyt;
151                }
152
153            }
154
155            base.Update(time);
156        }
157    }
158}
Note: See TracBrowser for help on using the repository browser.