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

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