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

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