source: 2011/23/anlakane/SpeedKing/SpeedKing/SpeedKing/Peli.cs @ 2014

Revision 2014, 9.8 KB checked in by anlakane, 8 years ago (diff)

Sama nappi ei syty uudestaan peräkkäin.

Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8using Jypeli.WP7;
9
10public class Peli : Game
11{
12    List<GameObject> painikkeet;
13    List<GameObject> painamattomat;
14
15    Animation painike0animaatio;
16    Animation painike1animaatio;
17    Animation painike2animaatio;
18    Animation painike3animaatio;
19
20    const double painikkeenLeveys = 170;
21    const double painikkeenKorkeus = painikkeenLeveys;
22    Timer painikkeidenSytytin;
23    Timer nopeutusAjastin;
24    Timer aikaaPainaaUuttaNappia;
25
26    Label pistenaytto;
27
28    int painikkeidenMaara;
29    int montakoPainikettaPainettu;
30    int edellinenSytytetty = 5;
31
32    bool peliPaattynyt;
33
34    Sound piip;
35
36    // ScoreList topten = new ScoreList(10, false, 0);
37    EasyHighScore topten = new EasyHighScore();
38
39    public override void Begin()
40    {
41        Phone.DisplayResolution = DisplayResolution.Large;
42        //Phone.DisplayResolution = DisplayResolution.Small;
43        topten.Text = "";
44        painikkeet = new List<GameObject>();
45        painamattomat = new List<GameObject>();
46        painikkeidenMaara = 4;
47
48        Level.Width = 800;
49        Level.Height = 480;
50        Level.Background.Image = LoadImage("tausta");
51        Level.Background.Size = new Vector(Level.Width, Level.Height);
52        Level.BackgroundColor = Color.Black;
53        MessageDisplay.TextColor = Color.White;
54        Camera.ZoomToLevel();
55
56        //if (DataStorage.Exists("topten.xml"))
57        //{
58        //    //topfive = DataStorage.Load<ScoreList>(topfive, "topten.xml");
59        //}
60
61        LisaaPainikkeet();
62        LuoAjastimet();
63        LataaAanet();
64
65        LisaaPistenaytto();
66        AloitaPeli();
67
68    }
69
70    void LataaAanet()
71    {
72        SoundEffect siniaalto = LoadSoundEffect("sinewave");
73        piip = siniaalto.CreateSound();
74    }
75
76
77    void LuoAjastimet()
78    {
79        painikkeidenSytytin = new Timer();
80        painikkeidenSytytin.Trigger += SytytaJokinPainike;
81
82        nopeutusAjastin = new Timer();
83        nopeutusAjastin.Interval = 5.1;
84        nopeutusAjastin.Trigger += NopeutaPelia;
85
86        aikaaPainaaUuttaNappia = new Timer();
87        aikaaPainaaUuttaNappia.Interval = 3;
88        aikaaPainaaUuttaNappia.Trigger += PeliPaattyy;
89    }
90
91
92    void LisaaPistenaytto()
93    {
94        pistenaytto = new Label(montakoPainikettaPainettu.ToString());
95        pistenaytto.X = 0;
96        pistenaytto.Y = -150;
97        pistenaytto.TextColor = Color.White;
98        pistenaytto.Font = Font.DefaultLargeBold;
99        pistenaytto.SizeMode = TextSizeMode.StretchText;
100        pistenaytto.Size *= 3;
101        Add(pistenaytto);
102    }
103
104    void LisaaPainikkeet()
105    {
106        Image[] painike0kuvat = LoadImages("0", "00");
107        Image[] painike1kuvat = LoadImages("1", "11");
108        Image[] painike2kuvat = LoadImages("2", "22");
109        Image[] painike3kuvat = LoadImages("3", "33");
110        painike0animaatio = new Animation(painike0kuvat);
111        painike1animaatio = new Animation(painike1kuvat);
112        painike2animaatio = new Animation(painike2kuvat);
113        painike3animaatio = new Animation(painike3kuvat);
114        painike0animaatio.FPS = 12;
115        painike1animaatio.FPS = 12;
116        painike2animaatio.FPS = 12;
117        painike3animaatio.FPS = 12;
118
119        for (int i = 0; i < painikkeidenMaara; i++)
120        {
121            Add(LuoPainike());
122        }
123    }
124
125    GameObject LuoPainike()
126    {
127        GameObject painike = new GameObject(painikkeenLeveys, painikkeenKorkeus);
128        painikkeet.Add(painike);
129        painike.X = -((painikkeidenMaara / 2) * (painikkeenLeveys + 20)) + ((painikkeet.Count) * (painikkeenLeveys + 20)) - (painikkeenLeveys / 2);
130        painike.Tag = painikkeet.Count.ToString();
131        painike.Image = LoadImage((painikkeet.Count - 1).ToString() + "_");
132        return painike;
133    }
134
135    void LisaaNappaimet()
136    {
137        Keyboard.Listen(Key.A, ButtonState.Pressed, NappainPainettu, null, 0);
138        Keyboard.Listen(Key.S, ButtonState.Pressed, NappainPainettu, null, 1);
139        Keyboard.Listen(Key.D, ButtonState.Pressed, NappainPainettu, null, 2);
140        Keyboard.Listen(Key.F, ButtonState.Pressed, NappainPainettu, null, 3);
141
142        TouchPanel.Listen(ButtonState.Pressed, NayttoaPainettu, null);
143
144        //Keyboard.Listen(Key.J, ButtonState.Pressed, NappainPainettu, null, 4);
145        //Keyboard.Listen(Key.K, ButtonState.Pressed, NappainPainettu, null, 5);
146        //Keyboard.Listen(Key.L, ButtonState.Pressed, NappainPainettu, null, 6);
147        //Keyboard.Listen(Key., ButtonState.Pressed, NappainPainettu, null, 7);
148
149        #region debug
150        Keyboard.Listen(Key.Left, ButtonState.Down, delegate() { pistenaytto.X -= 2; MessageDisplay.Add("" + pistenaytto.X + " " + pistenaytto.Y); }, null);
151        Keyboard.Listen(Key.Right, ButtonState.Down, delegate() { pistenaytto.X += 2; MessageDisplay.Add("" + pistenaytto.X + " " + pistenaytto.Y); }, null);
152        Keyboard.Listen(Key.Down, ButtonState.Down, delegate() { pistenaytto.Y -= 2; MessageDisplay.Add("" + pistenaytto.X + " " + pistenaytto.Y); }, null);
153        Keyboard.Listen(Key.Up, ButtonState.Down, delegate() { pistenaytto.Y += 2; MessageDisplay.Add("" + pistenaytto.X + " " + pistenaytto.Y); }, null);
154        #endregion
155    }
156
157    void NayttoaPainettu(Touch kosketus)
158    {
159        for (int i = 0; i < painikkeet.Count; i++)
160        {
161            if (painikkeet[i].IsInside(kosketus.PositionOnWorld))
162            {
163                NappainPainettu(i);
164                return;
165            }
166        }
167    }
168
169    void NappainPainettu(int painikeIndeksi)
170    {
171        Phone.Vibrate(50);
172        if (painamattomat.Count < 1 || painamattomat[0].Tag.ToString() != (painikeIndeksi + 1).ToString())
173        {
174            PeliPaattyy(new Timer());
175        }
176        else
177        {
178            painamattomat.RemoveAt(0);
179            aikaaPainaaUuttaNappia.Reset();
180            pistenaytto.Text = (++montakoPainikettaPainettu).ToString();
181        }
182    }
183
184    void PeliPaattyy(Timer t)
185    {
186        Phone.Vibrate(1500);
187        peliPaattynyt = true;
188        ClearControls();
189        painikkeidenSytytin.Stop();
190        nopeutusAjastin.Stop();
191        aikaaPainaaUuttaNappia.Stop();
192        painamattomat.Clear();
193        for (int i = 0; i < painikkeet.Count; i++)
194        {
195            Sytyta(i);
196        }
197        Timer.SingleShot(1, NaytaTopTenJaSalliUudenPelinAloitus);
198    }
199
200    void NaytaTopTenJaSalliUudenPelinAloitus()
201    {
202        //topten.CongratulationText = "Anna nimi";
203        //topten.ScreenList.BackGroundColor = Color.DarkGray;
204        //topten.Show(montakoPainikettaPainettu);
205        //HighScoreWindow h = new HighScoreWindow("SpeedKing", "Hall of fame", "You reached top ten!", topten, montakoPainikettaPainettu);
206        //h.Width = 700;
207        //h.Height = 400;
208        //h.Closed += NimiAnnettu;
209        //Add(h);
210        topten.EnterAndShow(montakoPainikettaPainettu);
211        Keyboard.Listen(Key.Enter, ButtonState.Pressed, AloitaPeli, null);
212        TouchPanel.Listen(ButtonState.Pressed, AloitaPeliJaResetoiKosketus, null);
213    }
214
215    void AloitaPeliJaResetoiKosketus(Touch touch)
216    {
217        ClearControls();
218        AloitaPeli();
219    }
220
221    void AloitaPeli()
222    {
223        peliPaattynyt = false;
224        LisaaNappaimet();
225
226        for (int i = 0; i < painikkeet.Count; i++)
227        {
228            Sammuta(i);
229        }
230        montakoPainikettaPainettu = 0;
231        pistenaytto.Text = "0";
232        painikkeidenSytytin.Interval = 1;
233        painikkeidenSytytin.Start();
234        nopeutusAjastin.Start();
235        aikaaPainaaUuttaNappia.Start();
236    }
237
238    void NopeutaPelia(Timer t)
239    {
240        painikkeidenSytytin.Interval /= 1.11;
241        nopeutusAjastin.Interval = painikkeidenSytytin.Interval * 7.0 + 0.1;
242    }
243
244    void SytytaJokinPainike(Timer t)
245    {
246        int sytytettavanIndeksi;
247        // Arvotaan sytytettävä nappula, pitää olla eri kuin edellinen sytytetty
248        do { sytytettavanIndeksi = RandomGen.NextInt(0, painikkeet.Count); }
249        while (sytytettavanIndeksi == edellinenSytytetty);
250       
251        Sytyta(sytytettavanIndeksi);
252        painamattomat.Add(painikkeet[sytytettavanIndeksi]);
253        Timer.SingleShot(t.Interval / 1.4, delegate() { Sammuta(sytytettavanIndeksi); });
254        Timer.SingleShot(t.Interval / 2, SammutaAani);
255        switch (sytytettavanIndeksi)
256        {
257            case 0:
258                piip.Pitch = -1;
259                break;
260            case 1:
261                piip.Pitch = -.75;
262                break;
263            case 2:
264                piip.Pitch = -0.4;
265                break;
266            case 3:
267                piip.Pitch = -0.15;
268                break;
269        }
270
271        piip.Play();
272    }
273
274    void Sytyta(int i)
275    {
276        switch (i)
277        {
278            case 0:
279                painikkeet[i].Animation = painike0animaatio;
280                break;
281            case 1:
282                painikkeet[i].Animation = painike1animaatio;
283                break;
284            case 2:
285                painikkeet[i].Animation = painike2animaatio;
286                break;
287            case 3:
288                painikkeet[i].Animation = painike3animaatio;
289                break;
290        }
291        painikkeet[i].Animation.Start();
292        edellinenSytytetty = i;
293    }
294
295    void SammutaAani()
296    {
297        piip.Stop();
298    }
299
300    void Sammuta(int i)
301    {
302        if (!peliPaattynyt) // Ei sammuteta nappulaa jos peli on päättynyt.
303        {
304            painikkeet[i].Animation.Stop();
305            painikkeet[i].Image = LoadImage(i.ToString() + "_");
306        }
307    }
308
309    protected override void Update(Time time)
310    {
311        base.Update(time);
312    }
313}
Note: See TracBrowser for help on using the repository browser.