source: 2015/30/OonaH/Aurinkomyrsky/Aurinkomyrsky/Aurinkomyrsky/Aurinkomyrsky.cs @ 6986

Revision 6986, 11.9 KB checked in by oomahutt, 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;
8
9public class Aurinkomyrsky : PhysicsGame
10{
11    const int RUUDUN_KOKO = 20;
12
13    PlatformCharacter pelaaja1;
14    IntMeter pisteLaskuri;
15
16    Image pelaajanKuva = LoadImage("alus4");
17    Image tahtiKuva = LoadImage("tahti");
18    Image myrskynKuva = LoadImage("myrsky2");
19    Image planeettaKuva = LoadImage("Codis");
20    Image lipunKuva = LoadImage("lippu");
21
22    Image Mercury = LoadImage("mercury");
23    Image Venus = LoadImage("venus");
24    Image Earth = LoadImage("earth");
25    Image Mars = LoadImage("mars");
26    Image Jupiter = LoadImage("jupiter");
27    Image Saturn = LoadImage("saturn");
28    Image Uranus = LoadImage("uranus");
29    Image Neptune = LoadImage("neptune");
30
31    Image aukkoKuva = LoadImage("aukko2");
32
33    Image laatikko = LoadImage("laatikko3");
34
35    Vector nopeusYlos = new Vector(0, 200);
36    Vector nopeusVasen = new Vector(-200, 0);
37    Vector nopeusOikea = new Vector(200, 0);
38    Vector nopeusAlas = new Vector(0,-200);
39
40    Image[] aukkoKuvat = LoadImages("aukko2", "aukkoVenus", "aukkoearth", "alien", "aukkojupiter","aukkosaturn", "aukkouranus", "aukkoneptune");
41    Image[] laatikkoKuvat = LoadImages("laatikko3", "laatikkovenus", "laatikkoearth", "laatikkomars", "laatikkojupiter", "laatikkosaturn", "laatikkouranus", "laatikkoneptune");
42    SoundEffect maaliAani = LoadSoundEffect("maali");
43    List<Label> valikonKohdat;
44    List<Label> planeetat = new List<Label>();
45    Font Fontti = LoadFont("fontti1");
46    Font Fontti2 = LoadFont("fontti2");
47    int kenttanumero = 1;
48
49    EasyHighScore topLista = new EasyHighScore();
50
51    public override void Begin()
52    {
53        Valikko();
54    }
55
56    void AloitaKentta()
57    {
58        ClearAll();
59
60        if (kenttanumero == 1) LuoKentta("kentta1");
61        else if (kenttanumero == 2) LuoKentta("kentta2");
62        else if (kenttanumero == 3) LuoKentta("kentta3");
63        else if (kenttanumero == 4) LuoKentta("kentta4");
64        else if (kenttanumero == 5) LuoKentta("kentta5");
65        else if (kenttanumero == 6) LuoKentta("kentta6");
66        else if (kenttanumero == 7) LuoKentta("kentta7");
67        else if (kenttanumero == 8) LuoKentta("kentta8");
68        else if (kenttanumero > 8) Valikko();
69    }
70
71    void Alku(Window sender)
72    {
73        Valikko();
74    }
75
76    void TeePlaneetta(double x, double y, Image kuva, double halkaisija, int numero, string nimi)
77    {
78        Label planeetta = new Label(halkaisija, halkaisija);
79        planeetta.Image = kuva;
80        planeetta.X = x;
81        planeetta.Y = y;
82        Add(planeetta);
83
84        Label teksti = new Label(nimi);
85        teksti.X = x;
86        teksti.Y = y + halkaisija*0.5 + 20;
87        teksti.TextColor = Color.White;
88        teksti.Font = Fontti2;
89        Add(teksti);
90        planeetat.Add(teksti);
91
92        Mouse.ListenOn(planeetta, MouseButton.Left, ButtonState.Pressed, PlaneettaValittu, null, numero);
93        Mouse.ListenMovement(1.0, PlaneetoissaLiikkuminen, null);
94    }
95
96    void PlaneetoissaLiikkuminen(AnalogState hiiri)
97    {
98        foreach (Label kohta in planeetat)
99        {
100            if (Mouse.IsCursorOn(kohta))
101            {
102                kohta.TextColor = Color.Wheat;
103            }
104            else
105            {
106                kohta.TextColor = Color.White;
107            }
108        }
109    }
110
111    void PlaneettaValittu(int numero)
112    {
113        kenttanumero = numero;
114        Aloita();
115    }
116
117    void Valikko()
118    {
119        ClearAll();
120        Camera.Reset();
121        PlaneettojenLuominen();
122
123        Mouse.IsCursorVisible = true;
124        Color vari = Color.White;
125
126        valikonKohdat = new List<Label>();
127
128        Label kohta2 = new Label("Parhaat pisteet");
129        kohta2.Position = new Vector(0, 40);
130        kohta2.TextColor = vari;
131        kohta2.Font = Fontti;
132        valikonKohdat.Add(kohta2);
133
134        Label kohta3 = new Label("Lopeta peli");
135        kohta3.Position = new Vector(0, -40);
136        kohta3.TextColor = vari;
137        kohta3.Font = Fontti;
138        valikonKohdat.Add(kohta3);
139
140        foreach (Label valikonKohta in valikonKohdat)
141        {
142            Add(valikonKohta);
143        }
144
145        Mouse.ListenOn(kohta2, MouseButton.Left, ButtonState.Pressed, ParhaatPisteet, null);
146        Mouse.ListenOn(kohta3, MouseButton.Left, ButtonState.Pressed, Exit, null);
147
148        Mouse.ListenMovement(1.0, ValikossaLiikkuminen, null);
149
150    }
151
152    void ParhaatPisteet()
153    {
154        topLista.EnterAndShow(pisteLaskuri.Value);
155        topLista.HighScoreWindow.Closed += Alku;
156    }
157
158    void ValikossaLiikkuminen(AnalogState hiiri)
159    {
160        foreach (Label kohta in valikonKohdat)
161        {
162            if (Mouse.IsCursorOn(kohta))
163            {
164                kohta.TextColor = Color.Wheat;
165            }
166            else
167            {
168                kohta.TextColor = Color.White;
169            }
170         }
171    }
172
173    void PlaneettojenLuominen()
174    {
175        Level.Background.CreateStars();
176
177        TeePlaneetta(0, 400, Mercury, 50, 1, "Mercury");
178        TeePlaneetta(300, 300, Venus, 70, 2, "Venus");
179        TeePlaneetta(400, 50, Earth, 100, 3, "Earth");
180        TeePlaneetta(350, -200, Mars, 100, 4,"Mars");
181        TeePlaneetta(0, -350, Jupiter, 200, 5, "Jupiter");
182        TeePlaneetta(-350, -200, Saturn, 170, 6, "Saturn");
183        TeePlaneetta(-370, 50, Uranus, 120, 7, "Uranus");
184        TeePlaneetta(-250, 300, Neptune, 120, 8, "Neptune");
185    }
186
187    void Aloita()
188    {
189        ClearAll();
190        AloitaKentta();
191        LuoLaskuri();
192        LisaaNappaimet();
193
194
195        Camera.Follow(pelaaja1);
196        Camera.ZoomFactor = 1.2;
197        Camera.StayInLevel = true;
198    }
199
200    void LuoKentta(string kenttaTiedosto)
201    {
202        TileMap kentta = TileMap.FromLevelAsset(kenttaTiedosto);
203        kentta.SetTileMethod('#', LisaaTaso);
204        kentta.SetTileMethod('*', LisaaTahti);
205        kentta.SetTileMethod('A', LisaaPelaaja);
206        kentta.SetTileMethod('a', LisaaAukko);
207        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
208
209        Level.CreateBorders();
210        Level.Background.CreateStars();
211        Level.Background.TextureWrapSize = new Vector(3, 1);
212
213        PhysicsObject aurinko = PhysicsObject.CreateStaticObject(50,500);
214        aurinko.Image = myrskynKuva;
215        aurinko.X = Level.Left;
216        aurinko.Velocity = new Vector(40, 0);
217        aurinko.Tag = "aurinko";
218        Add(aurinko);
219
220        PhysicsObject planeetta = PhysicsObject.CreateStaticObject(100, 500);
221        planeetta.Image = planeettaKuva;
222        planeetta.X = Level.Right;
223        planeetta.Tag = "planeetta";
224        Add(planeetta);
225
226        PhysicsObject lippu = PhysicsObject.CreateStaticObject(50, 30);
227        lippu.Image = lipunKuva;
228        lippu.Tag = "lippu";
229        lippu.X = Level.Right - 75;
230        Add(lippu);
231
232        Timer kameraAjastin = new Timer();
233        kameraAjastin.Interval = 0.025;
234        kameraAjastin.Timeout += KameranSiirto;
235        kameraAjastin.Start();
236    }
237
238    void KameranSiirto()
239    {
240        Camera.StopFollowing();
241        Camera.X += 1;
242    }
243
244
245    void LisaaTaso(Vector paikka, double leveys, double korkeus)
246    {
247        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
248        taso.Position = paikka;
249
250        // Asettaa tavallisen kuvan, mutta korjaa sen heti
251        taso.Image = laatikko;
252        // Asettaa oikean kuvan
253        if (kenttanumero - 1 < laatikkoKuvat.Length)
254        {
255            taso.Image = laatikkoKuvat[kenttanumero - 1];
256        }
257       
258        Add(taso);
259
260    }
261
262    void LisaaTahti(Vector paikka, double leveys, double korkeus)
263    {
264        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys, korkeus);
265        tahti.IgnoresCollisionResponse = true;
266        tahti.Position = paikka;
267        tahti.Image = tahtiKuva;
268        tahti.Tag = "tahti";
269        Add(tahti);
270    }
271
272    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
273    {
274        pelaaja1 = new PlatformCharacter(leveys -5, korkeus -3);
275        pelaaja1.Position = paikka;
276        pelaaja1.Image = pelaajanKuva;
277        AddCollisionHandler(pelaaja1, "tahti", TormaaTahteen);
278        AddCollisionHandler(pelaaja1, "aukko", TormaaMustaanAukkoon);
279        AddCollisionHandler(pelaaja1, "aurinko", TormaaAurinkoon);
280        AddCollisionHandler(pelaaja1, "planeetta", PaasiMaaliin);
281        Add(pelaaja1);
282    }
283
284    void TormaaMustaanAukkoon(PhysicsObject hahmo, PhysicsObject aukko)
285    {
286        Explosion rajahdys = new Explosion(3000);
287        rajahdys.Position = pelaaja1.Position;
288
289        rajahdys.Image = aukkoKuva;
290
291        if (kenttanumero - 1 < aukkoKuvat.Length)
292        {
293            rajahdys.Image = aukkoKuvat[kenttanumero - 1];
294        }
295
296        Add(rajahdys);
297        pelaaja1.Destroy();
298        Timer.SingleShot(5.0, LisataanPisteet);
299    }
300
301    void TormaaAurinkoon(PhysicsObject hahmo, PhysicsObject aukko)
302    {
303        Explosion rajahdys = new Explosion(3000);
304        rajahdys.Position = pelaaja1.Position;
305        Add(rajahdys);
306        pelaaja1.Destroy();
307        Timer.SingleShot(5.0, LisataanPisteet);
308    }
309
310    void LisataanPisteet()
311    {
312        ClearAll();
313        Level.Background.CreateStars();
314        topLista.EnterAndShow(pisteLaskuri.Value);
315        topLista.HighScoreWindow.Closed += Alku;
316       
317    }
318
319    void LisaaAukko(Vector paikka, double leveys, double korkeus)
320    {
321        PhysicsObject aukko = PhysicsObject.CreateStaticObject(leveys, korkeus);
322        aukko.IgnoresCollisionResponse = true;
323        aukko.Position = paikka;
324        aukko.Image = aukkoKuva;
325        aukko.Tag = "aukko";
326
327        if (kenttanumero - 1 < aukkoKuvat.Length)
328        {
329            aukko.Image = aukkoKuvat[kenttanumero - 1];
330        }
331
332        Add(aukko);
333    }
334
335    void LisaaNappaimet()
336    {
337        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
338        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Valikko, "Lopeta peli");
339
340        Keyboard.Listen(Key.Left, ButtonState.Down, AsetaNopeus, "Liikkuu vasemmalle", pelaaja1, nopeusVasen);
341        Keyboard.Listen(Key.Right, ButtonState.Down, AsetaNopeus, "Liikkuu vasemmalle", pelaaja1, nopeusOikea);
342        Keyboard.Listen(Key.Up, ButtonState.Down, AsetaNopeus, "Liikkuu ylös", pelaaja1, nopeusYlos);
343        Keyboard.Listen(Key.Down, ButtonState.Down, AsetaNopeus, "Liikkuu alas", pelaaja1, nopeusAlas);
344    }
345
346    void AsetaNopeus(PhysicsObject alus, Vector nopeus)
347    {
348        alus.Velocity = nopeus;
349        alus.Angle = nopeus.Angle;
350
351        if (alus.Right > Camera.X + Camera.FollowXMargin/2)
352        {
353            alus.Velocity = Vector.Zero;
354            return;
355        }
356    }
357
358    void TormaaTahteen(PhysicsObject hahmo, PhysicsObject tahti)
359    {
360        maaliAani.Play();
361        tahti.Destroy();
362        pisteLaskuri.Value += 100;
363    }
364
365    void PaasiMaaliin(PhysicsObject hahmo, PhysicsObject maali)
366    {
367        ClearAll();
368        Level.Background.CreateStars();
369
370        Label loppu = new Label();
371        loppu.X = 0;
372        loppu.Y = 0;
373
374        loppu.TextColor = Color.White;
375        loppu.Color = Color.Transparent;
376        loppu.IntFormatString = "Pääsit maaliin";
377
378        Add(loppu);
379        kenttanumero++;
380        Timer.SingleShot(3.0, Valikko);
381       
382
383    }
384
385    void LuoLaskuri()
386    {
387        pisteLaskuri = new IntMeter(0);
388
389        Label pisteNaytto = new Label();
390        pisteNaytto.X -= (Window.Width/2-200);
391        pisteNaytto.Y += (Window.Height/2-50);
392       
393        pisteNaytto.TextColor = Color.White;
394        pisteNaytto.Color = Color.Transparent;
395        pisteNaytto.BindTo(pisteLaskuri);
396        pisteNaytto.IntFormatString = "Pisteitä: {0:D1}";
397
398        Add(pisteNaytto);
399    }
400}
Note: See TracBrowser for help on using the repository browser.