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

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