source: 2013/30/AleksiK/Hazy Maze Game/Hazy Maze Game/Hazy Maze Game/Hazy_Maze_Game.cs @ 10335

Revision 4723, 15.7 KB checked in by alraniko, 6 years ago (diff)

Talletus.

Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9public class Hazy_Maze_Game : PhysicsGame
10{
11    PhysicsObject pelaaja;
12    PhysicsObject kolikko;
13    PhysicsObject vihu;
14    PhysicsObject kolikkoBlock;
15    PhysicsObject maali;
16    PhysicsObject vaaSinBlock;
17    PhysicsObject vaaSinSwitch;
18    PhysicsObject tyonBlock;
19    PhysicsObject tyonTuho;
20
21    IntMeter kolikkoLaskuri;
22    IntMeter levelLaskuri;
23    IntMeter elamaLaskuri;
24   
25    Explosion rajahdys;
26    Explosion rajahdyss;
27
28    Vector nopeusYlos = new Vector(0, 90);
29    Vector nopeusAlas = new Vector(0, -90);
30    Vector nopeusOikea = new Vector(90, 0);
31    Vector nopeusVasen = new Vector(-90, 0);
32
33    Image standardiPalaKuva = LoadImage("Standard");
34    Image vihuKuva = LoadImage("Vihu");
35    Image vaaSinSwitchKuva = LoadImage("Switch");
36    Image tyonBlockKuva = LoadImage("Boulder");
37    Image tyonTuhoKuva = LoadImage("Boulder Hole");
38    Image vaaSinBlockKuva = LoadImage("Blue Block");
39    Image kolikkoKuva = LoadImage("Coin");
40    Image pelaajaKuva = LoadImage("Mushroom");
41    Image maaliKuva = LoadImage("Goal");
42    Image kolikkoBlockKuva = LoadImage("Coin Block");
43
44    //X = StandardiPala
45    //P = Pelaaja
46    //C = Kolikko
47    //Luku = Luku + 2 oikealle liikkuva vihollinen
48    //Nappaimistön ylarivi (ei P) = Kirjaimen ylapuolella oleva luku + 2 alas liikkuva vihollinen
49    //0 = Liikkumaton vihollinen
50    //B = Kolikkoblock
51    //M = Maali
52    //A = Vaaleansiniblock
53    //S = Vaaleasiniswitch
54    //N = Tyonnettava block
55    //V = Tyonblockin tuhokohde
56
57    static String[] kenttaYksi = {
58                "XXXXXXXXXXXXXXXXXXXXX",
59                "XS 2 2     X1  X1 2 X",
60                "X X   X1   X        X",
61                "X X   CXCXXCX   X   X",
62                "XCXXXXXCX1      XX CX",
63                "X1      XCX1    XXXXX",
64                "X XCX  XXXX1    X 2CX",
65                "X  XX XCX2X X   X  XX",
66                "XX X  X 2   X   X  CX",
67                "X2    X    X    X XXX",
68                "X   X X   CX1   X C2X",
69                "X  X  X  XXXX  XXXX X",
70                "X X  X    XXX X     X",
71                "X X X             X X",
72                "XXX X XXXXX  X    X X",
73                "X1       X1     XXX X",
74                "XAX X CXXXXXX XXXXCXX",
75                "XBX  XX2 2  X    2 CX",
76                "X X1  X   X XCX X XXX",
77                "XMXC      XCXXC    PX",
78                "XXXXXXXXXXXXXXXXXXXXX",
79                };
80
81   
82    static int ruudunLeveys = 1000 / kenttaYksi[0].Length;
83    static int ruudunKorkeus = 1000 / kenttaYksi.Length;
84
85    static String[] kenttaKaksi = {
86                "XXXXXXXXXXXXXXXXXXXXX",
87                "X 2XX2 CX           X",
88                "X  C  XXX1   XXXXXX X",
89                "X  XX XX  XXXC2XXC2 X",
90                "X   X XX X A X XXX  X",
91                "XXX X CX X1  X      X",
92                "X2X  X     XCX      X",
93                "X CX X     XXX   X  X",
94                "X XX XXXXX  X   XXX X",
95                "X  X 2   XX X  XX1  X",
96                "X XX  XC  X    CXX  X",
97                "X CX   X1  XX XX22X X",
98                "X XX X X X CX     XCX",
99                "X    X N X XC     2 X",
100                "XX XCX XXX  X X     X",
101                "X  CX1  X1    X    CX",
102                "X XXXXVX2XX XXXXXXXXX",
103                "XP  XXSX X1    XC2  X",
104                "XBX1  XC   X X XX X X",
105                "XMXC     XCXXX      X",
106                "XXXXXXXXXXXXXXXXXXXXX",
107                };
108
109
110    static int ruudunLeveysKaksi = 1000 / kenttaKaksi[0].Length;
111    static int ruudunKorkeusKaksi = 1000 / kenttaKaksi.Length;
112
113    static String[] kenttaKolme = {
114                "XXXXXXXXXXXXXXXXXXXXX",
115                "XXX        X22X22X 2X",
116                "X1  XXXXXX X     X  X",
117                "XXX X1     X  X     X",
118                "X   X X X XX     X  X",
119                "X XXX  X X    X  X  X",
120                "X X XX1    X     X XX",
121                "X1    XXXXXX  X     X",
122                "XXXXX XX 2 2X    XX X",
123                "X1    X     X X X1  X",
124                "X X XX  X    XXX    X",
125                "X1   X X2XXX XXX XXXX",
126                "XCXXXX X X   X 2 2XXX",
127                "XX     X 2 X XA X XXX",
128                "XX XXXX   X  X      X",
129                "XX1    X  X X2 X    X",
130                "XXXX X   XX X XXXXX X",
131                "XP  X1  X 2 X  X 2  X",
132                "XBX X X X  XX XX  XXX",
133                "XMX     X     XX   SX",
134                "XXXXXXXXXXXXXXXXXXXXX",
135                };
136
137
138    static int ruudunLeveysKolme = 1000 / kenttaKolme[0].Length;
139    static int ruudunKorkeusKolme = 1000 / kenttaKolme.Length;
140
141    public override void Begin()
142    {
143        // TODO: Kirjoita ohjelmakoodisi tähän
144        // PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
145
146        ruudunLeveys = (int)(Screen.Height / kenttaYksi[0].Length);
147        ruudunKorkeus = (int)(Screen.Height / kenttaYksi.Length);
148
149        ruudunLeveysKaksi = (int)(Screen.Height / kenttaKaksi[0].Length);
150        ruudunKorkeusKaksi = (int)(Screen.Height / kenttaKaksi.Length);
151
152        ruudunLeveysKolme = (int)(Screen.Height / kenttaKolme[0].Length);
153        ruudunKorkeusKolme = (int)(Screen.Height / kenttaKolme.Length);
154
155        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
156        Level.Background.Color = Color.Black;
157
158        LuoKolikkoLaskuri();
159        LuoLevelLaskuri();
160        SeuraavaKentta();
161        MediaPlayer.Play("Forest Maze");
162        MediaPlayer.IsRepeating = true;
163    }
164
165    public void Ohjaus()
166    {
167        Keyboard.Listen(Key.Up, ButtonState.Down, AsetaNopeus, null, pelaaja, nopeusYlos);
168        Keyboard.Listen(Key.Up, ButtonState.Released, AsetaNopeus, null, pelaaja, Vector.Zero);
169        Keyboard.Listen(Key.Down, ButtonState.Down, AsetaNopeus, null, pelaaja, nopeusAlas);
170        Keyboard.Listen(Key.Down, ButtonState.Released, AsetaNopeus, null, pelaaja, Vector.Zero);
171
172        Keyboard.Listen(Key.Right, ButtonState.Down, AsetaNopeus, null, pelaaja, nopeusOikea);
173        Keyboard.Listen(Key.Right, ButtonState.Released, AsetaNopeus, null, pelaaja, Vector.Zero);
174        Keyboard.Listen(Key.Left, ButtonState.Down, AsetaNopeus, null, pelaaja, nopeusVasen);
175        Keyboard.Listen(Key.Left, ButtonState.Released, AsetaNopeus, null, pelaaja, Vector.Zero);
176    }
177
178    public void LuoMaailma(String [] kentta)
179    {
180
181        TileMap tiles = TileMap.FromStringArray(kentta);
182        tiles.SetTileMethod('X', LuoStandardiPala);
183        tiles.SetTileMethod('P', LuoPelaaja);
184        tiles.SetTileMethod('C', LuoKolikko);
185        tiles.SetTileMethod('B', LuoKolikkoBlock);
186        tiles.SetTileMethod('M', LuoMaali);
187        tiles.SetTileMethod('A', LuoVaaSinBlock);
188        tiles.SetTileMethod('S', LuoVaaSinSwitch);
189        tiles.SetTileMethod('N', LuoTyonBlock);
190        tiles.SetTileMethod('V', LuoTyonTuho);
191        tiles.SetTileMethod('1', LuoVihu, 100.0, 0.0);
192        tiles.SetTileMethod('2', LuoVihu, 0.0, 100.0);
193        tiles.SetTileMethod('3', LuoVihu, 0.0, 0.0);
194        tiles.Execute(ruudunLeveys, ruudunKorkeus);
195        Ohjaus();
196    }
197
198    private void SeuraavaKentta()
199    {
200        ClearGameObjects();
201        if (levelLaskuri.Value == 1)
202        {
203            LuoMaailma(kenttaYksi);
204        }
205
206        else if (levelLaskuri.Value == 2)
207        {
208            LuoMaailma(kenttaKaksi);
209        }
210
211        else if (levelLaskuri.Value == 3)
212        {
213            LuoMaailma(kenttaKolme);
214            kolikkoLaskuri.MaxValue = 1;
215        }
216
217        else if (levelLaskuri.Value == 4)
218        {
219            Exit();
220        }
221
222        LuoElamaLaskuri();
223        LuoLevelNaytto();
224    }
225
226    public void LuoKolikkoLaskuri()
227    {
228        kolikkoLaskuri = new IntMeter(0);
229        kolikkoLaskuri.MaxValue = 100;
230    }
231
232    public void LuoLevelLaskuri()
233    {
234        levelLaskuri = new IntMeter(1);
235        levelLaskuri.MaxValue = 10;   
236    }
237
238    public void LuoLevelNaytto()
239    {
240        Label levelNaytto = new Label();
241        levelNaytto.X = Level.Left - ruudunLeveys * 1.5;
242        levelNaytto.Y = Level.Top - ruudunKorkeus * 5;
243        levelNaytto.TextColor = Color.White;
244        levelNaytto.Color = Color.Black;
245        levelNaytto.Title = "Level";
246
247        levelNaytto.BindTo(levelLaskuri);
248        Add(levelNaytto);
249    }
250
251    public void LuoElamaLaskuri()
252    {
253        elamaLaskuri = new IntMeter(1);
254        elamaLaskuri.MaxValue = 5;
255        elamaLaskuri.MinValue = -1;
256
257        Label elamaNaytto = new Label();
258        elamaNaytto.X = Level.Left - ruudunLeveys * 1.5;
259        elamaNaytto.Y = Level.Top - ruudunKorkeus * 4;
260        elamaNaytto.TextColor = Color.White;
261        elamaNaytto.Color = Color.Black;
262        elamaNaytto.Title = "Lives";
263
264        elamaNaytto.BindTo(elamaLaskuri);
265        Add(elamaNaytto);
266    }
267
268    public void LuoStandardiPala(Vector paikka, double ruudunLeveys, double ruudunKorkeus)
269    {
270        PhysicsObject standardiPala = PhysicsObject.CreateStaticObject(ruudunLeveys, ruudunKorkeus);
271        standardiPala.Position = paikka;
272        standardiPala.Restitution = 0.0;
273        standardiPala.Image = standardiPalaKuva;
274        standardiPala.Tag = "standard";
275        Add(standardiPala);
276    }
277
278    public void LuoPelaaja(Vector paikka, double ruudunLeveys, double ruudunKorkeus)
279    {
280        pelaaja = new PhysicsObject(ruudunLeveys / 1.6, ruudunKorkeus / 1.6);
281        pelaaja.Position = paikka;
282        pelaaja.Shape = Shape.Circle;
283        pelaaja.CanRotate = false;
284        pelaaja.Tag = "pelaaja";
285        pelaaja.Restitution = 0.0;
286        pelaaja.Image = pelaajaKuva;
287        Add(pelaaja);
288    }
289
290    public void LuoKolikko(Vector paikka, double ruudunLeveys, double ruudunKorkeus)
291    {
292        kolikko = PhysicsObject.CreateStaticObject(ruudunLeveys / 2, ruudunKorkeus / 2);
293        kolikko.Image = kolikkoKuva;
294        kolikko.Shape = Shape.Circle;
295        kolikko.Position = paikka;
296        kolikko.Restitution = 0.0;
297        Add(kolikko);
298        AddCollisionHandler(kolikko, "pelaaja", KerasitKolikon);
299    }
300
301    public void LuoKolikkoBlock(Vector paikka, double ruudunLeveys, double ruudunKorkeus)
302    {
303        kolikkoBlock = PhysicsObject.CreateStaticObject(ruudunLeveys, ruudunKorkeus);
304        kolikkoBlock.Image = kolikkoBlockKuva;
305        kolikkoBlock.Position = paikka;
306        kolikkoBlock.Restitution = 0.0;
307        Add(kolikkoBlock);
308    }
309
310    public void LuoMaali(Vector paikka, double ruudunLeveys, double ruudunKorkeus)
311    {
312        maali = PhysicsObject.CreateStaticObject(ruudunLeveys, ruudunKorkeus);
313        maali.Image = maaliKuva;
314        maali.Position = paikka;
315        maali.Restitution = 0.0;
316        Add(maali);
317        AddCollisionHandler(maali, "pelaaja", TulitMaaliin);
318    }
319
320    public void LuoTyonBlock(Vector paikka, double ruudunLeveys, double ruudunKorkeus)
321    {
322        tyonBlock = new PhysicsObject(ruudunLeveys, ruudunKorkeus, Shape.Circle);
323        tyonBlock.Position = paikka;
324        tyonBlock.Restitution = 0.0;
325        tyonBlock.CanRotate = false;
326        tyonBlock.Tag = "tyonBlock";
327        tyonBlock.Image = tyonBlockKuva;
328        Add(tyonBlock);
329        AddCollisionHandler(tyonBlock, "vihu", vihuKuoli);
330    }
331
332    public void LuoTyonTuho(Vector paikka, double ruudunLeveys, double ruudunKorkeus)
333    {
334        tyonTuho = PhysicsObject.CreateStaticObject(ruudunLeveys, ruudunKorkeus);
335        tyonTuho.Position = paikka;
336        tyonTuho.Restitution = 0.0;
337        tyonTuho.Image = tyonTuhoKuva;
338        Add(tyonTuho);
339        AddCollisionHandler(tyonTuho, "tyonBlock", TyoTormasi);
340    }
341
342    public void LuoVaaSinBlock(Vector paikka, double ruudunLeveys, double ruudunKorkeus)
343    {
344        vaaSinBlock = PhysicsObject.CreateStaticObject(ruudunLeveys, ruudunKorkeus);
345        vaaSinBlock.Position = paikka;
346        vaaSinBlock.Restitution = 0.0;
347        vaaSinBlock.Image = vaaSinBlockKuva;
348        Add(vaaSinBlock);
349    }
350
351    public void LuoVaaSinSwitch(Vector paikka, double ruudunLeveys, double ruudunKorkeus)
352    {
353        vaaSinSwitch = PhysicsObject.CreateStaticObject(ruudunLeveys, ruudunKorkeus);
354        vaaSinSwitch.Position = paikka;
355        vaaSinSwitch.Restitution = 0.0;
356        Add(vaaSinSwitch);
357        vaaSinSwitch.Image = vaaSinSwitchKuva;
358        AddCollisionHandler(vaaSinSwitch, "pelaaja", OsuitVaaSinSwitch);
359    }
360
361    void TyoTormasi(PhysicsObject tormaaja, PhysicsObject kohde)
362    {
363        tormaaja.Destroy();
364        kohde.Destroy();
365    }
366
367    void OsuitVaaSinSwitch(PhysicsObject tormaaja, PhysicsObject pelaaja)
368    {
369        vaaSinSwitch.Destroy();
370        vaaSinBlock.Destroy();
371    }
372 
373    void KerasitKolikon(PhysicsObject kolikko, PhysicsObject pelaaja)
374    {
375        kolikko.Destroy();
376        kolikkoLaskuri.Value += 1;
377
378        if (kolikkoLaskuri.Value == 20)
379        {
380            kolikkoBlock.Destroy();
381            kolikkoLaskuri.Reset();
382        }
383
384        else if(levelLaskuri.Value == 3 && kolikkoLaskuri.Value == 1)
385        {
386            kolikkoBlock.Destroy();
387            kolikkoLaskuri.Reset();
388        }
389
390    }
391
392    void OtitOsumaa(PhysicsObject tormaaja, PhysicsObject pelaaja)
393    {
394        elamaLaskuri.Value -= 1;
395        tormaaja.Destroy();
396
397        rajahdyss = new Explosion(75);
398        rajahdyss.Position = tormaaja.Position;
399        rajahdyss.UseShockWave = false;
400        Add(rajahdyss);
401
402        if(elamaLaskuri.Value == -1)
403        {
404        pelaaja.Destroy();
405        kolikkoLaskuri.Reset();
406        elamaLaskuri.Reset();
407        SeuraavaKentta();
408
409        rajahdys = new Explosion(75);
410        rajahdys.Position = pelaaja.Position;
411        rajahdys.UseShockWave = false;
412        Add(rajahdys);
413        }
414    }
415
416    void vihuKuoli(PhysicsObject tormaaja, PhysicsObject kohde)
417    {
418        kohde.Destroy();
419
420        rajahdys = new Explosion(75);
421        rajahdys.Position = kohde.Position;
422        rajahdys.UseShockWave = false;
423        Add(rajahdys);
424    }
425
426    void TulitMaaliin(PhysicsObject tormaaja, PhysicsObject pelaaja)
427    {
428        pelaaja.Destroy();
429        levelLaskuri.Value += 1;
430
431        if (elamaLaskuri.Value == 2)
432        {
433            SeuraavaKentta();
434            elamaLaskuri.Value += 2;
435        }
436
437        else if (elamaLaskuri.Value == 3)
438        {
439            SeuraavaKentta();
440            elamaLaskuri.Value += 3;
441        }
442
443        else if (elamaLaskuri.Value == 4)
444        {
445            SeuraavaKentta();
446            elamaLaskuri.Value += 4;
447        }
448
449        else if (elamaLaskuri.Value == 5)
450        {
451            SeuraavaKentta();
452            elamaLaskuri.Value += 4;
453        }
454
455        else
456        {
457            SeuraavaKentta();
458            elamaLaskuri.Value += 1;
459        }
460    }
461
462    public void AsetaNopeus(PhysicsObject pelaaja, Vector nopeus)
463    {
464        pelaaja.Velocity = nopeus;
465    }
466
467    public void LuoVihu(Vector paikka, double ruudunLeveys, double ruudunKorkeus, double r, double d)
468    {
469        vihu = new PhysicsObject(ruudunLeveys / 1.3, ruudunKorkeus / 1.3);
470        vihu.Position = paikka;
471        vihu.Shape = Shape.Circle;
472        vihu.Image = vihuKuva;
473        vihu.Tag = "vihu";
474        vihu.CanRotate = false;
475        Add(vihu);
476        vihu.Velocity = new Vector(r, d);
477        AddCollisionHandler(vihu, "pelaaja", OtitOsumaa);
478        AddCollisionHandler(vihu, "standard", VaihdaSuunta);
479    }
480
481    void VaihdaSuunta(PhysicsObject tormaaja, PhysicsObject standard)
482    {
483        tormaaja.Velocity *= -1;
484    }
485}
Note: See TracBrowser for help on using the repository browser.