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

Revision 1261, 7.2 KB checked in by anlakane, 10 years ago (diff)

Nappulan sammumisbugi korjattu, ikkunaa pienenntty, lisätty anti-realistinen animaatio nappulan syttymiseen.

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