source: 2010/27/anlakane/Nopeuspeli/Peli.cs @ 1263

Revision 1263, 8.1 KB checked in by anlakane, 10 years ago (diff)

Pikku fiksauksia.

Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Widgets;
5using Jypeli.Assets;
6
7public class Peli : Game
8{
9    List<GameObject> painikkeet;
10    List<GameObject> painamattomat;
11
12    Animation painike0animaatio;
13    Animation painike1animaatio;
14    Animation painike2animaatio;
15    Animation painike3animaatio;
16
17    const double painikkeenLeveys = 100;
18    const double painikkeenKorkeus = painikkeenLeveys;
19    Timer painikkeidenSytytin;
20    Timer nopeutusAjastin;
21    Timer aikaaPainaaUuttaNappia;
22
23    Label pistenaytto;
24
25    int painikkeidenMaara;
26    int montakoPainikettaPainettu;
27
28    bool peliPaattynyt;
29
30    Sound piip;
31
32    HighScoreList topten;
33
34    protected override void Begin()
35    {
36        painikkeet = new List<GameObject>();
37        painamattomat = new List<GameObject>();
38        painikkeidenMaara = 4;
39
40        SetWindowSize(900, 600, false);
41
42        Level.Width = 800;
43        Level.Height = 500;
44        Level.Background.Image = LoadImage("tausta");
45        Level.Background.Size = new Vector(Screen.Width, Screen.Height);
46        MessageDisplay.TextColor = Color.White;
47        Camera.ZoomToLevel();
48
49        topten = HighScoreList.LoadOrCreate("topten.dat", 10);
50
51        LisaaPainikkeet();
52
53        LuoAjastimet();
54        LataaAanet();
55
56        LisaaPistenaytto();
57        AloitaPeli();
58
59    }
60
61    void LataaAanet()
62    {
63        SoundEffect siniaalto = LoadSoundEffect("sinewave");
64        piip = siniaalto.CreateSound();
65    }
66
67
68    void LuoAjastimet()
69    {
70        painikkeidenSytytin = new Timer();
71        painikkeidenSytytin.Trigger += SytytaJokinPainike;
72        Add(painikkeidenSytytin);
73
74        nopeutusAjastin = new Timer();
75        nopeutusAjastin.Interval = 5;
76        nopeutusAjastin.Trigger += NopeutaPelia;
77        Add(nopeutusAjastin);
78
79        aikaaPainaaUuttaNappia = new Timer();
80        aikaaPainaaUuttaNappia.Interval = 3;
81        aikaaPainaaUuttaNappia.Trigger += PeliPaattyy;
82        Add(aikaaPainaaUuttaNappia);
83    }
84
85
86    void LisaaPistenaytto()
87    {
88        pistenaytto = new Label(montakoPainikettaPainettu.ToString());
89        pistenaytto.X = 0;
90        pistenaytto.Y = -50;
91        pistenaytto.TextColor = Color.White;
92        Add(pistenaytto);
93    }
94
95    void LisaaPainikkeet()
96    {
97        Image[] painike0kuvat = LoadImages("0", "00");
98        Image[] painike1kuvat = LoadImages("1", "11");
99        Image[] painike2kuvat = LoadImages("2", "22");
100        Image[] painike3kuvat = LoadImages("3", "33");
101        painike0animaatio = new Animation(painike0kuvat);
102        painike1animaatio = new Animation(painike1kuvat);
103        painike2animaatio = new Animation(painike2kuvat);
104        painike3animaatio = new Animation(painike3kuvat);
105        painike0animaatio.FPS = 15;
106        painike1animaatio.FPS = 15;
107        painike2animaatio.FPS = 15;
108        painike3animaatio.FPS = 15;
109
110        for (int i = 0; i < painikkeidenMaara; i++)
111        {
112            Add(LuoPainike());
113        }
114    }
115
116    GameObject LuoPainike()
117    {
118        GameObject painike = new GameObject(painikkeenLeveys, painikkeenKorkeus);
119        painikkeet.Add(painike);
120        painike.X = -((painikkeidenMaara / 2) * (painikkeenLeveys + 20)) + ((painikkeet.Count) * (painikkeenLeveys + 20)) - (painikkeenLeveys/2);
121        painike.Tag = painikkeet.Count.ToString();
122        painike.Image = LoadImage((painikkeet.Count - 1).ToString() + "_");
123        return painike;
124    }
125
126    void LisaaNappaimet()
127    {
128        Keyboard.Listen(Key.A, ButtonState.Pressed, NappainPainettu, null, 0);
129        Keyboard.Listen(Key.S, ButtonState.Pressed, NappainPainettu, null, 1);
130        Keyboard.Listen(Key.D, ButtonState.Pressed, NappainPainettu, null, 2);
131        Keyboard.Listen(Key.F, ButtonState.Pressed, NappainPainettu, null, 3);
132        //Keyboard.Listen(Key.J, ButtonState.Pressed, NappainPainettu, null, 4);
133        //Keyboard.Listen(Key.K, ButtonState.Pressed, NappainPainettu, null, 5);
134        //Keyboard.Listen(Key.L, ButtonState.Pressed, NappainPainettu, null, 6);
135        //Keyboard.Listen(Key., ButtonState.Pressed, NappainPainettu, null, 7);
136
137        Keyboard.Listen(Key.Left, ButtonState.Down, delegate() { pistenaytto.X -= 2; MessageDisplay.Add("" + pistenaytto.X + " " + pistenaytto.Y); }, null);
138        Keyboard.Listen(Key.Right, ButtonState.Down, delegate() { pistenaytto.X += 2; MessageDisplay.Add("" + pistenaytto.X + " " + pistenaytto.Y); }, null);
139        Keyboard.Listen(Key.Down, ButtonState.Down, delegate() { pistenaytto.Y -= 2; MessageDisplay.Add("" + pistenaytto.X + " " + pistenaytto.Y); }, null);
140        Keyboard.Listen(Key.Up, ButtonState.Down, delegate() { pistenaytto.Y += 2; MessageDisplay.Add("" + pistenaytto.X + " " + pistenaytto.Y); }, null);
141
142
143    }
144
145    void NappainPainettu(int painikeIndeksi)
146    {
147        if (painamattomat.Count < 1 || painamattomat[0].Tag.ToString() != (painikeIndeksi + 1).ToString())
148        {
149            PeliPaattyy(new Timer());
150        }
151        else
152        {
153            painamattomat.RemoveAt(0);
154            aikaaPainaaUuttaNappia.Reset();
155            pistenaytto.Text = (++montakoPainikettaPainettu).ToString();
156        }
157    }
158
159    void PeliPaattyy(Timer t)
160    {
161        peliPaattynyt = true;
162        ClearControls();
163        painikkeidenSytytin.Stop();
164        nopeutusAjastin.Stop();
165        aikaaPainaaUuttaNappia.Stop();
166        painamattomat.Clear();
167        for (int i = 0; i < painikkeet.Count; i++)
168        {
169            Sytyta(i);
170        }
171        Timer.SingleShot(1, NaytaTopTenJaSalliUudenPelinAloitus);
172    }
173
174    void NaytaTopTenJaSalliUudenPelinAloitus()
175    {
176        topten.CongratulationText = "Anna nimi";
177        topten.ScreenList.BackGroundColor = Color.DarkGray;
178        topten.Show(montakoPainikettaPainettu);
179        Keyboard.Listen(Key.Enter, ButtonState.Pressed, AloitaPeli, null);
180
181    }
182
183    void AloitaPeli()
184    {
185        peliPaattynyt = false;
186        LisaaNappaimet();
187
188        topten.Hide();
189        for (int i = 0; i < painikkeet.Count; i++)
190        {
191            Sammuta(i);
192        }
193        montakoPainikettaPainettu = 0;
194        pistenaytto.Text = "0";
195        painikkeidenSytytin.Interval = 1;
196        painikkeidenSytytin.Start();
197        nopeutusAjastin.Start();
198        aikaaPainaaUuttaNappia.Start();
199    }
200
201    void NopeutaPelia(Timer t)
202    {
203        painikkeidenSytytin.Interval /= 1.15;
204    }
205
206    void SytytaJokinPainike(Timer t)
207    {
208        int sytytettavanIndeksi = RandomGen.NextInt(0, painikkeet.Count - 1); // Arvotaan sytytettävä nappula
209        Sytyta(sytytettavanIndeksi);
210        painamattomat.Add(painikkeet[sytytettavanIndeksi]);
211        Timer.SingleShot(t.Interval / 1.4, delegate() { Sammuta(sytytettavanIndeksi); });
212        Timer.SingleShot(t.Interval / 2, SammutaAani);
213        switch (sytytettavanIndeksi)
214        {
215            case 0:
216                piip.Pitch = -1;
217                break;
218            case 1:
219                piip.Pitch = -.75;
220                break;
221            case 2:
222                piip.Pitch = -0.4;
223                break;
224            case 3:
225                piip.Pitch = -0.15;
226                break;
227        }
228
229        piip.Play();
230    }
231
232    void Sytyta(int i)
233    {
234        switch (i)
235        {
236            case 0:
237                painikkeet[i].Animation = painike0animaatio;
238                break;
239            case 1:
240                painikkeet[i].Animation = painike1animaatio;
241                break;
242            case 2:
243                painikkeet[i].Animation = painike2animaatio;
244                break;
245            case 3:
246                painikkeet[i].Animation = painike3animaatio;
247                break;
248        }
249        painikkeet[i].Animation.Start();
250    }
251
252    void SammutaAani()
253    {
254        piip.Stop();
255    }
256
257    void Sammuta(int i)
258    {
259        if (!peliPaattynyt) // Ei sammuteta nappulaa jos peli on päättynyt.
260        { 
261            painikkeet[i].Animation.Stop();
262            painikkeet[i].Image = LoadImage(i.ToString() + "_");
263        }
264    }
265}
Note: See TracBrowser for help on using the repository browser.