source: 2017/31/SietseH/peli2017/peli2017/peli2017/peli2017.cs @ 9353

Revision 9353, 17.1 KB checked in by npo17_72, 4 years ago (diff)
Line 
1using System;
2
3
4using System.Collections.Generic;
5using Jypeli;
6using Jypeli.Assets;
7using Jypeli.Controls;
8using Jypeli.Effects;
9using Jypeli.Widgets;
10class Vihu : PhysicsObject
11{
12    private IntMeter elamaLaskuri = new IntMeter(1, 0, 1);
13    public IntMeter ElamaLaskuri { get { return elamaLaskuri; } }
14    public Timer ajastin;
15    public Vihu(double leveys, double korkeus)
16        : base(leveys, korkeus)
17    {
18        elamaLaskuri.LowerLimit += delegate { this.Destroy(); };
19    }
20}
21class Kivi : PhysicsObject
22{
23    private IntMeter elamaLaskuri = new IntMeter(5, 0, 5);
24    public IntMeter ElamaLaskuri { get { return elamaLaskuri; } }
25
26    public Kivi(double leveys, double korkeus)
27        : base(leveys, korkeus)
28    {
29        elamaLaskuri.LowerLimit += delegate { this.Destroy(); };
30    }
31}
32class Puu : PhysicsObject
33{
34    private IntMeter elamaLaskuri = new IntMeter(5, 0, 5);
35    public IntMeter ElamaLaskuri { get { return elamaLaskuri; } }
36
37    public Puu(double leveys, double korkeus)
38        : base(leveys, korkeus)
39    {
40        elamaLaskuri.LowerLimit += delegate { this.Destroy(); };
41    }
42}
43public class peli2017 : PhysicsGame
44{
45    Vector ylös = new Vector(0, 5000);
46    Vector alas = new Vector(0, -5000);
47    Vector vasen = new Vector(5000, 0);
48    Vector oikea = new Vector(-5000, 0);
49
50    IntMeter ElamaLaskuri = new IntMeter(0);
51
52    PhysicsObject pelaaja;
53
54    GameObject Kilpi;
55    bool puolustaa = false;
56
57    AssaultRifle laserAse;
58
59    string kenttanimi = "kenttäää";
60
61    int valittutyokalu = 1;
62
63    public override void Begin()
64    {
65        SmoothTextures = false;
66
67        ClearAll();
68        //ElämäLaskuri();
69        Kentta();
70        //Vihollinen();
71        ////liikuta();
72        //Vihollinen();
73        //Vihollinen();
74        //Vihollinen();
75        //Vihollinen();
76        Laserase();
77        Ohjaus();
78        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
79    }
80    void Ohjaus()
81    {
82        Keyboard.Listen(Key.Q, ButtonState.Down, zoom, "", 0.9);
83        Keyboard.Listen(Key.E, ButtonState.Down, zoom, "", 1.1);
84        Keyboard.Listen(Key.W, ButtonState.Down, Liikuta, "", ylös);
85        Keyboard.Listen(Key.S, ButtonState.Down, Liikuta, "", alas);
86        Keyboard.Listen(Key.A, ButtonState.Down, Liikuta, "", oikea);
87        Keyboard.Listen(Key.D, ButtonState.Down, Liikuta, "", vasen);
88        Keyboard.Listen(Key.D1, ButtonState.Pressed, ValitseTyokalu, "", 1);
89        Keyboard.Listen(Key.D2, ButtonState.Pressed, ValitseTyokalu, "", 2);
90        Keyboard.Listen(Key.D3, ButtonState.Pressed, ValitseTyokalu, "", 3);
91        Keyboard.Listen(Key.D4, ButtonState.Pressed, ValitseTyokalu, "", 4);
92        Mouse.Listen(MouseButton.Right, ButtonState.Pressed, KilpiPaalle, "Ammu");
93        Mouse.Listen(MouseButton.Right, ButtonState.Released, Kilpipois, "Ammu");
94        Mouse.Listen(MouseButton.Left, ButtonState.Pressed, Kaytatyokalua, "");
95        Mouse.ListenMovement(0.1, Tahtaa, "Tähtää aseella");
96    }
97    void Liikuta(Vector nopeus)
98    {
99        double kerroin = puolustaa ? 0.5 : 1.0;
100        pelaaja.Push(nopeus * kerroin);
101    }
102    void Kentta()
103    {
104        //Level.AmbientLight = 0.1;
105        ColorTileMap ruudut = ColorTileMap.FromLevelAsset(kenttanimi);
106        //2. Kerrotaan mitä aliohjelmaa kutsutaan, kun tietyn värinen pikseli tulee vastaan kuvatiedostossa.
107        ruudut.SetTileMethod("FF00D4", LuoPelaaja );
108        ruudut.SetTileMethod(Color.Black, LuoVesi);
109        ruudut.SetTileMethod("FFD800", LuoHiekka);
110        ruudut.SetTileMethod("FF0000", KevytSeinaa);
111        ruudut.SetTileMethod("FFFAFA", KevytSeina);
112        ruudut.SetTileMethod("00FF00", Seina);
113        ruudut.SetTileMethod("42A742", Seinaa);
114        ruudut.SetTileMethod("7F3300", Ovi);
115        ruudut.SetTileMethod("0000FF", Teleportti);
116        ruudut.SetTileMethod("00FFDD", Puut);
117        ruudut.SetTileMethod("00FF90", Kivi);
118        ruudut.SetTileMethod("F7FF4E", Vihollinen);
119        ruudut.SetTileMethod("00FF7B", TAlo);
120
121       
122       
123        //ruudut.Optimize(Color.FromHexCode("00FF90"));
124
125        //#FFF7FF4E
126        //ruudut.SetTileMethod(Color.Yellow, LuoTahti);
127        //3. Execute luo kentän
128        //   Parametreina leveys ja korkeus
129
130        ruudut.Execute(200, 200);
131
132        if (kenttanimi == "kenttäää")  Level.Background.Color = Color.Green;
133        if (kenttanimi == "luola") Level.Background.Color = Color.Gray;
134
135        //Level.Background.Image = LoadImage("Naamloos");
136        //Level.Background.FitToLevel();
137        //Camera.ZoomToLevel();
138
139        Camera.Follow(pelaaja);
140
141        PhysicsObject vasenReuna = Level.CreateLeftBorder();
142        vasenReuna.Restitution = 1.0;
143        vasenReuna.KineticFriction = 0.0;
144        vasenReuna.IsVisible = false;
145
146        PhysicsObject oikeaReuna = Level.CreateRightBorder();
147        oikeaReuna.Restitution = 1.0;
148        oikeaReuna.KineticFriction = 0.0;
149        oikeaReuna.IsVisible = false;
150
151        PhysicsObject ylaReuna = Level.CreateTopBorder();
152        ylaReuna.Restitution = 1.0;
153        ylaReuna.KineticFriction = 0.0;
154        ylaReuna.IsVisible = false;
155
156        PhysicsObject alaReuna = Level.CreateBottomBorder();
157        alaReuna.Restitution = 1.0;
158        alaReuna.IsVisible = false;
159        alaReuna.KineticFriction = 0.0;
160
161
162    }
163    void Laserase()
164    {
165        laserAse = new AssaultRifle(20, 5);
166        laserAse.InfiniteAmmo = true;
167        laserAse.Power.Value = 1000;
168        laserAse.Power.DefaultValue = laserAse.Power.Value;
169        laserAse.FireRate = 0.75;
170        laserAse.AmmoIgnoresGravity = false;
171        laserAse.AmmoIgnoresExplosions = true;
172        //laserAse.X = 10.0;
173        //laserAse.Y = -5.0;
174        laserAse.Image = null;
175        laserAse.Color = Color.Transparent;
176        laserAse.CanHitOwner = true;
177        laserAse.ProjectileCollision = Ammusosui;
178
179        pelaaja.Add(laserAse);
180    }
181    void AmmuAseella(Weapon laserAse)
182    {
183        PhysicsObject ammus = laserAse.Shoot();
184       
185        if (ammus != null)
186        {
187            ammus.Position += ammus.Angle.GetVector() * 30;
188            ammus.MaximumLifetime = TimeSpan.FromSeconds(10.00);
189            ammus.Image = LoadImage("Naamlos");
190            ammus.Size *= 2;
191            ammus.Height *= 0.5;
192            ammus.Width *= 1.5;
193        }
194    }
195    void Tahtaa(AnalogState hiirenLiike)
196    {
197        Vector suunta = (Mouse.PositionOnWorld - laserAse.AbsolutePosition).Normalize();
198        pelaaja.Angle = suunta.Angle;
199    }
200    void Vihollinen(Vector paikka, double leveys, double korkeus)
201    {
202        Vihu vihollinen = new Vihu(40.0, 40.0);
203        vihollinen.Position = paikka;
204        vihollinen.LinearDamping = 0.9;
205        vihollinen.CanRotate = false;
206        //vihollinen.Color = Color.Red;
207        vihollinen.Image = LoadImage("vastustaja");
208        vihollinen.Tag = "vihollinen";
209
210        AddCollisionHandler(vihollinen, "keihas", Lyovihollista);
211       
212        RandomMoverBrain satunnaisAivot = new RandomMoverBrain(200);
213
214        satunnaisAivot.ChangeMovementSeconds = 3.00;
215        satunnaisAivot.WanderRadius = 10000;
216        satunnaisAivot.WanderPosition = new Vector(2000, 3000);
217        vihollinen.Brain = satunnaisAivot;
218
219        Add(vihollinen, 3);
220
221        AssaultRifle Ase = new AssaultRifle(30, 10);
222
223        Ase.IsVisible = false;
224        // Jos et halua ammusten määrän rajoitusta, vaan loputtomat panokset,
225        // niin älä lisää seuraavaa riviä ollenkaan:
226        //Ase.Ammo.Value = 1000; // Ammusten määrä aluksi
227
228        // Mitä tapahtuu kun ammus osuu johonkin?
229        Ase.ProjectileCollision = VihollisenAmmusOsui;
230
231        vihollinen.Add(Ase);
232       
233        Timer ajastin = new Timer();
234        vihollinen.ajastin = ajastin;
235        ajastin.Interval = 5.00;
236        ajastin.Timeout += delegate
237        {
238            VihollinenAmmuAseella(Ase);
239        };
240        ajastin.Start();
241       
242
243    }
244    void ElämäLaskuri()
245    {
246        ElamaLaskuri = new IntMeter(0);
247
248        Label pisteNaytto = new Label();
249        pisteNaytto.X = Screen.Left + 100;
250        pisteNaytto.Y = Screen.Top - 100;
251        pisteNaytto.TextColor = Color.Black;
252        pisteNaytto.Color = Color.White;
253
254        IntMeter laskuri = new IntMeter(1);
255
256        pisteNaytto.Title = "elämät";
257
258        pisteNaytto.BindTo(ElamaLaskuri);
259        Add(pisteNaytto);
260    }
261    void Ammusosui(PhysicsObject ammus, PhysicsObject kohde)
262    {
263        ammus.Stop();
264        //ammus.MakeStatic();
265        ammus.IgnoresCollisionResponse = true;
266
267        if (kohde.Tag.ToString() == "vihollinen")
268        {
269            (kohde as Vihu).ElamaLaskuri.Value -= 1;
270            (kohde as Vihu).ajastin.Stop();
271        }
272    }
273    void VihollisenAmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
274    {
275        if (kohde.Tag.ToString() == "pelaaja" && !puolustaa)
276        {
277            //(kohde as Vihu).ElamaLaskuri.Value -= 1;
278            kohde.Destroy();
279        }
280    }
281    void VihollinenAmmuAseella(Weapon Ase)
282    {
283        PhysicsObject ammus1 = Ase.Shoot();
284
285        if (ammus1 != null)
286        {
287            ammus1.MaximumLifetime = TimeSpan.FromSeconds(10.00);
288            ammus1.Image = LoadImage("Naamlos");
289            ammus1.Size *= 2;
290            ammus1.Height *= 0.5;
291            ammus1.Width *= 1.5;
292        }
293    }
294    void LuoPelaaja(Vector paikka, double leveys, double korkeus)
295    {
296        pelaaja = new PhysicsObject(40.0, 40.0);
297        pelaaja.LinearDamping = 0.7;
298        pelaaja.CanRotate = false;
299        //pelaaja.Color = Color.Blue;
300        pelaaja.Image = LoadImage("pelaaja");
301        pelaaja.Tag = "pelaaja";
302        pelaaja.Position = paikka;
303        //pelaaja.CollisionIgnoreGroup = 1;
304        Add(pelaaja);
305        GameObject valo = new GameObject(500, 500);
306        //valo.Image = LoadImage("valo");
307
308        AddCollisionHandler(pelaaja, "teleportti", Luola);
309        AddCollisionHandler(pelaaja, "talo", Talo);
310        //pelaaja.Add(valo);
311
312        //Light valo = new Light();
313        //valo.Intensity = 0.8;
314        //valo.Distance = 5;
315        //valo.Position = pelaaja.Position;
316        //Add(valo);
317    }
318    void LuoTaso(Vector paikka, double leveys, double korkeus)
319    {
320        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
321        taso.Position = paikka;
322        taso.Image = LoadImage("valo");
323        taso.Color = Color.Red;
324
325        taso.CollisionIgnoreGroup = 1;
326        Add(taso);
327        GameObject valo = new GameObject(500, 500);
328        valo.Image = LoadImage("valo");
329        valo.Position = paikka;
330        Add(valo, 3);
331    }
332    void zoom(double kerroin)
333    {
334        Camera.Zoom(kerroin);
335    }
336    void LuoVesi(Vector paikka, double leveys, double korkeus)
337    {
338        PhysicsObject vesi = PhysicsObject.CreateStaticObject(leveys, korkeus);
339        vesi.Position = paikka;
340        //taso.Image = LoadImage("valo");
341        vesi.Color = Color.Aqua;
342        Add(vesi);
343    }
344    void LuoHiekka(Vector paikka, double leveys, double korkeus)
345    {
346        GameObject hiekka = new GameObject(leveys, korkeus);
347        hiekka.Position = paikka;
348        hiekka.Color = Color.Yellow;
349        Add(hiekka);
350
351    }
352    void KevytSeina(Vector paikka, double leveys, double korkeus)
353    {
354        PhysicsObject keytseina = new PhysicsObject(100.00, 300.00);
355        keytseina.Position = paikka;
356        keytseina.Color = Color.DarkBrown;
357        keytseina.MakeStatic();
358        Add(keytseina);
359    }
360    void KevytSeinaa(Vector paikka, double leveys, double korkeus)
361    {
362        PhysicsObject kevytseinaa = new PhysicsObject(300.00, 100.00);
363        kevytseinaa.Position = paikka;
364        kevytseinaa.Color = Color.DarkBrown;
365        kevytseinaa.MakeStatic();
366        Add(kevytseinaa);
367    }
368    void Seina(Vector paikka, double leveys, double korkeus)
369    {
370        PhysicsObject seina = new PhysicsObject(100.00, 300.00);
371        seina.Position = paikka;
372        seina.Color = Color.Gray;
373        seina.MakeStatic();
374        Add(seina);
375    }
376    void Seinaa(Vector paikka, double leveys, double korkeus)
377    {
378        PhysicsObject seinaa = new PhysicsObject(200.00, 100.00);
379        seinaa.Position = paikka;
380        seinaa.Color = Color.Gray;
381        seinaa.MakeStatic();
382        Add(seinaa);
383
384
385
386    }
387    void Ovi(Vector paikka, double leveys, double korkeus)
388    {
389        PhysicsObject ovi = new PhysicsObject(200.00, 10.00);
390        ovi.Position = paikka;
391        ovi.Color = Color.DarkBrown;
392        //ovi.MakeStatic();
393        Add(ovi);
394
395        AxleJoint liitos = new AxleJoint(ovi, ovi.Position + new Vector(80, 0));
396        Add(liitos);
397
398
399
400    }
401    void Teleportti(Vector paikka, double leveys, double korkeus)
402        {
403        PhysicsObject teleportti = new PhysicsObject(100.00, 100.00);
404        teleportti.Position = paikka;
405        teleportti.Color = Color.BloodRed;
406        teleportti.MakeStatic();
407        Add(teleportti);
408        teleportti.Tag = "teleportti"; 
409
410
411    }
412    void Luola(PhysicsObject pelaaja, PhysicsObject teleportti)
413    {
414        kenttanimi = "luola";
415        Begin();
416    }
417    void Puut(Vector paikka, double leveys, double korkeus)
418    {
419
420       
421   
422        Puu puu = new Puu(175.0, 225.0);
423        puu.Tag = "puu";
424        puu.Position = paikka;
425        puu.CanRotate = false;
426        puu.Restitution = 1.0;
427        puu.MakeStatic();
428        puu.Image = LoadImage("puu");
429
430        AddCollisionHandler(puu, "kirves", CollisionHandler.AddMeterValue(puu.ElamaLaskuri, -1));
431        Add(puu);
432       
433
434
435
436
437
438   
439
440    }
441    void Kivi(Vector paikka, double leveys, double korkeus)
442    {
443        Kivi kivi = new Kivi(leveys -1, korkeus -1);
444        kivi.Tag = "kivi";
445        kivi.Position = paikka;
446        //kivi.CanRotate = false;
447        //kivi.Restitution = 1.0;
448        kivi.MakeStatic();
449        //kivi.IgnoresCollisionResponse = true;
450        kivi.Image = LoadImage("kivi");
451
452        AddCollisionHandler(kivi, "hakku", CollisionHandler.AddMeterValue(kivi.ElamaLaskuri, -1));
453
454        Add(kivi);
455
456
457
458    }
459    void Kaytatyokalua()
460    {
461        if (valittutyokalu == 1)
462        {
463            AmmuAseella(laserAse);
464        }
465        if(valittutyokalu == 2)
466        {
467            kirves();
468
469        }
470        if(valittutyokalu == 3)
471        {
472            Hakku();
473        }
474        if(valittutyokalu == 4)
475        {
476            Keihas();
477
478        }
479    }
480    void ValitseTyokalu(int tyokalu)
481    {
482        valittutyokalu = tyokalu;
483    }
484    void kirves()
485    {
486        PhysicsObject kirves = new PhysicsObject(40, 40);
487
488        kirves.Image = LoadImage("kirves");
489        kirves.Angle = pelaaja.Angle;
490        kirves.Position = pelaaja.Position + pelaaja.Angle.GetVector()*50;
491        kirves.Tag = "kirves";
492        kirves.LifetimeLeft = TimeSpan.FromSeconds(0.1);
493
494       
495
496        Add(kirves);
497    }
498    void Lyovihollista(PhysicsObject vihollinen, PhysicsObject kirves)
499    {
500        //if ((vihollinen as Vihu).ajastin != null)
501        (vihollinen as Vihu).ajastin.Stop();
502        (vihollinen as Vihu).ElamaLaskuri.AddValue (-2);
503    }
504    void Talo(PhysicsObject pelaaja, PhysicsObject talo)
505    {
506        kenttanimi = "littlehouse";
507        Begin();
508
509    }
510    void TAlo(Vector paikka, double leveys, double korkeus)
511    {
512        PhysicsObject talo = new PhysicsObject(leveys, korkeus);
513        talo.Position = paikka;
514        talo.Tag = "talo";
515        talo.Image = LoadImage("pixel house");
516        talo.MakeStatic();
517        Add(talo);
518
519    }
520    void Keihas()
521    {
522        PhysicsObject keihas = new PhysicsObject(10, 60);
523        keihas.Image = LoadImage("keihas");
524        keihas.Angle = pelaaja.Angle + Angle.FromDegrees(-90);
525        keihas.Position = pelaaja.Position + pelaaja.Angle.GetVector() * 50;
526        keihas.Tag = "keihas";
527        keihas.LifetimeLeft = TimeSpan.FromSeconds(0.1);
528        keihas.Velocity = pelaaja.Angle.GetVector() * 200;
529        Add(keihas);
530
531
532    }
533    void Hakku()
534    {
535        PhysicsObject hakku = new PhysicsObject(40, 40);
536        hakku.Image = LoadImage("hakku");
537        hakku.Angle = pelaaja.Angle + Angle.FromDegrees(60);
538        hakku.Position = pelaaja.Position + pelaaja.Angle.GetVector() * 50;
539        hakku.Tag = "hakku";
540        hakku.LifetimeLeft = TimeSpan.FromSeconds(0.1);
541        hakku.TextureWrapSize = new Vector(1,-1);
542        Add(hakku);
543
544
545
546    }
547    void KilpiPaalle()
548    {
549
550       
551        puolustaa = true;
552
553        Kilpi = new GameObject(40, 40);
554        Kilpi.Image = LoadImage("Kilpi");
555        Kilpi.Angle = pelaaja.Angle;
556        //Kilpi.Position = pelaaja.Position;
557        Kilpi.X = 10;
558        Kilpi.Tag = "Kilpi";
559        //Kilpi.LifetimeLeft = TimeSpan.FromSeconds(0.1);
560        Kilpi.TextureWrapSize = new Vector(1, -1);
561        pelaaja.Add(Kilpi);
562        //Kilpi.IgnoresCollisionResponse = true;
563       
564    }
565
566    void Kilpipois()
567    {
568        puolustaa = false;
569        Kilpi.Destroy();
570
571    }
572}
Note: See TracBrowser for help on using the repository browser.