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

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