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

Revision 4686, 15.7 KB checked in by alraniko, 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 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   
24    Explosion rajahdys;
25
26    Vector nopeusYlos = new Vector(0, 140);
27    Vector nopeusAlas = new Vector(0, -140);
28    Vector nopeusOikea = new Vector(140, 0);
29    Vector nopeusVasen = new Vector(-140, 0);
30
31    Image standardiPalaKuva = LoadImage("Standard");
32    Image vihuKuva = LoadImage("Vihu");
33    Image vaaSinSwitchKuva = LoadImage("Switch");
34    Image tyonBlockKuva = LoadImage("Boulder");
35    Image tyonTuhoKuva = LoadImage("Boulder Hole");
36    Image vaaSinBlockKuva = LoadImage("Blue Block");
37    Image kolikkoKuva = LoadImage("Coin");
38    Image pelaajaKuva = LoadImage("Mushroom");
39    Image maaliKuva = LoadImage("Goal");
40    Image kolikkoBlockKuva = LoadImage("Coin Block");
41
42    //X = StandardiPala
43    //P = Pelaaja
44    //C = Kolikko
45    //Luku = Luku + 2 oikealle liikkuva vihollinen
46    //Nappaimistön ylarivi (ei P) = Kirjaimen ylapuolella oleva luku + 2 alas liikkuva vihollinen
47    //0 = Liikkumaton vihollinen
48    //B = Kolikkoblock
49    //M = Maali
50    //A = Vaaleansiniblock
51    //S = Vaaleasiniswitch
52    //N = Tyonnettava block
53    //V = Tyonblockin tuhokohde
54
55    static String[] kenttaYksi = {
56                "XXXXXXXXXXXXXXXXXXXXX",
57                "XS Q Q     X1  X2 W X",
58                "X X   X2   X        X",
59                "X X   CXCXXCX   X   X",
60                "XCXXXXXCX5      XX CX",
61                "X5      XCX3    XXXXX",
62                "X XCX  XXXX3    X QCX",
63                "X  XX XCXWX X   X  XX",
64                "XX X  X R   X   X  CX",
65                "XE    X    X    X XXX",
66                "X   X X   CX2   X CRX",
67                "X  X  X  XXXX  XXXX X",
68                "X X  X    XXX X     X",
69                "X X X             X X",
70                "XXX X XXXXX  X    X X",
71                "X6       X4     XXX X",
72                "XAX X CXXXXXX XXXXCXX",
73                "XBX  XXQ Q  X    Q CX",
74                "X X1  X   X XCX X XXX",
75                "XMXC      XCXXC    PX",
76                "XXXXXXXXXXXXXXXXXXXXX",
77                };
78
79   
80    static int ruudunLeveys = 1000 / kenttaYksi[0].Length;
81    static int ruudunKorkeus = 1000 / kenttaYksi.Length;
82
83    static String[] kenttaKaksi = {
84                "XXXXXXXXXXXXXXXXXXXXX",
85                "X WXXE CX           X",
86                "X  C  XXX2   XXXXXX X",
87                "X  XX XX  XXXCYXXCE X",
88                "X   X XX X A X XXX  X",
89                "XXX X CX X1  X      X",
90                "XYX  X     XCX      X",
91                "X CX X     XXX   X  X",
92                "X XX XXXXX  X   XXX X",
93                "X  X Q   XX X  XX1  X",
94                "X XX  XC  X    CXX  X",
95                "X CX   X1  XX XXEEX X",
96                "X XX X X X CX       X",
97                "X    X N X XC     XCX",
98                "XX XCX XXX  X X3    X",
99                "X  CX1  X3    X3    X",
100                "X XXXXVXWXX XXXCXXXXX",
101                "XP  XXSX X3    XCQ  X",
102                "XBX1  XC   X X XX X X",
103                "XMXC     XCXXX      X",
104                "XXXXXXXXXXXXXXXXXXXXX",
105                };
106
107
108    static int ruudunLeveysKaksi = 1000 / kenttaKaksi[0].Length;
109    static int ruudunKorkeusKaksi = 1000 / kenttaKaksi.Length;
110
111    static String[] kenttaKolme = {
112                "XXXXXXXXXXXXXXXXXXXXX",
113                "XXX        XTUXUYX EX",
114                "X1  XXXXXX X     X  X",
115                "XXX X4     X  X     X",
116                "X   X X X XX     X  X",
117                "X XXX  X X    X  X  X",
118                "X X XX3    X     X XX",
119                "X3    XXXXXX  X     X",
120                "XXXXX XX Q QX    XX X",
121                "X3    X     X X X1  X",
122                "X X XX  X    XXX    X",
123                "X2   X XRXXX XXX XXXX",
124                "XCXXXX X X   X Q WXXX",
125                "XX     X Q X XA X XXX",
126                "XX XXXX   X  X      X",
127                "XX3    X  X XE X    X",
128                "XXXX X   XX X XXXXX X",
129                "XP  X1  X Q X  X Q  X",
130                "XBX X X X  XX XX  XXX",
131                "XMX     X     XX   SX",
132                "XXXXXXXXXXXXXXXXXXXXX",
133                };
134
135
136    static int ruudunLeveysKolme = 1000 / kenttaKolme[0].Length;
137    static int ruudunKorkeusKolme = 1000 / kenttaKolme.Length;
138
139    public override void Begin()
140    {
141        // TODO: Kirjoita ohjelmakoodisi tähän
142        // PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
143
144        ruudunLeveys = (int)(Screen.Height / kenttaYksi[0].Length);
145        ruudunKorkeus = (int)(Screen.Height / kenttaYksi.Length);
146
147        ruudunLeveysKaksi = (int)(Screen.Height / kenttaKaksi[0].Length);
148        ruudunKorkeusKaksi = (int)(Screen.Height / kenttaKaksi.Length);
149
150        ruudunLeveysKolme = (int)(Screen.Height / kenttaKolme[0].Length);
151        ruudunKorkeusKolme = (int)(Screen.Height / kenttaKolme.Length);
152
153        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
154        Level.BackgroundColor = Color.Black;
155
156        LuoKolikkoLaskuri();
157        LuoLevelLaskuri();
158        SeuraavaKentta();
159    }
160
161    public void Ohjaus()
162    {
163        Keyboard.Listen(Key.Up, ButtonState.Down, AsetaNopeus, null, pelaaja, nopeusYlos);
164        Keyboard.Listen(Key.Up, ButtonState.Released, AsetaNopeus, null, pelaaja, Vector.Zero);
165        Keyboard.Listen(Key.Down, ButtonState.Down, AsetaNopeus, null, pelaaja, nopeusAlas);
166        Keyboard.Listen(Key.Down, ButtonState.Released, AsetaNopeus, null, pelaaja, Vector.Zero);
167
168        Keyboard.Listen(Key.Right, ButtonState.Down, AsetaNopeus, null, pelaaja, nopeusOikea);
169        Keyboard.Listen(Key.Right, ButtonState.Released, AsetaNopeus, null, pelaaja, Vector.Zero);
170        Keyboard.Listen(Key.Left, ButtonState.Down, AsetaNopeus, null, pelaaja, nopeusVasen);
171        Keyboard.Listen(Key.Left, ButtonState.Released, AsetaNopeus, null, pelaaja, Vector.Zero);
172    }
173
174    public void LuoMaailma(String [] kentta)
175    {
176
177        TileMap tiles = TileMap.FromStringArray(kentta);
178        tiles.SetTileMethod('X', LuoStandardiPala);
179        tiles.SetTileMethod('P', LuoPelaaja);
180        tiles.SetTileMethod('C', LuoKolikko);
181        tiles.SetTileMethod('B', LuoKolikkoBlock);
182        tiles.SetTileMethod('M', LuoMaali);
183        tiles.SetTileMethod('A', LuoVaaSinBlock);
184        tiles.SetTileMethod('S', LuoVaaSinSwitch);
185        tiles.SetTileMethod('N', LuoTyonBlock);
186        tiles.SetTileMethod('V', LuoTyonTuho);
187        tiles.SetTileMethod('1', LuoVihu, 120.0, 0.0);
188        tiles.SetTileMethod('2', LuoVihu, 170.0, 0.0);
189        tiles.SetTileMethod('3', LuoVihu, 230.0, 0.0);
190        tiles.SetTileMethod('4', LuoVihu, 290.0, 0.0);
191        tiles.SetTileMethod('5', LuoVihu, 350.0, 0.0);
192        tiles.SetTileMethod('6', LuoVihu, 400.0, 0.0);
193        tiles.SetTileMethod('7', LuoVihu, 450.0, 0.0);
194        tiles.SetTileMethod('8', LuoVihu, 510.0, 0.0);
195        tiles.SetTileMethod('9', LuoVihu, 570.0, 0.0);
196        tiles.SetTileMethod('Q', LuoVihu, 0.0, 120.0);
197        tiles.SetTileMethod('W', LuoVihu, 0.0, 170.0);
198        tiles.SetTileMethod('E', LuoVihu, 0.0, 230.0);
199        tiles.SetTileMethod('R', LuoVihu, 0.0, 290.0);
200        tiles.SetTileMethod('T', LuoVihu, 0.0, 350.0);
201        tiles.SetTileMethod('Y', LuoVihu, 0.0, 400.0);
202        tiles.SetTileMethod('U', LuoVihu, 0.0, 450.0);
203        tiles.SetTileMethod('I', LuoVihu, 0.0, 515.0);
204        tiles.SetTileMethod('O', LuoVihu, 0.0, 570.0);
205        tiles.SetTileMethod('0', LuoVihu, 0.0, 0.0);
206
207        /*tiles.SetTileMethod('1', LuoVihu, 100.0, 0.0);
208        tiles.SetTileMethod('2', LuoVihu, 150.0, 0.0);
209        tiles.SetTileMethod('3', LuoVihu, 200.0, 0.0);
210        tiles.SetTileMethod('4', LuoVihu, 240.0, 0.0);
211        tiles.SetTileMethod('5', LuoVihu, 390.0, 0.0);
212        tiles.SetTileMethod('6', LuoVihu, 340.0, 0.0);
213        tiles.SetTileMethod('7', LuoVihu, 390.0, 0.0);
214        tiles.SetTileMethod('8', LuoVihu, 435.0, 0.0);
215        tiles.SetTileMethod('9', LuoVihu, 480.0, 0.0);
216        tiles.SetTileMethod('Q', LuoVihu, 0.0, 100.0);
217        tiles.SetTileMethod('W', LuoVihu, 0.0, 150.0);
218        tiles.SetTileMethod('E', LuoVihu, 0.0, 200.0);
219        tiles.SetTileMethod('R', LuoVihu, 0.0, 240.0);
220        tiles.SetTileMethod('T', LuoVihu, 0.0, 290.0);
221        tiles.SetTileMethod('Y', LuoVihu, 0.0, 340.0);
222        tiles.SetTileMethod('U', LuoVihu, 0.0, 390.0);
223        tiles.SetTileMethod('I', LuoVihu, 0.0, 435.0);
224        tiles.SetTileMethod('O', LuoVihu, 0.0, 480.0);
225        tiles.SetTileMethod('0', LuoVihu, 0.0, 0.0);*/
226
227        tiles.Execute(ruudunLeveys, ruudunKorkeus);
228        Ohjaus();
229    }
230
231    private void SeuraavaKentta()
232    {
233        ClearGameObjects();
234        if (levelLaskuri.Value == 0)
235        {
236            LuoMaailma(kenttaYksi);
237        }
238
239        else if (levelLaskuri.Value == 1)
240        {
241            LuoMaailma(kenttaKaksi);
242        }
243
244        else if (levelLaskuri.Value == 2)
245        {
246            LuoMaailma(kenttaKolme);
247            kolikkoLaskuri.MaxValue = 1;
248        }
249    }
250
251    public void LuoKolikkoLaskuri()
252    {
253        kolikkoLaskuri = new IntMeter(0);
254        kolikkoLaskuri.MaxValue = 100;
255    }
256
257    public void LuoLevelLaskuri()
258    {
259        levelLaskuri = new IntMeter(2);
260        levelLaskuri.MaxValue = 10;
261    }
262
263    public void LuoStandardiPala(Vector paikka, double ruudunLeveys, double ruudunKorkeus)
264    {
265        PhysicsObject standardiPala = PhysicsObject.CreateStaticObject(ruudunLeveys, ruudunKorkeus);
266        standardiPala.Position = paikka;
267        standardiPala.Restitution = 0.0;
268        standardiPala.Image = standardiPalaKuva;
269        Add(standardiPala);
270    }
271
272    public void LuoPelaaja(Vector paikka, double ruudunLeveys, double ruudunKorkeus)
273    {
274        pelaaja = new PhysicsObject(ruudunLeveys / 1.6, ruudunKorkeus / 1.6);
275        pelaaja.Position = paikka;
276        pelaaja.Shape = Shape.Circle;
277        pelaaja.CanRotate = false;
278        pelaaja.Tag = "pelaaja";
279        pelaaja.Restitution = 0.0;
280        pelaaja.Image = pelaajaKuva;
281        Add(pelaaja);
282    }
283
284    public void LuoKolikko(Vector paikka, double ruudunLeveys, double ruudunKorkeus)
285    {
286        kolikko = PhysicsObject.CreateStaticObject(ruudunLeveys / 2, ruudunKorkeus / 2);
287        kolikko.Image = kolikkoKuva;
288        kolikko.Shape = Shape.Circle;
289        kolikko.Position = paikka;
290        kolikko.Restitution = 0.0;
291        Add(kolikko);
292        AddCollisionHandler(kolikko, "pelaaja", KerasitKolikon);
293    }
294
295    public void LuoKolikkoBlock(Vector paikka, double ruudunLeveys, double ruudunKorkeus)
296    {
297        kolikkoBlock = PhysicsObject.CreateStaticObject(ruudunLeveys, ruudunKorkeus);
298        kolikkoBlock.Image = kolikkoBlockKuva;
299        kolikkoBlock.Position = paikka;
300        kolikkoBlock.Restitution = 0.0;
301        Add(kolikkoBlock);
302    }
303
304    public void LuoMaali(Vector paikka, double ruudunLeveys, double ruudunKorkeus)
305    {
306        maali = PhysicsObject.CreateStaticObject(ruudunLeveys, ruudunKorkeus);
307        maali.Image = maaliKuva;
308        maali.Position = paikka;
309        maali.Restitution = 0.0;
310        Add(maali);
311        AddCollisionHandler(maali, "pelaaja", TulitMaaliin);
312    }
313
314    public void LuoTyonBlock(Vector paikka, double ruudunLeveys, double ruudunKorkeus)
315    {
316        tyonBlock = new PhysicsObject(ruudunLeveys, ruudunKorkeus, Shape.Circle);
317        tyonBlock.Position = paikka;
318        tyonBlock.Restitution = 0.0;
319        tyonBlock.CanRotate = false;
320        tyonBlock.Tag = "tyonBlock";
321        tyonBlock.Image = tyonBlockKuva;
322        Add(tyonBlock);
323        AddCollisionHandler(tyonBlock, "vihu", vihuKuoli);
324    }
325
326    public void LuoTyonTuho(Vector paikka, double ruudunLeveys, double ruudunKorkeus)
327    {
328        tyonTuho = PhysicsObject.CreateStaticObject(ruudunLeveys, ruudunKorkeus);
329        tyonTuho.Position = paikka;
330        tyonTuho.Restitution = 0.0;
331        tyonTuho.Image = tyonTuhoKuva;
332        Add(tyonTuho);
333        AddCollisionHandler(tyonTuho, "tyonBlock", TyoTormasi);
334    }
335
336    public void LuoVaaSinBlock(Vector paikka, double ruudunLeveys, double ruudunKorkeus)
337    {
338        vaaSinBlock = PhysicsObject.CreateStaticObject(ruudunLeveys, ruudunKorkeus);
339        vaaSinBlock.Position = paikka;
340        vaaSinBlock.Restitution = 0.0;
341        vaaSinBlock.Image = vaaSinBlockKuva;
342        Add(vaaSinBlock);
343    }
344
345    public void LuoVaaSinSwitch(Vector paikka, double ruudunLeveys, double ruudunKorkeus)
346    {
347        vaaSinSwitch = PhysicsObject.CreateStaticObject(ruudunLeveys, ruudunKorkeus);
348        vaaSinSwitch.Position = paikka;
349        vaaSinSwitch.Restitution = 0.0;
350        Add(vaaSinSwitch);
351        vaaSinSwitch.Image = vaaSinSwitchKuva;
352        AddCollisionHandler(vaaSinSwitch, "pelaaja", OsuitVaaSinSwitch);
353    }
354
355    void TyoTormasi(PhysicsObject tormaaja, PhysicsObject kohde)
356    {
357        tormaaja.Destroy();
358        kohde.Destroy();
359    }
360
361    void OsuitVaaSinSwitch(PhysicsObject tormaaja, PhysicsObject pelaaja)
362    {
363        vaaSinSwitch.Destroy();
364        vaaSinBlock.Destroy();
365    }
366 
367    void KerasitKolikon(PhysicsObject kolikko, PhysicsObject pelaaja)
368    {
369        kolikko.Destroy();
370        kolikkoLaskuri.Value += 1;
371
372        if (kolikkoLaskuri.Value == 20)
373        {
374            kolikkoBlock.Destroy();
375            kolikkoLaskuri.Reset();
376        }
377
378        else if(levelLaskuri.Value == 2 && kolikkoLaskuri.Value == 1)
379        {
380            kolikkoBlock.Destroy();
381            kolikkoLaskuri.Reset();
382        }
383
384    }
385
386    void Kuolit(PhysicsObject tormaaja, PhysicsObject pelaaja)
387    {
388        pelaaja.Destroy();
389        kolikkoLaskuri.Reset();
390        SeuraavaKentta();
391
392        rajahdys = new Explosion(75);
393        rajahdys.Position = pelaaja.Position;
394        rajahdys.UseShockWave = false;
395        Add(rajahdys);
396    }
397
398    void vihuKuoli(PhysicsObject tormaaja, PhysicsObject kohde)
399    {
400        kohde.Destroy();
401
402        rajahdys = new Explosion(75);
403        rajahdys.Position = kohde.Position;
404        rajahdys.UseShockWave = false;
405        Add(rajahdys);
406    }
407
408    void TulitMaaliin(PhysicsObject tormaaja, PhysicsObject pelaaja)
409    {
410        pelaaja.Destroy();
411        levelLaskuri.Value += 1;
412
413        SeuraavaKentta();
414    }
415
416    public void AsetaNopeus(PhysicsObject pelaaja, Vector nopeus)
417    {
418        pelaaja.Velocity = nopeus;
419    }
420
421    public void LuoVihu(Vector paikka, double ruudunLeveys, double ruudunKorkeus, double r, double d)
422    {
423        vihu = new PhysicsObject(ruudunLeveys / 1.3, ruudunKorkeus / 1.3);
424        vihu.Position = paikka;
425        vihu.Shape = Shape.Circle;
426        vihu.Image = vihuKuva;
427        vihu.Tag = "vihu";
428        vihu.CanRotate = false;
429        Add(vihu);
430        AddCollisionHandler(vihu, "pelaaja", Kuolit);
431        LuoVihuAivot(paikka, r, d);
432    }
433
434    public void LuoVihuAivot(Vector paikka, double r, double d)
435    {
436        List<Vector> vihuPolku = new List<Vector>();
437        vihuPolku.Add(new Vector(paikka.X + r, paikka.Y));
438        vihuPolku.Add(new Vector(paikka.X, paikka.Y - d));
439
440        PathFollowerBrain pfb = new PathFollowerBrain();
441        pfb.Path = vihuPolku;
442        vihu.Brain = pfb;
443        pfb.Active = true;
444        pfb.Loop = true;
445        pfb.Speed = 150;
446    }
447}
Note: See TracBrowser for help on using the repository browser.