source: 2015/23/MattiP/Peli1/Peli1/Peli1/Peli1.cs @ 5899

Revision 5899, 17.5 KB checked in by sieerinn, 5 years ago (diff)
Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Widgets;
7
8
9
10
11
12
13
14public class Peli1 : PhysicsGame
15{
16    DoubleMeter elamaLaskuri;
17    DoubleMeter elamaLaskuri2;
18    RandomMoverBrain satunnaisAivot = new RandomMoverBrain(200);
19   
20    GameObject Over;
21    PlatformCharacter hat;
22    List<PhysicsObject> ovet = new List<PhysicsObject>();
23    /*Image Kuva = LoadImage("LOL_Face");
24    Image Kuva2 = LoadImage("background");*/
25    //Image portal_image = LoadImage("portal");
26    /*Image door_texture = LoadImage("images");
27    Image box_texture = LoadImage("box");*/
28    Image background = LoadImage("city");
29    /*Image e_button = LoadImage("E");*/
30    Image metal_texture = LoadImage("metal");
31    Image metal_texture_lower = LoadImage("metal2");
32    Image block = LoadImage("block");
33    Image down = LoadImage("down");
34    Image lazor = LoadImage("lazor");
35    //Image ak = LoadImage("ak47");
36    Image enemy_texture1 = LoadImage("hat");
37    Image[] PelaajanKuvat = LoadImages("sprite1", "sprite2", "sprite3", "sprite4", "sprite5", "sprite6", "sprite7", "sprite8", "sprite9", "sprite10");
38    Image[] Jump = LoadImages("jump");
39    Image[] Fall = LoadImages("fall");
40    Image PelaajanKuva = LoadImage("sprite0");
41    Image Nuoli = LoadImage("arrow");
42    LaserGun ak47;
43    Image kupla = LoadImage("bubble");
44    Image enemy = LoadImage("hat");
45    Image[] skeleton = LoadImages("skeleton2", "skeleton3", "skeleton4", "skeleton5");
46    Image skeleton_idle = LoadImage("skeleton1");
47    Image gamover = LoadImage("gameover2");
48    PhysicsObject boss;
49    Image boss_image = LoadImage("boss");
50    Image JetPack = LoadImage("JetPack");
51    Image youwin = LoadImage("win");
52    GameObject win;
53    PhysicsObject metal2;
54    AssaultRifle boss_ase;
55    Image explo = LoadImage("explosion");
56    PlatformCharacter obj;
57    double jet_interval = 0.01;
58    int kenttaNro = 1;
59    bool jetpack = true;
60    public override void Begin()
61    {
62        satunnaisAivot.ChangeMovementSeconds = 3;
63        satunnaisAivot.WanderPosition = new Vector(200, 300);
64        MediaPlayer.Play("darude");
65        MediaPlayer.IsRepeating = false;
66        Mouse.IsCursorVisible = true;
67        IsFullScreen = true;
68        ak47 = new LaserGun(1, 1);
69        boss_ase = new AssaultRifle(1, 1);
70        //Ammo
71        ak47.Ammo.Value = 5000;
72        ak47.CanHitOwner = false;
73        boss_ase.Ammo.Value = 500;
74       
75       
76       
77
78   
79        //ak47.ProjectileCollision = AmmusOsui;
80        //ak47.Image = ak;
81        ak47.FireRate = 10;
82       
83
84
85
86
87
88
89
90        //Map
91        SeuraavaKentta();
92       
93       
94
95        MessageDisplay.Add("i have to 360*");
96        MessageDisplay.Add("To get trough these Russians");
97
98
99       
100
101    }
102
103   
104    void LiikutaPelaajaa(double suunta)
105    {
106        obj.Walk(suunta);
107        if (suunta < 0)
108        {
109            ak47.AbsoluteAngle = Angle.FromDegrees(-180.0);
110        }
111        else
112        { 
113            ak47.AbsoluteAngle = Angle.FromDegrees(0.0);
114        }
115       
116    }
117    void KaannaPelaajaa(Vector vektori)
118    {
119        obj.Angle += Angle.FromDegrees(300);
120    }
121
122    void LisaaTaso(Vector paikka, double leveys, double korkeus, Color vari)
123    {
124        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
125        taso.Position = paikka;
126        taso.Image = block;
127        RandomGen.NextColor();
128       
129        Add(taso);
130    }
131    void LisaaPortal(Vector paikka, double leveys, double korkeus, Color vari)
132    {
133        PhysicsObject portal = PhysicsObject.CreateStaticObject(leveys, korkeus);
134        portal.Position = paikka;
135        portal.Image = block;
136        portal.IgnoresCollisionResponse = true;
137       
138
139
140        //RemoveCollisionHandlers();
141        Add(portal);
142    }
143    void LisaaSpawn(Vector paikka, double leveys, double korkeus, Color vari)
144    {
145        PhysicsObject metal = PhysicsObject.CreateStaticObject(leveys, korkeus);
146        metal.Position = paikka;
147        //metal.Image = metal_texture;
148        //RemoveCollisionHandlers();
149        Add(metal);
150        Level.AmbientLight = 0.4;
151        metal.IgnoresCollisionResponse = true;
152        Gravity = new Vector(0, -800);
153        obj = new PlatformCharacter(20.5, 24.5);
154        //obj.Image = Kuva;
155        Add(obj, 3);
156        obj.X = paikka.X;
157        obj.Y = paikka.Y;
158        obj.Add(ak47);
159        obj.Image = PelaajanKuva;
160        obj.AnimWalk = new Animation(PelaajanKuvat);
161        obj.AnimWalk.FPS = 10;
162        obj.AnimIdle = new Animation(PelaajanKuva);
163        obj.AnimJump = new Animation(Jump);
164        obj.AnimFall = new Animation(Fall);
165        obj.Tag = "pelaaja";
166        obj.AnimIdle.FPS = 12;
167        LuoElamaLaskuri();
168       
169       
170        Camera.StayInLevel = true;
171        //Camera.ZoomFactor = 5.0;
172        Camera.Zoom(2.5);
173       
174
175       
176
177       
178
179        //Mouse.Listen(MouseButton.Right, ButtonState.Pressed, LiikuHiirenSijaintiin, "Liikuta Pelaaja hiiren sijaintiin");
180        //Mouse.Listen(MouseButton.Left, ButtonState.Down, AmmuAseella, "ammu", obj);
181        Keyboard.Listen(Key.Space, ButtonState.Pressed, AmmuAseella, "ammu", obj);
182        Keyboard.Listen(Key.Y, ButtonState.Down, Jet, null);
183        Keyboard.Listen(Key.Y, ButtonState.Pressed, Jet_anim, null);
184        Keyboard.Listen(Key.Y, ButtonState.Released, Jet_anim_reset, null);
185        // Ohjaus
186        //Level.Background.Image = background;
187        Level.Background.Color = Color.Black;
188        //Level.Background.FitToLevel();
189        Camera.Follow(obj);
190       
191        Keyboard.Listen(Key.A, ButtonState.Down, LiikutaPelaajaa, null, -200.0);
192        //Keyboard.Listen(Key.G, ButtonState.Pressed, KaannaPelaajaa, null, new Vector(-1000, 0));
193        Keyboard.Listen(Key.F, ButtonState.Down, hidastaPelaajaa, null);
194        Keyboard.Listen(Key.F, ButtonState.Released, palautaPelaajaa, null);
195        Keyboard.Listen(Key.D, ButtonState.Down, LiikutaPelaajaa, null, 200.0);
196        //Keyboard.Listen(Key.W, ButtonState.Down, LiikutaPelaajaa, null, ;
197        //Keyboard.Listen(Key.S, ButtonState.Down, LiikutaPelaajaa, null;
198        Keyboard.Listen(Key.W, ButtonState.Pressed, hyppy, null);
199        //Mouse.ListenMovement(0.1, Tahtaa, "Tähtää aseella");
200
201       
202
203        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
204        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
205        AddCollisionHandler(obj, "ovi2", naytaE);
206        AddCollisionHandler(obj, "ovi", TormasiMaaliin);
207        AddCollisionHandler(obj, "kupla", LisaaBubbleKuva);
208        AddCollisionHandler(obj, "skeleton", VahennaHp);
209
210
211    }
212    void VahennaHp(PhysicsObject tormaaja, PhysicsObject kohde)
213    {
214        elamaLaskuri.Value -= 1;
215    }
216    void VahennaHp2(PhysicsObject tormaaja, PhysicsObject kohde)
217    {
218        elamaLaskuri2.Value -= 1;
219    }
220
221    void LisaaBubbleKuva(PhysicsObject tormaaja, PhysicsObject kohde)
222    {
223        GameObject bubble = new GameObject(26, 41);
224       bubble.X = obj.X + 40;
225       bubble.Y = obj.Y + 50;
226       bubble.Width = 50;
227       bubble.Height = 62.5; 
228       bubble.Image = kupla;
229       Add(bubble, 3);
230       bubble.LifetimeLeft = new TimeSpan(0, 0, 2);
231    }
232    void kuole(PhysicsObject a, PhysicsObject b)
233    {
234       
235        Over = new GameObject(gamover);
236        Over.Width = 100;
237        Over.Height = 100;
238
239        Add(Over);
240        Over.Position = obj.Position;
241        Level.AmbientLight = 0.3;
242        obj.Destroy();
243    }
244    void bosskuolee()
245    {
246
247        win = new GameObject(youwin);
248        win.Width = 100;
249        win.Height = 100;
250
251        Add(win);
252        win.Position = obj.Position;
253        Level.AmbientLight = 0.9;
254        boss.Destroy();
255        obj.Destroy();
256    }
257    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
258    {
259        ammus.Destroy();
260        ammus.Restitution = 0.0;
261        ammus.IgnoresCollisionWith(obj);
262       
263       
264    }
265    void Tahtaa(AnalogState hiirenLiike)
266    {
267        Vector suunta = (Mouse.PositionOnWorld - ak47.AbsolutePosition).Normalize();
268        ak47.Angle = suunta.Angle;
269    }
270    void AmmuAseella(PhysicsObject pelaaja)
271{
272    Animation Shoot = new Animation(Jump);
273        obj.PlayAnimation(Shoot);
274        PhysicsObject ammus = ak47.Shoot();
275
276
277       
278
279    if(ammus != null)
280    {
281
282        ammus.Size *= 2.0;
283        ammus.Shape = Shape.Circle;
284        ammus.MaximumLifetime = TimeSpan.FromSeconds(0.3);
285        AddCollisionHandler(ammus, "boss", VahennaHp2);
286        ammus.Image = lazor;
287    }
288}
289    void Boss_ammuAseella(PhysicsObject pelaaja)
290    {
291       
292        PhysicsObject ammus2 = boss_ase.Shoot();
293
294
295
296
297        if (ammus2 != null)
298        {
299
300            ammus2.Size *= 2.0;
301            ammus2.Shape = Shape.Circle;
302            ammus2.MaximumLifetime = TimeSpan.FromSeconds(5.0);
303            ammus2.Velocity = new Vector(-500.0, 0);
304            ammus2.KineticFriction = 1.0;
305            ammus2.LinearDamping = 0.9;
306            AddCollisionHandler(ammus2, obj, kuole);
307            ammus2.Image = explo;
308           
309        }
310    }
311    void LiikuHiirenSijaintiin()
312    {
313        //move 'obj' to cursor position when player clicks
314        obj.MoveTo(Mouse.PositionOnWorld, 120);
315       
316    }
317    void hyppy()
318    {
319        obj.Jump(410);
320    }
321    void Jet()
322    {
323
324        if (jetpack)
325        {
326
327            jetpack = false;
328            Timer ajastin = new Timer();
329            ajastin.Interval = jet_interval;
330            ajastin.Timeout += delegate
331            {
332                jetpack = true;
333            };
334            ajastin.Start(1);
335           
336            if (obj.Animation == obj.AnimFall ) {
337                jet_interval += 0.1;
338            }
339            else if (obj.Animation == obj.AnimIdle)
340            {
341                Timer ajastin2 = new Timer();
342                ajastin2.Interval = 4.0;
343                ajastin2.Timeout += delegate
344                {
345                    jet_interval = 0.01;
346                };
347                ajastin2.Start(1);                         
348            }
349
350            obj.Push(new Vector(0, 10000));
351
352        }
353       
354    }
355    void Jet_anim()
356    {
357        obj.AnimJump = new Animation(JetPack);
358        obj.AnimFall = new Animation(JetPack);
359
360    }
361    void Jet_anim_reset()
362    {
363        obj.AnimJump = new Animation(Jump);
364        obj.AnimFall = new Animation(Fall);
365    }
366    void luoHat(Vector paikka, double leveys, double korkeus)
367{
368    hat = new PlatformCharacter(100, 100);
369    hat.X = paikka.X;
370    hat.Y = paikka.Y;
371    hat.Width = 16;
372    hat.Height = 45;
373    hat.AnimWalk = new Animation(skeleton);
374    hat.Image = skeleton_idle;
375    hat.Tag = "skeleton";
376    hat.AnimWalk.FPS = 5;
377   
378    RandomMoverBrain satunnaisAivot = new RandomMoverBrain(200);
379    hat.Brain = satunnaisAivot;
380    Add(hat);
381}
382    void LuoElamaLaskuri()
383    {
384        elamaLaskuri = new DoubleMeter(10);
385        elamaLaskuri.MaxValue = 10;
386        elamaLaskuri.LowerLimit += delegate { kuole(new PhysicsObject(1, 1), new PhysicsObject(1, 1)); };
387
388        ProgressBar elamaPalkki = new ProgressBar(150, 20);
389        elamaPalkki.X = 0;
390        elamaPalkki.Y = Screen.Bottom + 20;
391        elamaPalkki.BindTo(elamaLaskuri);
392        Add(elamaPalkki);
393    }
394    void LuoElamaLaskuri2()
395    {
396        elamaLaskuri2 = new DoubleMeter(1000);
397        elamaLaskuri2.MaxValue = 1000;
398        elamaLaskuri2.LowerLimit += bosskuolee;
399
400        ProgressBar elamaPalkki = new ProgressBar(150, 20);
401        elamaPalkki.X = 0;
402        elamaPalkki.Y = Screen.Top - 20;
403        elamaPalkki.BindTo(elamaLaskuri2);
404        elamaPalkki.Width = 100;
405        Add(elamaPalkki);
406    }
407
408    void LisaaMetal2(Vector paikka, double leveys, double korkeus, Color vari)
409    {
410        metal2 = PhysicsObject.CreateStaticObject(leveys, korkeus);
411        metal2.Position = paikka;
412        metal2.Image = metal_texture;
413        //RemoveCollisionHandlers();
414        Add(metal2);
415        //Level.AmbientLight = 0.5;
416       
417        metal2.IgnoresCollisionResponse = true;
418    }
419    void LisaaBox(Vector paikka, double leveys, double korkeus)
420    {
421        PhysicsObject box = PhysicsObject.CreateStaticObject(leveys, korkeus);
422        box.Position = paikka;
423        //box.Image = box_texture;
424        Add(box);
425    }
426    void LisaaBoss(Vector paikka, double leveys, double korkeus)
427    {
428        boss = new PhysicsObject(leveys, korkeus);
429        boss.Position = paikka;
430        boss.Image = Image.Flip(boss_image);
431        //boss.Image = boss_image;
432        Add(boss);
433        boss.Add(boss_ase);
434        boss.AbsoluteAngle +=  Angle.FromDegrees(180);
435       
436        Timer boss_timer = new Timer();
437        boss_timer.Interval = 4.0;
438        boss_timer.Timeout += delegate { Boss_ammuAseella(boss); };
439        boss_timer.Start();
440        boss.Width = 100;
441        boss.Height = 100;
442        boss.Mass = 10000000000000000000;
443        LuoElamaLaskuri2();
444        boss.Tag = "boss";
445        MediaPlayer.Play("bossmusic");
446        //Camera.Zoom(2);
447    }
448    void LisaaDoor(Vector paikka, double leveys, double korkeus, Color vari)
449    {
450        PhysicsObject box = PhysicsObject.CreateStaticObject(leveys, korkeus);
451        box.Position = paikka;
452        box.Image = metal_texture;
453        box.Tag = "ovi";
454
455        Add(box);
456    }
457    void LisaaDoor2(Vector paikka, double leveys, double korkeus)
458    {
459        PhysicsObject box2 = PhysicsObject.CreateStaticObject(leveys, korkeus);
460
461        box2.Position = paikka;
462        box2.Image = metal_texture;
463        Add(box2);
464        ovet.Add(box2);
465        box2.Tag = "ovi2";
466        box2.IgnoresCollisionResponse = true;
467       
468
469    }
470    void LisaaFloor(Vector paikka, double leveys, double korkeus)
471    {
472        PhysicsObject floor = PhysicsObject.CreateStaticObject(leveys, korkeus);
473
474        floor.Position = paikka;
475        //floor.Image = floor_texture;
476        Add(floor);
477 }
478    void LisaaMetal3(Vector paikka, double leveys, double korkeus)
479    {
480        PhysicsObject metal3 = PhysicsObject.CreateStaticObject(leveys, korkeus);
481        metal3.IgnoresCollisionResponse = true;
482        metal3.Position = paikka;
483        metal3.Image = metal_texture_lower;
484        Add(metal3);
485    }
486    void LisaaBubble(Vector paikka, double leveys, double korkeus)
487    {
488        PhysicsObject metal3 = PhysicsObject.CreateStaticObject(leveys, korkeus);
489        metal3.IgnoresCollisionResponse = true;
490        metal3.Position = paikka;
491        metal3.Image = metal_texture;
492        Add(metal3);
493        metal3.Tag = "kupla";
494    }
495    void show_down(Vector paikka, double leveys, double korkeus)
496    {
497        PhysicsObject metal3 = PhysicsObject.CreateStaticObject(leveys, korkeus);
498        metal3.IgnoresCollisionResponse = true;
499        metal3.Position = paikka;
500        metal3.Image = down;
501        Add(metal3);
502    }
503    void SeuraavaKentta()
504    {
505        Keyboard.Clear();
506        RemoveCollisionHandlers();
507        ClearAll();
508        ovet.Clear();
509
510        if (kenttaNro == 1) LuoKentta("kentta1");
511        else if (kenttaNro == 2) LuoKentta("kentta2");
512        else if (kenttaNro == 3) LuoKentta("kentta3");
513        else if (kenttaNro == 4) LuoKentta("kentta4");
514        else if (kenttaNro == 5) LuoKentta("kentta5");
515        //Level.CreateBorders();
516
517
518
519
520    }
521    void naytaE(PhysicsObject tormaaja, PhysicsObject kohde)
522    {
523
524        GameObject nE = new GameObject(26, 41);
525        nE.X = kohde.X;
526        nE.Y = kohde.Y + 60;
527        nE.Image = Nuoli;
528        Add(nE, 3);
529        nE.LifetimeLeft = new TimeSpan(0, 0, 2);
530    }
531
532    void naytaKupla()
533    {
534
535        GameObject nEx = new GameObject(26, 41);
536        nEx.X = obj.X;
537        nEx.Y = obj.Y + 60;
538        nEx.Image = kupla;
539        Add(nEx, 3);
540        nEx.LifetimeLeft = new TimeSpan(0, 0, 2);
541    }
542   
543    void LuoKentta(string kenttaTiedostonNimi)
544    {
545        TileMap map = TileMap.FromLevelAsset(kenttaTiedostonNimi);
546 
547        map.SetTileMethod('b', LisaaTaso, Color.DarkBrown);
548        map.SetTileMethod('l', LisaaBoss);// B
549        map.SetTileMethod('d', LisaaPortal, Color.Brown); // Brick wall
550        map.SetTileMethod('x', LisaaDoor, Color.Beige);
551        map.SetTileMethod('z', LisaaDoor2);
552        map.SetTileMethod('f', LisaaFloor);
553        map.SetTileMethod('a', LisaaBubble);
554        map.SetTileMethod('m', LisaaSpawn, Color.Black);
555        map.SetTileMethod('-', LisaaMetal2, Color.Black);
556        map.SetTileMethod('w', show_down);
557        map.SetTileMethod('e', luoHat);
558       
559
560
561        map.Execute(45, 65);
562
563        //Luodaan kenttä tekstitiedostosta
564    }
565    void hidastaPelaajaa()
566    {
567        obj.KineticFriction = 900.0;
568        obj.LinearDamping = 0.001;
569        obj.AngularDamping = 0.001;
570        obj.AngularVelocity = 0.01;
571    }
572    void RikoOvet()
573    {
574        foreach (PhysicsObject ovi in ovet)
575        {           
576            LisaaMetal2(ovi.Position, ovi.Width, ovi.Height, Color.Black);
577            ovi.Destroy();
578        }
579    }
580    void palautaPelaajaa()
581    {
582        obj.KineticFriction = 1.0;
583        obj.LinearDamping = 0.9;
584    }
585    void TormasiMaaliin(PhysicsObject pelaaja, PhysicsObject maali)
586    {
587        //Kasvatetaan kenttänumeroa yhdellä ja siirrytään seuraavaan kenttään:
588        MessageDisplay.Add("Loading Level...");
589
590        kenttaNro++;
591        SeuraavaKentta();
592    }
593}
594
595
Note: See TracBrowser for help on using the repository browser.