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

Revision 4711, 15.2 KB checked in by alraniko, 6 years ago (diff)

Talletus.

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