source: 2010/31/saolhaka/GuitarZero/Peli.cs @ 1574

Revision 1574, 10.8 KB checked in by paaaanro, 12 years ago (diff)
Line 
1using System;
2using Jypeli;
3using Jypeli.Widgets;
4using Jypeli.Assets;
5using System.Collections.Generic;
6
7public class Peli : Game
8{
9    const double kielenLeveys = 50.0;
10    double nuottienTippumisnopeus = 8.0;
11
12    List<Label> valikonKohdat;
13    Label valikonValittu;
14    Label pisteNaytto;
15    GameObject[] fretit;
16    Image[] fretitPainettuna;
17    Image[] fretitPainamattomina;
18    GameObject viivaus;
19
20    Timer nuottienPudotusAjastin;
21    List<GameObject> nuotit;
22    bool seuraavaOnHopo = false;
23
24    protected override void Begin()
25    {
26        Valikko();
27    }
28    void Valikko()
29    {
30        ClearAll();
31        valikonKohdat = new List<Label>();
32
33        Label kohta0 = new Label("Guitar Here");
34        kohta0.Position = new Vector(0, 300);
35        Add(kohta0);
36        kohta0.TextColor = Color.Yellow;
37
38        Label kohta1 = new Label("Aloita uusi peli");
39        kohta1.Position = new Vector(0, 40);
40        kohta1.TextColor = Color.White;
41        valikonKohdat.Add(kohta1);
42
43        Label kohta2 = new Label("Lopeta");
44        kohta2.Position = new Vector(0, -40);
45        kohta2.TextColor = Color.White;
46        valikonKohdat.Add(kohta2);
47        Level.BackgroundColor = Color.Red;
48
49        foreach (Label valikonKohta in valikonKohdat)
50        {
51            Add(valikonKohta);
52        }
53
54        valikonValittu = valikonKohdat[0];
55        valikonValittu.TextColor = Color.Orange;
56        RaySegment alleviivaus = new RaySegment(new Vector(-75, 30), new Vector(150, 0), 1);
57        viivaus = new GameObject(1, 1, alleviivaus);
58        viivaus.Color = Color.Orange;
59        Add(viivaus);
60
61        //Mouse.ListenOn(kohta1, MouseButton.Left, ButtonState.Pressed, AloitaPeli, null);
62        //Mouse.ListenOn(kohta2, MouseButton.Left, ButtonState.Pressed, Lopeta, null);
63        Keyboard.Listen(Key.Up, ButtonState.Pressed, ValikossaLiikkuminen, null);
64        Keyboard.Listen(Key.Down, ButtonState.Pressed, ValikossaLiikkuminen, null);
65        Keyboard.Listen(Key.Enter, ButtonState.Pressed, ValikonValinta, null);
66
67
68        Mouse.IsCursorVisible = false;
69        //Mouse.ListenMovement(1.0, ValikossaLiikkuminen, null);
70        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Lopeta, "");
71    }
72
73    void ValikonValinta()
74    {
75        if (valikonValittu == valikonKohdat[0])
76        {
77            AloitaPeli();
78        }
79        if (valikonValittu == valikonKohdat[1])
80        {
81            Lopeta();
82        }
83    }
84
85    void ValikossaLiikkuminen()
86    {
87            if (valikonValittu == valikonKohdat[0])
88            {
89                // Todo: Voiko tekstin kokoa jotenkin muuttaa?
90                valikonKohdat[1].TextColor = Color.Orange;
91                valikonKohdat[0].TextColor = Color.White;
92                valikonValittu = valikonKohdat[1];
93                viivaus.Destroy();
94                RaySegment alleviivaus = new RaySegment(new Vector(-35, -50), new Vector(70, 0), 1);
95                viivaus = new GameObject(1, 1, alleviivaus);
96                viivaus.Color = Color.Orange;
97                Add(viivaus);
98                return;
99            }
100            if (valikonValittu == valikonKohdat[1])
101            {
102                valikonKohdat[0].TextColor = Color.Orange;
103                valikonKohdat[1].TextColor = Color.White;
104                valikonValittu = valikonKohdat[0];
105                viivaus.Destroy();
106                RaySegment alleviivaus = new RaySegment(new Vector(-75, 30), new Vector(150, 0), 1);
107                viivaus = new GameObject(1, 1, alleviivaus);
108                viivaus.Color = Color.Orange;
109                Add(viivaus);
110            }
111    }
112
113    void AloitaPeli()
114    {
115        ClearAll();
116        AsetaOhjaimet();
117        Level.BackgroundColor = Color.Brown;
118        LuoPisteLaskuri();
119        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Valikko, "Palaa valikkoon");
120        pisteNaytto.BindTo(pisteLaskuri);
121        Add(pisteNaytto);
122        PiirraKieletJaFretit();
123        nuotit = new List<GameObject>();
124        LuoNuottienPudotusAjastin();
125    }
126
127    void LuoNuottienPudotusAjastin()
128    {
129        nuottienPudotusAjastin = new Timer();
130        nuottienPudotusAjastin.Interval = 0.50;
131        nuottienPudotusAjastin.Trigger += LuoSatunnainenNuotti;
132        nuottienPudotusAjastin.Start();
133        Timer.SingleShot(0.5, NuottienPudotusNopeudenAsettaminen);
134    }
135
136    void NuottienPudotusNopeudenAsettaminen()
137    {
138        double aika = RandomGen.NextDouble(0.10, 0.50);
139        aika = Math.Round(aika, 1);
140        if (aika <= 0.2)
141        {
142            seuraavaOnHopo = true;
143        }
144        nuottienPudotusAjastin.Interval = aika;
145        MessageDisplay.Add("Nuotit putoaa nyt nopeudella: " + nuottienPudotusAjastin.Interval.ToString() + " s");
146        Timer.SingleShot(aika, NuottienPudotusNopeudenAsettaminen);
147    }
148   
149    void LuoSatunnainenNuotti(Timer ajastin)
150    {
151        int kieli = RandomGen.NextInt(0, 4);
152        GameObject nuotti = new GameObject(40, 40, Shapes.Circle);
153        double x = -75 + (kieli * kielenLeveys);
154        nuotti.Position = new Vector(x, Screen.Top);
155
156        bool edellinenSamallaKielella = false;
157        if (nuotit.Count > 1)
158        {
159            edellinenSamallaKielella = (nuotti.X == nuotit[nuotit.Count - 1].X);
160        }
161
162        if (seuraavaOnHopo && !edellinenSamallaKielella)
163        {
164            switch (kieli)
165            {
166                case 0:
167                    nuotti.Image = LoadImage("greenhopo");
168                    break;
169                case 1:
170                    nuotti.Image = LoadImage("redhopo");
171                    break;
172                case 2:
173                    nuotti.Image = LoadImage("yellowhopo");
174                    break;
175                case 3:
176                    nuotti.Image = LoadImage("bluehopo");
177                    break;
178                case 4:
179                    nuotti.Image = LoadImage("orangehopo");
180                    break;
181            }
182
183            seuraavaOnHopo = false;
184        }
185        else
186        {
187            switch (kieli)
188            {
189                case 0:
190                    nuotti.Image = LoadImage("greenbutton");
191                    break;
192                case 1:
193                    nuotti.Image = LoadImage("redbutton");
194                    break;
195                case 2:
196                    nuotti.Image = LoadImage("yellowbutton");
197                    break;
198                case 3:
199                    nuotti.Image = LoadImage("bluebutton");
200                    break;
201                case 4:
202                    nuotti.Image = LoadImage("orangebutton");
203                    break;
204            }
205
206        }
207
208        nuotit.Add(nuotti);
209        Add(nuotti);
210    }
211
212    void LuoReuna(double x)
213    {
214        RaySegment reuna1 = new RaySegment(new Vector(x, -750), new Vector(0, 2000), 1);
215        GameObject reuna = new GameObject(1, 1, reuna1);
216        reuna.Color = Color.White;
217        Add(reuna);
218
219    }
220    void PiirraKieletJaFretit()
221    {
222        LuoReuna(-100);
223        LuoReuna(150);
224
225        fretitPainettuna = new Image[5];
226        fretitPainettuna[0] = LoadImage("greenfretpressed");
227        fretitPainettuna[1] = LoadImage("redfretpressed");
228        fretitPainettuna[2] = LoadImage("yellowfretpressed");
229        fretitPainettuna[3] = LoadImage("bluefretpressed");
230        fretitPainettuna[4] = LoadImage("orangefretpressed");
231        fretitPainamattomina = new Image[5];
232        fretitPainamattomina[0] = LoadImage("greenfret");
233        fretitPainamattomina[1] = LoadImage("redfret");
234        fretitPainamattomina[2] = LoadImage("yellowfret");
235        fretitPainamattomina[3] = LoadImage("bluefret");
236        fretitPainamattomina[4] = LoadImage("orangefret");
237
238        fretit = new GameObject[5];
239
240        for (int i = 0; i < 5; i++)
241        {
242            double x = -75 + (i * kielenLeveys);
243            double y = -750;
244            RaySegment r = new RaySegment(new Vector(x, y), new Vector(0, 2000), 1);
245            GameObject kieli = new GameObject(1, 1, r);
246            kieli.Color = new Color(100, 100, 100);
247            Add(kieli);
248
249            GameObject fretti = new GameObject(47, 47, Shapes.Circle);
250            switch (i)
251            {
252                case 0:
253                    fretti.Image = LoadImage("greenfret");
254                    break;
255                case 1:
256                    fretti.Image = LoadImage("redfret");
257                    break;
258                case 2:
259                    fretti.Image = LoadImage("yellowfret");
260                    break;
261                case 3:
262                    fretti.Image = LoadImage("bluefret");
263                    break;
264                case 4:
265                    fretti.Image = LoadImage("orangefret");
266                    break;
267            }
268
269            fretti.Position = new Vector(x, Screen.Bottom + 75);
270            fretit[i] = fretti;
271            Add(fretit[i]);
272        }
273    }
274
275    void AsetaOhjaimet()
276    {
277        Keyboard.Listen(Key.F1, ButtonState.Down, Paina, null, 0);
278        Keyboard.Listen(Key.F1, ButtonState.Released, Vapauta, null, 0);
279        Keyboard.Listen(Key.F2, ButtonState.Down, Paina, null, 1);
280        Keyboard.Listen(Key.F2, ButtonState.Released, Vapauta, null, 1);
281        Keyboard.Listen(Key.F3, ButtonState.Down, Paina, null, 2);
282        Keyboard.Listen(Key.F3, ButtonState.Released, Vapauta, null, 2);
283        Keyboard.Listen(Key.F4, ButtonState.Down, Paina, null, 3);
284        Keyboard.Listen(Key.F4, ButtonState.Released, Vapauta, null, 3);
285        Keyboard.Listen(Key.F5, ButtonState.Down, Paina, null, 4);
286        Keyboard.Listen(Key.F5, ButtonState.Released, Vapauta, null, 4);
287    }
288
289    void Paina(int indeksi)
290    {
291        fretit[indeksi].Image = fretitPainettuna[indeksi];
292    }
293
294    void Vapauta(int indeksi)
295    {
296        fretit[indeksi].Image = fretitPainamattomina[indeksi];
297    }
298
299    void Lopeta()
300    {
301        Exit();
302    }
303
304    IntMeter pisteLaskuri;
305
306    void LuoPisteLaskuri()
307    {
308        pisteLaskuri = new IntMeter(0);
309
310        pisteNaytto = new Label();
311        pisteNaytto.X = Screen.Left + 100;
312        pisteNaytto.Y = Screen.Top - 100;
313        pisteNaytto.TextColor = Color.White;
314
315        pisteNaytto.BindTo(pisteLaskuri);
316        Add(pisteNaytto);
317
318        Label pisteTeksti = new Label();
319        pisteTeksti.X = Screen.Left + 50;
320        pisteTeksti.Y = Screen.Top - 100;
321        pisteTeksti.TextColor = Color.White;
322        Add(pisteTeksti);
323    }
324
325    protected override void Update(Time time)
326    {
327        if (nuotit != null && nuotit.Count > 0)
328        {
329            foreach (GameObject nuotti in nuotit)
330            {
331                nuotti.Y -= 1 * nuottienTippumisnopeus;
332            }
333        }
334        base.Update(time);
335    }
336
337}
338
Note: See TracBrowser for help on using the repository browser.