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

Revision 1747, 9.6 KB checked in by anlakane, 9 years ago (diff)

Nopeuspelin tynkää wp7:lle.

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