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

Revision 4664, 14.5 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   
24    Explosion rajahdys;
25
26    Vector nopeusYlos = new Vector(0, 100);
27    Vector nopeusAlas = new Vector(0, -100);
28    Vector nopeusOikea = new Vector(100, 0);
29    Vector nopeusVasen = new Vector(-100, 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                   X",
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                "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                "X                   X",
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                "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.Background.Color = Color.Black;
155
156        LuoKolikkoLaskuri();
157        LuoLevelLaskuri();
158        SeuraavaKentta();
159        //LuoMaailma();
160    }
161
162    public void Ohjaus()
163    {
164        Keyboard.Listen(Key.Up, ButtonState.Down, AsetaNopeus, null, pelaaja, nopeusYlos);
165        Keyboard.Listen(Key.Up, ButtonState.Released, AsetaNopeus, null, pelaaja, Vector.Zero);
166        Keyboard.Listen(Key.Down, ButtonState.Down, AsetaNopeus, null, pelaaja, nopeusAlas);
167        Keyboard.Listen(Key.Down, ButtonState.Released, AsetaNopeus, null, pelaaja, Vector.Zero);
168
169        Keyboard.Listen(Key.Right, ButtonState.Down, AsetaNopeus, null, pelaaja, nopeusOikea);
170        Keyboard.Listen(Key.Right, ButtonState.Released, AsetaNopeus, null, pelaaja, Vector.Zero);
171        Keyboard.Listen(Key.Left, ButtonState.Down, AsetaNopeus, null, pelaaja, nopeusVasen);
172        Keyboard.Listen(Key.Left, ButtonState.Released, AsetaNopeus, null, pelaaja, Vector.Zero);
173    }
174
175    public void LuoMaailma(String [] kentta)
176    {
177
178        TileMap tiles = TileMap.FromStringArray(kentta);
179        tiles.SetTileMethod('X', LuoStandardiPala);
180        tiles.SetTileMethod('P', LuoPelaaja);
181        tiles.SetTileMethod('C', LuoKolikko);
182        tiles.SetTileMethod('B', LuoKolikkoBlock);
183        tiles.SetTileMethod('M', LuoMaali);
184        tiles.SetTileMethod('A', LuoVaaSinBlock);
185        tiles.SetTileMethod('S', LuoVaaSinSwitch);
186        tiles.SetTileMethod('N', LuoTyonBlock);
187        tiles.SetTileMethod('V', LuoTyonTuho);
188        tiles.SetTileMethod('1', LuoVihu, 100.0, 0.0);
189        tiles.SetTileMethod('2', LuoVihu, 150.0, 0.0);
190        tiles.SetTileMethod('3', LuoVihu, 200.0, 0.0);
191        tiles.SetTileMethod('4', LuoVihu, 240.0, 0.0);
192        tiles.SetTileMethod('5', LuoVihu, 290.0, 0.0);
193        tiles.SetTileMethod('6', LuoVihu, 340.0, 0.0);
194        tiles.SetTileMethod('7', LuoVihu, 390.0, 0.0);
195        tiles.SetTileMethod('8', LuoVihu, 435.0, 0.0);
196        tiles.SetTileMethod('9', LuoVihu, 480.0, 0.0);
197        tiles.SetTileMethod('Q', LuoVihu, 0.0, 100.0);
198        tiles.SetTileMethod('W', LuoVihu, 0.0, 150.0);
199        tiles.SetTileMethod('E', LuoVihu, 0.0, 200.0);
200        tiles.SetTileMethod('R', LuoVihu, 0.0, 240.0);
201        tiles.SetTileMethod('T', LuoVihu, 0.0, 290.0);
202        tiles.SetTileMethod('Y', LuoVihu, 0.0, 340.0);
203        tiles.SetTileMethod('U', LuoVihu, 0.0, 390.0);
204        tiles.SetTileMethod('I', LuoVihu, 0.0, 435.0);
205        tiles.SetTileMethod('O', LuoVihu, 0.0, 480.0);
206        tiles.SetTileMethod('0', LuoVihu, 0.0, 0.0);
207        tiles.Execute(ruudunLeveys, ruudunKorkeus);
208        Ohjaus();
209    }
210
211    private void SeuraavaKentta()
212    {
213        ClearGameObjects();
214        if (levelLaskuri.Value == 0)
215        {
216            LuoMaailma(kenttaYksi);
217        }
218
219        else if (levelLaskuri.Value == 1)
220        {
221            LuoMaailma(kenttaKaksi);
222        }
223
224        else if (levelLaskuri.Value == 2)
225        {
226            LuoMaailma(kenttaKolme);
227        }
228    }
229
230    public void LuoKolikkoLaskuri()
231    {
232        kolikkoLaskuri = new IntMeter(0);
233        kolikkoLaskuri.MaxValue = 100;
234    }
235
236    public void LuoLevelLaskuri()
237    {
238        levelLaskuri = new IntMeter(0);
239        levelLaskuri.MaxValue = 10;
240    }
241
242    public void LuoStandardiPala(Vector paikka, double ruudunLeveys, double ruudunKorkeus)
243    {
244        PhysicsObject standardiPala = PhysicsObject.CreateStaticObject(ruudunLeveys, ruudunKorkeus);
245        standardiPala.Position = paikka;
246        standardiPala.Restitution = 0.0;
247        standardiPala.Image = standardiPalaKuva;
248        Add(standardiPala);
249    }
250
251    public void LuoPelaaja(Vector paikka, double ruudunLeveys, double ruudunKorkeus)
252    {
253        pelaaja = new PhysicsObject(ruudunLeveys / 1.6, ruudunKorkeus / 1.6);
254        pelaaja.Position = paikka;
255        pelaaja.Shape = Shape.Circle;
256        pelaaja.CanRotate = false;
257        pelaaja.Tag = "pelaaja";
258        pelaaja.Restitution = 0.0;
259        pelaaja.Image = pelaajaKuva;
260        Add(pelaaja);
261    }
262
263    public void LuoKolikko(Vector paikka, double ruudunLeveys, double ruudunKorkeus)
264    {
265        kolikko = PhysicsObject.CreateStaticObject(ruudunLeveys / 2, ruudunKorkeus / 2);
266        kolikko.Image = kolikkoKuva;
267        kolikko.Shape = Shape.Circle;
268        kolikko.Position = paikka;
269        kolikko.Restitution = 0.0;
270        Add(kolikko);
271        AddCollisionHandler(kolikko, "pelaaja", KerasitKolikon);
272    }
273
274    public void LuoKolikkoBlock(Vector paikka, double ruudunLeveys, double ruudunKorkeus)
275    {
276        kolikkoBlock = PhysicsObject.CreateStaticObject(ruudunLeveys, ruudunKorkeus);
277        kolikkoBlock.Image = kolikkoBlockKuva;
278        kolikkoBlock.Position = paikka;
279        kolikkoBlock.Restitution = 0.0;
280        Add(kolikkoBlock);
281    }
282
283    public void LuoMaali(Vector paikka, double ruudunLeveys, double ruudunKorkeus)
284    {
285        maali = PhysicsObject.CreateStaticObject(ruudunLeveys, ruudunKorkeus);
286        maali.Image = maaliKuva;
287        maali.Position = paikka;
288        maali.Restitution = 0.0;
289        Add(maali);
290        AddCollisionHandler(maali, "pelaaja", TulitMaaliin);
291    }
292
293    public void LuoTyonBlock(Vector paikka, double ruudunLeveys, double ruudunKorkeus)
294    {
295        tyonBlock = new PhysicsObject(ruudunLeveys, ruudunKorkeus, Shape.Circle);
296        tyonBlock.Position = paikka;
297        tyonBlock.Restitution = 0.0;
298        tyonBlock.CanRotate = false;
299        tyonBlock.Tag = "tyonBlock";
300        tyonBlock.Image = tyonBlockKuva;
301        Add(tyonBlock);
302        AddCollisionHandler(tyonBlock, "vihu", vihuKuoli);
303    }
304
305    public void LuoTyonTuho(Vector paikka, double ruudunLeveys, double ruudunKorkeus)
306    {
307        tyonTuho = PhysicsObject.CreateStaticObject(ruudunLeveys, ruudunKorkeus);
308        tyonTuho.Position = paikka;
309        tyonTuho.Restitution = 0.0;
310        tyonTuho.Image = tyonTuhoKuva;
311        Add(tyonTuho);
312        AddCollisionHandler(tyonTuho, "tyonBlock", TyoTormasi);
313    }
314
315    public void LuoVaaSinBlock(Vector paikka, double ruudunLeveys, double ruudunKorkeus)
316    {
317        vaaSinBlock = PhysicsObject.CreateStaticObject(ruudunLeveys, ruudunKorkeus);
318        vaaSinBlock.Position = paikka;
319        vaaSinBlock.Restitution = 0.0;
320        vaaSinBlock.Image = vaaSinBlockKuva;
321        Add(vaaSinBlock);
322    }
323
324    public void LuoVaaSinSwitch(Vector paikka, double ruudunLeveys, double ruudunKorkeus)
325    {
326        vaaSinSwitch = PhysicsObject.CreateStaticObject(ruudunLeveys, ruudunKorkeus);
327        vaaSinSwitch.Position = paikka;
328        vaaSinSwitch.Restitution = 0.0;
329        Add(vaaSinSwitch);
330        vaaSinSwitch.Image = vaaSinSwitchKuva;
331        AddCollisionHandler(vaaSinSwitch, "pelaaja", OsuitVaaSinSwitch);
332    }
333
334    void TyoTormasi(PhysicsObject tormaaja, PhysicsObject kohde)
335    {
336        tormaaja.Destroy();
337        kohde.Destroy();
338    }
339
340    void OsuitVaaSinSwitch(PhysicsObject tormaaja, PhysicsObject pelaaja)
341    {
342        vaaSinSwitch.Destroy();
343        vaaSinBlock.Destroy();
344    }
345 
346    void KerasitKolikon(PhysicsObject kolikko, PhysicsObject pelaaja)
347    {
348        kolikko.Destroy();
349        kolikkoLaskuri.Value += 1;
350
351        if (kolikkoLaskuri.Value == 20)
352        {
353            kolikkoBlock.Destroy();
354            kolikkoLaskuri.Reset();
355        }
356
357    }
358
359    void Kuolit(PhysicsObject tormaaja, PhysicsObject pelaaja)
360    {
361        pelaaja.Destroy();
362        kolikkoLaskuri.Reset();
363        SeuraavaKentta();
364
365        rajahdys = new Explosion(75);
366        rajahdys.Position = pelaaja.Position;
367        rajahdys.UseShockWave = false;
368        Add(rajahdys);
369    }
370
371    void vihuKuoli(PhysicsObject tormaaja, PhysicsObject kohde)
372    {
373        kohde.Destroy();
374
375        rajahdys = new Explosion(75);
376        rajahdys.Position = kohde.Position;
377        rajahdys.UseShockWave = false;
378        Add(rajahdys);
379    }
380
381    void TulitMaaliin(PhysicsObject tormaaja, PhysicsObject pelaaja)
382    {
383        pelaaja.Destroy();
384        levelLaskuri.Value += 1;
385
386        SeuraavaKentta();
387    }
388
389    public void AsetaNopeus(PhysicsObject pelaaja, Vector nopeus)
390    {
391        pelaaja.Velocity = nopeus;
392    }
393
394    public void LuoVihu(Vector paikka, double ruudunLeveys, double ruudunKorkeus, double r, double d)
395    {
396        vihu = new PhysicsObject(ruudunLeveys / 1.3, ruudunKorkeus / 1.3);
397        vihu.Position = paikka;
398        vihu.Shape = Shape.Circle;
399        vihu.Image = vihuKuva;
400        vihu.Tag = "vihu";
401        vihu.CanRotate = false;
402        Add(vihu);
403        AddCollisionHandler(vihu, "pelaaja", Kuolit);
404        LuoVihuAivot(paikka, r, d);
405    }
406
407    public void LuoVihuAivot(Vector paikka, double r, double d)
408    {
409        List<Vector> vihuPolku = new List<Vector>();
410        vihuPolku.Add(new Vector(paikka.X + r, paikka.Y));
411        vihuPolku.Add(new Vector(paikka.X, paikka.Y - d));
412
413        PathFollowerBrain pfb = new PathFollowerBrain();
414        pfb.Path = vihuPolku;
415        vihu.Brain = pfb;
416        pfb.Active = true;
417        pfb.Loop = true;
418        pfb.Speed = 125;
419    }
420}
Note: See TracBrowser for help on using the repository browser.