source: 2017/24/EmiliaM/Little_miner1.cs @ 9191

Revision 8781, 17.6 KB checked in by npo17_4, 2 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 Testi_Little_miner : PhysicsGame
10{
11
12    PhysicsObject hakku;
13    bool point1 = false;
14    bool point2 = false;
15    Vector sanky1paikka;
16    Vector sanky2paikka;
17    Vector alkupaikka;
18    PhysicsObject palikka1;
19   
20   
21    Image miner = LoadImage("miner");
22    Image kseina = LoadImage("kseina");
23    Image hakkukuva = LoadImage("hakku");
24    Image tausta = LoadImage("Little.miner1");
25    Image kkuva = LoadImage("kivi");
26    Image vihu = LoadImage("vihu");
27    Image sma = LoadImage("sma");
28    Image taust = LoadImage("raja");
29    Image puu = LoadImage("puu");
30    Image arkku = LoadImage("c");
31    Image tim = LoadImage("diamond");
32
33    private double liikkumisnopeus = 300;
34    Pelaaja pelaaja;
35    public override void Begin()
36    {
37        Level.Background.Image = tausta;
38        MultiSelectWindow alkuValikko = new MultiSelectWindow("Pelin alkuvalikko", "Aloita peli", "Lopeta");
39        alkuValikko.AddItemHandler(0, AloitaPeli);
40        // alkuValikko.AddItemHandler(1, );
41        alkuValikko.AddItemHandler(2, Exit);
42        Add(alkuValikko);
43    }
44     void AloitaPeli()
45    { 
46        LuoKentta();
47        LuoHakku(pelaaja.X, pelaaja.Y + -50.0);
48
49        // hahmo = new PhysicsStructure(pelaaja, hakku);
50        // Add(hahmo);
51
52
53        Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, null, pelaaja, new Vector(-liikkumisnopeus, 0));
54        Keyboard.Listen(Key.Left, ButtonState.Released, Liikuta, null, pelaaja, Vector.Zero);
55        Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, null, pelaaja, new Vector(liikkumisnopeus, 0));
56        Keyboard.Listen(Key.Right, ButtonState.Released, Liikuta, null, pelaaja, Vector.Zero);
57        Keyboard.Listen(Key.Down, ButtonState.Down, Liikuta, null, pelaaja, new Vector(0, -liikkumisnopeus));
58        Keyboard.Listen(Key.Down, ButtonState.Released, Liikuta, null, pelaaja, Vector.Zero);
59        Keyboard.Listen(Key.Up, ButtonState.Down, Liikuta, null, pelaaja, new Vector(0, liikkumisnopeus));
60        Keyboard.Listen(Key.Up, ButtonState.Released, Liikuta, null, pelaaja, Vector.Zero);
61        Keyboard.Listen(Key.B, ButtonState.Pressed, Kaanna, null, pelaaja);
62        Keyboard.Listen(Key.Space, ButtonState.Pressed, Lyo, null);
63
64        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
65        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
66    }
67
68    void Lyo ()
69    {
70        PhysicsObject apuri = new PhysicsObject(hakku.Width, hakku.Height);
71        apuri.Position = hakku.Position;
72        AddCollisionHandler(apuri, "kivi", LyoKivea);
73        apuri.Tag = "apuri";
74        AddCollisionHandler(apuri, "smaragdi", LyoSma);
75        AddCollisionHandler(apuri, "timantti", LyoTimu);
76        AddCollisionHandler(apuri, "vihu2", LyoVihu);
77        AddCollisionHandler(apuri, "vihu", LyoVihu);
78        AddCollisionHandler(apuri, "boss", LyoIlkio);
79        AddCollisionHandler(apuri, "boss2", LyoIlkio);
80        apuri.IsVisible = false;
81        Add(apuri);
82        apuri.Push(new Vector(10, 10));
83        apuri.LifetimeLeft = TimeSpan.FromMilliseconds(100);
84    }
85
86    void Kaanna(PhysicsObject pelaaja)
87    {
88        pelaaja.Angle += Angle.FromDegrees(90.0);
89        double kulma = pelaaja.Angle.Degrees % 360;
90        if (90.1 - kulma < 0.5 && 90.1 - kulma > -0.5)
91            hakku.Position = new Vector(pelaaja.X + hakku.Width, pelaaja.Y);
92        if (180.1 + kulma < 0.5 && 180.1 + kulma > -0.5)
93            hakku.Position = new Vector(pelaaja.X, pelaaja.Y + hakku.Width);
94        if (90.1 + kulma < 0.5 && 90.1 + kulma > -0.5)
95            hakku.Position = new Vector(pelaaja.X - hakku.Width, pelaaja.Y);
96        if (0.1 + kulma < 0.5 && 0.1 + kulma > -0.5)
97            hakku.Position = new Vector(pelaaja.X, pelaaja.Y - hakku.Width);
98
99
100    }
101    void LuoHakku(double x, double y)
102    {
103        hakku = new PhysicsObject(50.0, 30.0);
104        hakku.X = x;
105        hakku.Y = y;
106        hakku.Shape = Shape.Rectangle;
107        hakku.Image = hakkukuva;
108        hakku.Tag = "hakku";
109        hakku.Restitution = 0.0;
110        hakku.CanRotate = false;
111        hakku.IgnoresCollisionResponse = true;
112        Add(hakku);
113
114        // AxleJoint liitos = new AxleJoint(hakku, pelaaja);
115        //Add(liitos);
116
117    }
118
119
120    void Liikuta(PhysicsObject pelaaja, Vector suunta)
121    {
122        pelaaja.Velocity = suunta;
123        //   pelaaja.Angle += Angle.FromDegrees(90.0);
124        double kulma = pelaaja.Angle.Degrees % 360;
125        if (90.1 - kulma < 0.5 && 90.1 - kulma > -0.5)
126            hakku.Position = new Vector(pelaaja.X + hakku.Width, pelaaja.Y);
127        if (180.1 + kulma < 0.5 && 180.1 + kulma > -0.5)
128            hakku.Position = new Vector(pelaaja.X, pelaaja.Y + hakku.Width);
129        if (90.1 + kulma < 0.5 && 90.1 + kulma > -0.5)
130            hakku.Position = new Vector(pelaaja.X - hakku.Width, pelaaja.Y);
131        if (0.1 + kulma < 0.5 && 0.1 + kulma > -0.5)
132            hakku.Position = new Vector(pelaaja.X, pelaaja.Y - hakku.Width);
133
134    }
135
136    void LuoKentta()
137    {
138        TileMap ruudut = TileMap.FromLevelAsset("miner_maa1");
139
140        Level.Background.Color = Color.Charcoal;
141
142        ruudut.SetTileMethod('H', LuoSeina);
143        ruudut.SetTileMethod('K', LuoPalkki);
144        ruudut.SetTileMethod('h', LuoKseina);
145        ruudut.SetTileMethod('R', LuoKivi);
146        ruudut.SetTileMethod('V', LuoVihu);
147        ruudut.SetTileMethod('I', LuoIlkio);
148        ruudut.SetTileMethod('E', LuoEste);
149        ruudut.SetTileMethod('S', LuoSmaragdi);
150        ruudut.SetTileMethod('D', LuoTimantti);
151        ruudut.SetTileMethod('B', LuoIsokivi);
152        ruudut.SetTileMethod('a', LuoSanky, "sanky1");
153        ruudut.SetTileMethod('b', LuoSanky, "sanky2");
154        ruudut.SetTileMethod('c', LuoArkku);
155        ruudut.SetTileMethod('P', LuoPelaaja);
156        ruudut.Execute(50, 50);
157    }
158
159    void LuoPelaaja(Vector paikka, double leveys, double korkeus)
160    {
161        pelaaja = new Pelaaja(leveys, korkeus);
162        pelaaja.Shape = Shape.Circle;
163        pelaaja.Position = paikka;
164        pelaaja.Mass = 100.0;
165        pelaaja.CanRotate = false;
166        pelaaja.CollisionIgnoreGroup = 2;
167        alkupaikka = paikka;
168        AddCollisionHandler(pelaaja, "vihu", VihuOsui);
169        AddCollisionHandler(pelaaja, "sanky1", VaihdaCheckpointtia);
170        AddCollisionHandler(pelaaja, "sanky2", VaihdaCheckpointtia);
171        AddCollisionHandler(pelaaja, "boss2", VihuOsui);
172       
173        Camera.Follow(pelaaja);
174        pelaaja.Image = miner;
175        pelaaja.Restitution = 0.0;
176        Add(pelaaja);
177
178    }
179   void VaihdaCheckpointtia(PhysicsObject pelaaja, PhysicsObject sanky)
180    {
181        if (sanky.Tag == "sanky1") point1 = true;
182        if (sanky.Tag == "sanky2") point2 = true; 
183
184    }
185
186    void VihuOsui(PhysicsObject pelaaja, PhysicsObject palikka2)
187    {
188        Pelaaja pel2 = (Pelaaja)pelaaja;
189        pel2.ElamaLaskuri.AddValue(-1);
190        if (pel2.ElamaLaskuri.Value == 0) {
191           pel2.ElamaLaskuri.AddValue (10);
192            Vector paikka;
193            if (point2) paikka = sanky2paikka;
194            else if (point1) paikka = sanky1paikka;
195            else paikka = alkupaikka;
196            pel2.Position = paikka;
197           
198                     
199        }
200       
201
202    }
203
204    void LuoSeina(Vector paikka, double leveys, double korkeus)
205    {
206        PhysicsObject palikka = PhysicsObject.CreateStaticObject(leveys, korkeus);
207        palikka.Position = paikka;
208        palikka.Shape = Shape.Rectangle;
209        palikka.Image = taust;
210        palikka.Restitution = 0.0;
211        Add(palikka);
212    }
213
214    void LuoPalkki(Vector paikka, double leveys, double korkeus)
215    {
216        PhysicsObject palikka = PhysicsObject.CreateStaticObject(leveys, korkeus);
217        palikka.Position = paikka;
218        palikka.Shape = Shape.Rectangle;
219        palikka.Image = puu;
220        palikka.Restitution = 0.0;
221        palikka.CollisionIgnoreGroup = 2;
222        Add(palikka);
223    }
224
225    void LuoKseina(Vector paikka, double leveys, double korkeus)
226    {
227        PhysicsObject palikka = PhysicsObject.CreateStaticObject(leveys, korkeus);
228        palikka.Position = paikka;
229        palikka.Shape = Shape.Rectangle;
230        palikka.Color = Color.AshGray;
231        palikka.Restitution = 0.0;
232        Add(palikka);
233    }
234    void LuoKivi(Vector paikka, double leveys, double korkeus)
235    {
236        Kivi palikka = new Kivi(leveys, korkeus);
237        palikka.MakeStatic();
238        palikka.Position = paikka;
239        palikka.Shape = Shape.Rectangle;
240        palikka.Image = kkuva;
241        //AddCollisionHandler(palikka,"apuri" , LyoKivea2);
242        // AddCollisionHandler(palikka, "hakku", KiviTuhoutuu);
243        palikka.Tag = ("kivi");
244        palikka.Restitution = 0.0;
245        Add(palikka);
246    }
247
248    void LyoKivea(PhysicsObject apuri, PhysicsObject kivi)
249    {
250     
251        Kivi kivi2 = (Kivi)kivi;
252        kivi2.ElamaLaskuri.AddValue(-1);
253        if (kivi2.ElamaLaskuri.Value == 0)
254            kivi2.Destroy();
255    }
256
257    //void LyoKivea2(PhysicsObject kivi, PhysicsObject apuri)
258    //{
259
260    //    Kivi kivi2 = (Kivi)kivi;
261    //    kivi2.ElamaLaskuri.AddValue(-1);
262    //    if (kivi2.ElamaLaskuri.Value == 0)
263    //        kivi2.Destroy();
264    //}
265
266    void LuoVihu(Vector paikka, double leveys, double korkeus)
267    {
268        Vihu palikka2 = new Vihu(leveys, korkeus);
269        palikka2.Position = paikka;
270        palikka2.Mass = 100000000;
271        palikka2.Shape = Shape.Rectangle;
272        palikka2.Image = kkuva;
273        palikka2.Tag = "vihu2";
274        palikka2.Restitution = 0.0;
275        Add(palikka2);
276    }
277
278    void LyoVihu(PhysicsObject apuri, PhysicsObject palikka)
279    {
280
281        Vihu vihu2 = (Vihu)palikka;
282        vihu2.Image = vihu;
283        vihu2.Tag = "vihu";
284
285        FollowerBrain vihuAivot = new FollowerBrain(pelaaja);
286        vihuAivot.Speed = 100;
287        vihuAivot.DistanceFar = 600;
288        vihuAivot.DistanceClose = 50;
289        vihuAivot.StopWhenTargetClose = false;
290        vihuAivot.TargetClose += delegate
291        {
292            Vector suunta = pelaaja.Position - palikka.Position;
293            suunta.Normalize();
294
295            palikka.Hit(suunta * -300);
296            pelaaja.Hit(suunta * 300);
297
298        };
299
300        vihu2.Brain = vihuAivot;
301        vihu2.ElamaLaskuri.AddValue(-1);
302        if (vihu2.ElamaLaskuri.Value == 0)
303            vihu2.Destroy();
304    }
305
306   
307    void LuoIlkio(Vector paikka, double leveys, double korkeus)
308    {
309        Boss pal = new Boss(leveys + 40.0, korkeus + 40.0);
310        pal.Position = paikka;
311        pal.Shape = Shape.Rectangle;
312        pal.Color = Color.Green;
313        pal.Mass = (100000);
314        pal.Tag = "boss";
315        pal.Restitution = 0.0;
316        Add(pal);
317    }
318
319    void LyoIlkio(PhysicsObject apuri, PhysicsObject pal)
320    {
321
322        Boss boss = (Boss)pal;
323        boss.Image = vihu;
324        boss.Tag = "boss2";
325       
326
327        FollowerBrain vihuAivot = new FollowerBrain(pelaaja);
328        vihuAivot.Speed = 100;
329        vihuAivot.DistanceFar = 600;
330        vihuAivot.DistanceClose = 50;
331        vihuAivot.StopWhenTargetClose = false;
332        vihuAivot.TargetClose += delegate
333        {
334            Vector suunta = pelaaja.Position - pal.Position;
335            suunta.Normalize();
336
337            pal.Hit(suunta * -300);
338            pelaaja.Hit(suunta * 300);
339
340        };
341
342       boss.Brain = vihuAivot;
343       boss.ElamaLaskuri.AddValue(-1);
344        if (boss.ElamaLaskuri.Value == 0)
345        {
346
347            boss.Destroy();
348            List<GameObject> objs = GetObjectsWithTag("este");
349            foreach (GameObject g in objs)
350                g.Destroy();
351        }
352           
353    }
354
355
356
357    void LuoEste(Vector paikka, double leveys, double korkeus)
358    {
359        palikka1 = PhysicsObject.CreateStaticObject(leveys, korkeus);
360        palikka1.Position = paikka;
361        palikka1.Shape = Shape.Rectangle;
362        palikka1.Color = Color.DarkJungleGreen;
363        palikka1.Tag = "este";
364        palikka1.Restitution = 0.0;
365        Add(palikka1);
366    }
367
368    void LuoSmaragdi(Vector paikka, double leveys, double korkeus)
369    {
370        Sma ragdi = new Sma(leveys, korkeus);
371        ragdi.Position = paikka;
372        ragdi.MakeStatic();
373        ragdi.Shape = Shape.Rectangle;
374        ragdi.Image = kkuva; 
375        ragdi.Tag = ("smaragdi");
376        ragdi.Restitution = 0.0;
377        Add(ragdi);
378    }
379
380    void LyoSma (PhysicsObject apuri, PhysicsObject ragdi)
381    {
382        Sma Sma2 = (Sma)ragdi;
383        Sma2.Image = sma;
384        Sma2.ElamaLaskuri.AddValue(-1);
385        if (Sma2.ElamaLaskuri.Value == 0)
386        {
387            Sma2.Destroy();
388            MessageDisplay.Add("Löysit Smaragdin!");
389            Timer.SingleShot(2, TarkistaKaikki);
390        }
391       
392    }
393
394    void TarkistaKaikki()
395    {
396        List<GameObject> smas = GetObjectsWithTag("smaragdi");
397        List<GameObject> tims = GetObjectsWithTag("timantti");
398        if (smas.Count == 0 && tims.Count == 0)
399        {
400            Label tekstikentta = new Label("Voitit pelin! Löysit kaikki timantit ja smaragdit. Voitit BOSSIN. Olet mahtava mainari.");
401            tekstikentta.X = pelaaja.X;
402            tekstikentta.Y = pelaaja.+ 100;
403            Add(tekstikentta);
404
405        }
406
407
408
409
410
411    }
412
413
414    void LuoTimantti(Vector paikka, double leveys, double korkeus)
415    {
416        Timu dia = new Timu(leveys, korkeus);
417        dia.Position = paikka;
418        dia.MakeStatic();
419        dia.Shape = Shape.Rectangle;
420        dia.Image = tim;
421       
422        dia.Tag = "timantti";
423        dia.Restitution = 0.0;
424        Add(dia);
425    }
426    void LyoTimu(PhysicsObject apuri, PhysicsObject dia)
427    {
428        Timu D2 = (Timu)dia;
429        D2.ElamaLaskuri.AddValue(-1);
430        if (D2.ElamaLaskuri.Value == 0)
431        {
432            D2.Destroy();
433            MessageDisplay.Add("Löysit Timantin!");
434            Timer.SingleShot(2, TarkistaKaikki);
435        }
436
437       
438    }
439
440    void LuoIsokivi(Vector paikka, double leveys, double korkeus)
441    {
442        PhysicsObject palikka = PhysicsObject.CreateStaticObject(leveys + 40.0, korkeus + 40.0);
443        palikka.Position = paikka;
444        palikka.Shape = Shape.Rectangle;
445        palikka.Color = Color.Gray;
446        palikka.Restitution = 0.0;
447        Add(palikka);
448    }
449
450    void LuoSanky(Vector paikka, double leveys, double korkeus, String tagi)
451    {
452        PhysicsObject palikka = PhysicsObject.CreateStaticObject(leveys, korkeus);
453        palikka.Position = paikka;
454        palikka.Shape = Shape.Rectangle;
455        palikka.Color = Color.BloodRed;
456        palikka.Tag = tagi;
457        palikka.Restitution = 0.0;
458        if (tagi == "sanky1") sanky1paikka = paikka;
459        if (tagi == "sanky2") sanky2paikka = paikka;
460
461        Add(palikka);
462    }
463
464    void LuoArkku(Vector paikka, double leveys, double korkeus)
465    {
466        PhysicsObject palikka = PhysicsObject.CreateStaticObject(leveys, korkeus);
467        palikka.Position = paikka;
468        palikka.Shape = Shape.Rectangle;
469        palikka.Image = arkku;
470        palikka.Restitution = 0.0;
471        Add(palikka);
472    }
473 
474}
475class Kivi : PhysicsObject
476{
477    private IntMeter elamaLaskuri = new IntMeter(2, 0, 2);
478    public IntMeter ElamaLaskuri { get { return elamaLaskuri; } }
479
480    public Kivi(double leveys, double korkeus)
481        : base(leveys, korkeus)
482    {
483       // elamaLaskuri.LowerLimit += delegate { this.Destroy(); };
484    }
485}
486
487class Sma : PhysicsObject
488{
489    private IntMeter elamaLaskuri = new IntMeter(3, 0, 3);
490    public IntMeter ElamaLaskuri { get { return elamaLaskuri; } }
491
492    public Sma(double leveys, double korkeus)
493        : base(leveys, korkeus)
494    {
495        // elamaLaskuri.LowerLimit += delegate { this.Destroy(); };
496    }
497}
498
499class Timu : PhysicsObject
500{
501    private IntMeter elamaLaskuri = new IntMeter(3, 0, 3);
502    public IntMeter ElamaLaskuri { get { return elamaLaskuri; } }
503
504    public Timu(double leveys, double korkeus)
505        : base(leveys, korkeus)
506    {
507        // elamaLaskuri.LowerLimit += delegate { this.Destroy(); };
508    }
509}
510class Vihu : PhysicsObject
511{
512    private IntMeter elamaLaskuri = new IntMeter(3, 0, 3);
513    public IntMeter ElamaLaskuri { get { return elamaLaskuri; } }
514
515    public Vihu(double leveys, double korkeus)
516        : base(leveys, korkeus)
517    {
518        // elamaLaskuri.LowerLimit += delegate { this.Destroy(); };
519    }
520}
521
522class Pelaaja : PhysicsObject
523{
524    private IntMeter elamaLaskuri = new IntMeter(10, 0, 10);
525    public IntMeter ElamaLaskuri { get { return elamaLaskuri; } }
526
527    public Pelaaja(double leveys, double korkeus)
528        : base(leveys, korkeus)
529    {
530        ProgressBar elamaPalkki = new ProgressBar(150, 20);
531        elamaPalkki.X = 0 ;
532        elamaPalkki.Y = 80;
533        elamaPalkki.BindTo(elamaLaskuri);
534        Add(elamaPalkki);
535    }
536}
537
538//class Laskuri : PhysicsObject
539//{
540//    private IntMeter elamaLaskuri = new IntMeter(12, 0, 12);
541//    public IntMeter elamaLaskuri { get { return elamaLaskuri; } }
542//    public Laskuri(double leveys, double korkeus)
543//        : base(leveys, korkeus)
544//    {
545//        // elamaLaskuri.LowerLimit += delegate { this.Destroy(); };
546//    }
547//}
548class Boss : PhysicsObject
549{
550    private IntMeter elamaLaskuri = new IntMeter(10, 0, 10);
551    public IntMeter ElamaLaskuri { get { return elamaLaskuri; } }
552
553    public Boss(double leveys, double korkeus)
554        : base(leveys, korkeus)
555    {
556        // elamaLaskuri.LowerLimit += delegate { this.Destroy(); };
557    }
558}
Note: See TracBrowser for help on using the repository browser.