source: 2013/24/AleksanteriV/Protokolla236/Protokolla236/Protokolla236/Protokolla236.cs @ 4168

Revision 4168, 17.1 KB checked in by alvirmas, 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
9// apuva lista:
10
11public class Protokolla236 : PhysicsGame
12{
13
14    Image tausta = LoadImage("tausta02");
15
16    Image pelaajankuva = LoadImage("pelaaja1.0");
17
18    Image taso2 = LoadImage("taso2");
19    Image taso3 = LoadImage("taso3");
20    Image taso4 = LoadImage("taso4");
21    private Image[] tasoanim = LoadImages("taso1", "taso1.1", "taso1.2", "taso1.3", "taso1", "taso1", "taso1.3", "taso1", "taso1.1");
22    private Image[] liekkianim = LoadImages("liekki1.1", "liekki1.2");
23    private Image[] taso5anim = LoadImages("taso5.1", "taso5.2", "taso5.3", "taso5.4", "taso5.5", "taso5.6", "taso5.7");
24    private Image[] porttianim = LoadImages("portti01", "portti02", "portti03", "portti04");
25
26    Image Block021 = LoadImage("Block2.1");
27    Image BlockMusta = LoadImage("Blockmusta");
28    Image Blocklasi = LoadImage("Blocklasi");
29    Image Block121 = LoadImage("Block121");
30    private Image[] Blockanim = LoadImages("Block1.1", "Block1.2", "Block1.3", "Block1.2");
31    private Image[] Block06anim = LoadImages("Block06", "Block061", "Block062", "Block063","Block064","Block063","Block062","Block063","Block061");
32
33    private Image[] vihu1 = LoadImages("vihu01", "vihu02");
34    private Image[] vihu2 = LoadImages("vihu05", "vihu051", "vihu052", "vihu053", "vihu054");
35    private Image[] vihu3 = LoadImages("vihu031", "vihu032", "vihu033");
36    private Image[] vihu4 = LoadImages("vihu041", "vihu042", "vihu043", "vihu042");
37    private Image[] sikioanim = LoadImages("sikio01", "sikio02", "sikio03", "sikio02");
38
39    private Image[] tasoliekkianim = LoadImages("taso23.1", "taso23.2", "taso23.3");
40   
41    SoundEffect raketti = LoadSoundEffect("raketti");
42    List<Pelaaja> pelaajat = new List<Pelaaja>();
43    Timer MessageDisplaynAjastin;
44
45    //AssaultRifle pelaajan1Ase;
46    SoundEffect laser = LoadSoundEffect("lasershot");
47    private Image[] ammusanim = LoadImages("ammus", "ammus");
48
49    private string[] soitin = { "nitrome - bullethead", "nitrome - enemy 585 3", "nitrome - N.M.D" };
50
51
52    int kenttaNro = 1;
53
54   
55
56
57    public override void Begin()
58    {
59        MessageDisplay.Position += new Vector(Screen.Width / 2, 0);
60       
61        MultiSelectWindow alkuValikko = new MultiSelectWindow("Pelin alkuvalikko",
62"yksinpeli tarina (1P)","selviytyminen (2P)", "Lopeta");
63        Add(alkuValikko);
64
65        alkuValikko.AddItemHandler(0, AloitaPeli);
66        alkuValikko.AddItemHandler(1, selviytyminen);
67        alkuValikko.AddItemHandler(2, Exit);
68        MediaPlayer.Play(soitin[0]);
69       
70    }
71    void AloitaPeli()
72    {
73        ClearAll();
74
75        seuraavakentta();
76
77        MediaPlayer.IsRepeating = true;
78
79        Keyboard.Listen(Key.F1, ButtonState.Pressed, Begin, null);
80        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, null);
81    }
82
83    void selviytyminen()
84    {
85        MediaPlayer.Play(soitin[2]);
86        kenttaNro = 5;
87        AloitaPeli();
88    }
89
90    void luokentta(string kenttakuva)
91    {
92        ColorTileMap ruudut = ColorTileMap.FromLevelAsset(kenttakuva);
93        //FFA8AC
94        ruudut.SetTileMethod(Color.FromHexCode("00FF00"), luopelaaja1);
95        ruudut.SetTileMethod(Color.FromHexCode("00FFC5"), luopelaaja2);
96        ruudut.SetTileMethod(Color.FromHexCode("000000"), luotaso, new Animation(tasoanim));
97        ruudut.SetTileMethod(Color.FromHexCode("FFFF00"), luotaso, (Animation)taso3);
98        ruudut.SetTileMethod(Color.FromHexCode("54FFEB"), luotaso, (Animation)taso4);
99        ruudut.SetTileMethod(Color.FromHexCode("FF0087"), luotaso, new Animation(taso5anim));
100        ruudut.SetTileMethod(Color.FromHexCode("0000FF"), luotaso, new Animation(tasoliekkianim));
101        ruudut.SetTileMethod(Color.FromHexCode("D9FF93"), luotaso, (Animation)Blocklasi);
102        ruudut.SetTileMethod(Color.FromHexCode("FF42C0"), luotausta, new Animation(Blockanim));
103        ruudut.SetTileMethod(Color.FromHexCode("B7FF9E"), luotausta, new Animation(Block06anim));
104        ruudut.SetTileMethod(Color.FromHexCode("42B9FF"), luotausta, (Animation)BlockMusta);
105        ruudut.SetTileMethod(Color.FromHexCode("00FF90"), luotausta, (Animation)Block021);
106        ruudut.SetTileMethod(Color.FromHexCode("478DFF"), luotausta, (Animation)Block121);
107        ruudut.SetTileMethod(Color.FromHexCode("FF0000"), luovihu, new Animation(vihu2));
108        ruudut.SetTileMethod(Color.FromHexCode("FF5700"), luovihu, new Animation(vihu3));
109        ruudut.SetTileMethod(Color.FromHexCode("FF5711"), luovihu, new Animation(vihu4));
110        ruudut.SetTileMethod(Color.FromHexCode("A860FF"), luoportti, new Animation(porttianim));
111        ruudut.SetTileMethod(Color.FromHexCode("BD87FF"), luoportti2, new Animation(porttianim));
112        ruudut.SetTileMethod(Color.FromHexCode("6DFF81"), luoportti3, new Animation(porttianim));
113        ruudut.SetTileMethod(Color.FromHexCode("FFA8AC"), luoportti4, new Animation(porttianim));
114        ruudut.Execute(50, 50);
115
116        Gravity = new Vector(0.0, -200.0);
117        Level.CreateBorders(0.5, true);
118       
119        Camera.Follow(pelaajat.ToArray());
120    }
121
122   
123
124    void seuraavakentta()
125    {
126        ClearAll();
127        pelaajat.Clear();
128
129        if (kenttaNro == 1) luokentta("kenttatest01");
130        else if (kenttaNro == 2) luokentta("kenttatest11");
131        else if (kenttaNro == 3) luokentta("kentta3");
132        else if (kenttaNro == 4) luokentta("kentta5");
133        else if (kenttaNro == 5) luokentta("kentta121");
134        else if (kenttaNro == 6) luokentta("kentta1");
135
136    }
137    void luoportti(Vector paikka, double leveys, double korkeus, Animation kuva)
138    {
139        PhysicsObject portti = PhysicsObject.CreateStaticObject(leveys, korkeus);
140        portti.Position = paikka;
141        portti.Tag = "portti";
142        Add(portti);
143        portti.Animation = kuva;
144        portti.Animation.Start();
145        portti.Animation.FPS = RandomGen.NextDouble(3.0, 7.0);
146    }
147    void luoportti2(Vector paikka, double leveys, double korkeus, Animation kuva)
148    {
149        PhysicsObject portti2 = PhysicsObject.CreateStaticObject(leveys, korkeus);
150        portti2.Position = paikka;
151        portti2.Tag = "portti2";
152        Add(portti2);
153        portti2.Animation = kuva;
154        portti2.Animation.Start();
155        portti2.Animation.FPS = RandomGen.NextDouble(3.0, 7.0);
156    }
157    void luoportti3(Vector paikka, double leveys, double korkeus, Animation kuva)
158    {
159        PhysicsObject portti3 = PhysicsObject.CreateStaticObject(leveys, korkeus);
160        portti3.Position = paikka;
161        portti3.Tag = "portti3";
162        Add(portti3);
163        portti3.Animation = kuva;
164        portti3.Animation.Start();
165        portti3.Animation.FPS = RandomGen.NextDouble(3.0, 7.0);
166    }
167    void luoportti4(Vector paikka, double leveys, double korkeus, Animation kuva)
168    {
169        PhysicsObject portti3 = PhysicsObject.CreateStaticObject(leveys, korkeus);
170        portti3.Position = paikka;
171        portti3.Tag = "portti4";
172        Add(portti3);
173        portti3.Animation = kuva;
174        portti3.Animation.Start();
175        portti3.Animation.FPS = RandomGen.NextDouble(3.0, 7.0);
176    }
177
178
179    void portti(PhysicsObject pelaaja, PhysicsObject portti)
180    {
181        if (portti.Tag.Equals("portti4"))
182        {
183            kenttaNro = 6;
184            seuraavakentta();
185        }
186
187        else if (portti.Tag.Equals("portti3"))
188        {
189            kenttaNro = 4;
190            seuraavakentta();
191        }
192         else if (portti.Tag.Equals("portti2"))
193        {
194            kenttaNro = 2;
195            seuraavakentta();
196        }
197        else kenttaNro = 3;
198        seuraavakentta();
199       
200       
201    }
202
203
204
205    void luotaso(Vector paikka, double leveys, double korkeus, Animation kuva)
206    {
207        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
208        taso.Position = paikka;
209        taso.Tag = "taso";
210        Add(taso);
211        taso.Animation = kuva;
212        taso.Animation.Start();
213        taso.Animation.FPS = RandomGen.NextDouble(3.0, 7.0);
214    }
215
216    void luotausta(Vector paikka, double leveys, double korkeus, Animation kuva)
217    {
218        GameObject Block = new GameObject(50, 50);
219        Block.Position = paikka;
220        Add(Block, -2);
221        Block.Animation = kuva;
222        Block.Animation.Start();
223        Block.Animation.FPS = 5;
224    }
225
226
227    void LuoElamaLaskuri(Pelaaja pelaaja, double x, double y, Color vari)
228    {
229        ProgressBar elamaPalkki = new ProgressBar(150, 20);
230        elamaPalkki.X = x;
231        elamaPalkki.BarColor = vari;
232        elamaPalkki.Y = y;
233        elamaPalkki.BindTo(pelaaja.ElamaLaskuri);
234        elamaPalkki.BorderColor = Color.Black;
235        Add(elamaPalkki);
236    }
237
238    void PelaajaOsuu(PhysicsObject pel, PhysicsObject kohde)
239    {
240        if (!(pel is Pelaaja)) return;
241        Pelaaja pelaaja = (Pelaaja)pel;
242        pelaaja.ElamaLaskuri.Value--;
243    }
244
245    void TekstiaDisplaylle(string tekst)
246    {
247        MessageDisplay.Add(tekst);
248        MessageDisplaynAjastin = new Timer();
249        MessageDisplaynAjastin.Timeout += delegate { MessageDisplay.Clear(); };
250        MessageDisplaynAjastin.Interval = 5;
251        MessageDisplaynAjastin.Start(1);
252    }
253
254
255    void ElamaLoppui()
256    {
257        pelaajat.Clear();
258
259        TekstiaDisplaylle("Kuolit!");
260
261        kenttaNro = 1;
262        seuraavakentta();
263    }
264
265
266    void ElamaLoppuiSurvivalissa()
267    {
268        foreach (var item in pelaajat)
269        {
270            if (!item.IsDestroyed)
271                item.Destroy();
272        }
273        pelaajat.Clear();
274        TekstiaDisplaylle("Kuolitte!");
275        seuraavakentta();
276
277
278    }
279
280
281    Pelaaja alustaPelaaja(Vector paikka)
282    {
283        Pelaaja pelaaja = new Pelaaja(50, 50);
284        if(kenttaNro == 5)
285            pelaaja.ElamaLaskuri.LowerLimit += delegate { ElamaLoppuiSurvivalissa(); };
286        else pelaaja.ElamaLaskuri.LowerLimit += delegate { ElamaLoppui();  };
287        pelaaja.Position = paikka;
288        pelaaja.CanRotate = false;
289        Camera.StayInLevel = true;
290        pelaaja.Shape = Shape.FromImage(pelaajankuva);
291        pelaaja.Tag = "pelaaja";
292        pelaaja.Restitution = 0.5;
293        return pelaaja;
294    }
295
296    Pelaaja luoPelaaja(Vector paikka, double leveys, double korkeus)
297    {
298        Pelaaja pelaaja = alustaPelaaja(paikka);
299        Add(pelaaja);
300
301        AddCollisionHandler(pelaaja, "portti", portti);
302        AddCollisionHandler(pelaaja, "portti2", portti);
303        AddCollisionHandler(pelaaja, "portti3", portti);
304        AddCollisionHandler(pelaaja, "portti4", portti);
305        AddCollisionHandler(pelaaja, "vihu", PelaajaOsuu);
306        AddCollisionHandler(pelaaja, "sikio", PelaajaOsuu);
307        AddCollisionHandler(pelaaja, "taso", PelaajaOsuu);
308         
309        AssaultRifle pelaajanAse = new AssaultRifle(30, 10);
310        pelaajanAse.IsVisible = false;
311        pelaajanAse.Angle = Angle.RightAngle;
312        pelaajanAse.AttackSound = laser;
313        pelaajanAse.Ammo.Value = 1000;
314        pelaajanAse.Power.DefaultValue = 200;
315
316        pelaajanAse.ProjectileCollision = AmmusOsui;
317
318        pelaaja.Add(pelaajanAse);
319        pelaaja.Ase = pelaajanAse;
320
321
322        GameObject liekki = new GameObject(50, 50);
323        liekki.Animation = new Animation(liekkianim);
324        liekki.IsVisible = false;
325        liekki.Animation.Start();
326        pelaaja.Add(liekki);
327        liekki.Y = -25;
328
329        GameObject tausta1 = new GameObject(Level.Width, Level.Height);
330        tausta1.Image = tausta;
331
332        pelaaja.Liekki = liekki;
333
334
335        Add(tausta1, -3);
336        Layers[-3].RelativeTransition = new Vector(0.5, 0.5);
337        pelaajat.Add(pelaaja);
338        return pelaaja;
339
340    }
341
342
343
344
345
346    void luopelaaja1(Vector paikka, double leveys, double korkeus)
347    {
348        Pelaaja pelaaja = luoPelaaja(paikka, leveys, korkeus);
349        LuoElamaLaskuri(pelaaja, Screen.Left + 150, Screen.Top - 20, Color.Red);
350        pelaaja.Image = LoadImage("pelaaja1.0");
351
352        Keyboard.Listen(Key.Left, ButtonState.Down, kaannaPelaajaa, null, 5.0, pelaaja);
353        Keyboard.Listen(Key.Right, ButtonState.Down, kaannaPelaajaa, null, -5.0, pelaaja);
354        Keyboard.Listen(Key.Up, ButtonState.Down, LiikutaPelaajaa, null, 900.0, pelaaja);
355        Keyboard.Listen(Key.Space, ButtonState.Down, AmmuAseella, null, pelaaja.Ase);
356
357        //-----------------------------------------------------------------
358
359        Keyboard.Listen(Key.Up, ButtonState.Down, liekkianimaatio, null, pelaaja.Liekki, true);
360        Keyboard.Listen(Key.Up, ButtonState.Released, liekkianimaatio, null, pelaaja.Liekki, false);
361    }
362
363    void luopelaaja2(Vector paikka, double leveys, double korkeus)
364    {
365        Pelaaja pelaaja = luoPelaaja(paikka, leveys, korkeus);
366        LuoElamaLaskuri(pelaaja, Screen.Right - 150, Screen.Top - 20, Color.Blue);
367        pelaaja.Image = LoadImage("pelaaja2.0");
368        //-2-2-2-2-2-2-2--22-2-2-2-2-22-2-22-2-22-22-2-22-22--22-22-2-2-2-2-2-2-22-22-2----------
369        Keyboard.Listen(Key.A, ButtonState.Down, kaannaPelaajaa, null, 5.0, pelaaja);
370        Keyboard.Listen(Key.D, ButtonState.Down, kaannaPelaajaa, null, -5.0, pelaaja);
371        Keyboard.Listen(Key.W, ButtonState.Down, LiikutaPelaajaa, null, 900.0, pelaaja);
372        Keyboard.Listen(Key.LeftControl, ButtonState.Down, AmmuAseella, null, pelaaja.Ase);
373
374        //-----------------------------------------------------------------
375        Keyboard.Listen(Key.W, ButtonState.Down, liekkianimaatio, null, pelaaja.Liekki, true);
376        Keyboard.Listen(Key.W, ButtonState.Released, liekkianimaatio, null, pelaaja.Liekki, false);
377    }
378
379    void AmmuAseella(AssaultRifle ase)
380    {
381        PhysicsObject ammus = ase.Shoot();
382        if (ammus != null)
383        {
384            ammus.Angle = ase.AbsoluteAngle - Angle.RightAngle;
385            ammus.Size *= 3;
386
387            ammus.Animation = new Animation(ammusanim);
388            ammus.Animation.Start();
389            ammus.Animation.FPS = 3;
390        }
391    }
392
393    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
394    {
395        ammus.Destroy();
396        if (kohde.Tag.ToString() == "vihu")
397        {
398            kohde.Destroy();
399
400        }
401        else if (kohde.Tag.ToString() == "sikio")
402        {
403            kohde.Destroy();
404        }
405
406    }
407
408    void liekkianimaatio(GameObject liekki, bool totuus)
409    {
410        liekki.IsVisible = totuus;
411        if (totuus)
412        {
413
414            if (!raketti.IsPlaying)
415            {
416                raketti.Play();
417            }
418        }
419        else
420        {
421            raketti.Stop();
422        }
423    }
424
425    void kaannaPelaajaa(double kulmanopeus, PhysicsObject pelaaja)
426    {
427        pelaaja.Angle += Angle.FromDegrees(kulmanopeus);
428    }
429    void LiikutaPelaajaa(double nopeus, PhysicsObject pelaaja1)
430    {
431        pelaaja1.Push(Vector.FromLengthAndAngle(nopeus, pelaaja1.Angle + Angle.RightAngle));
432    }
433
434    void luotaso(Vector paikka, double leveys, double korkeus)
435    {
436
437    }
438
439    void luovihu(Vector paikka, double leveys, double korkeus, Animation kuva)
440    {
441        PhysicsObject vihu = new PhysicsObject(50, 50);
442        vihu.Shape = Shape.Circle;
443        vihu.Animation = kuva;
444        vihu.Position = paikka;
445        vihu.Tag = "vihu";
446        vihu.AngularDamping = 0.1;
447        vihu.IgnoresGravity = true;
448
449
450        Add(vihu, 1);
451
452        RandomMoverBrain satunnaisAivot = new RandomMoverBrain(50);
453        satunnaisAivot.ChangeMovementSeconds = 5;
454        vihu.Brain = satunnaisAivot;
455        vihu.Animation.Start();
456        vihu.Animation.FPS = 4;
457
458        AddCollisionHandler(vihu, "vihu", luovihuosuma);
459    }
460
461    void luovihuosuma(PhysicsObject vihu, PhysicsObject kohde)
462    {
463        if (kohde.Tag.ToString() == "vihu") luosikio(vihu.Position, 50, 50, new Animation(sikioanim));
464    }
465
466    void luosikio(Vector paikka, double leveys, double korkeus, Animation kuva)
467    {
468        PhysicsObject sikio = new PhysicsObject(30, 30);
469        sikio.Shape = Shape.Circle;
470        sikio.Animation = kuva;
471        sikio.Position = paikka;
472        sikio.Tag = "sikio";
473        sikio.AngularDamping = 0.1;
474        sikio.IgnoresGravity = true;
475
476        Add(sikio, 1);
477
478        RandomMoverBrain satunnaisAivot = new RandomMoverBrain(50);
479        satunnaisAivot.ChangeMovementSeconds = 5;
480        sikio.Brain = satunnaisAivot;
481        sikio.Animation.Start();
482        sikio.Animation.FPS = 4;
483    }
484
485
486}
487
488public class Pelaaja : PhysicsObject
489{
490    AssaultRifle ase;
491    GameObject liekki;
492    DoubleMeter elamaLaskuri;
493   public AssaultRifle Ase { get { if (ase != null) return ase; else throw new Exception("Alustus ei tapahtunut ajoissa!"); } set { ase = value; } }
494   public GameObject Liekki { get { if (liekki != null) return liekki; else throw new Exception("Alustus ei tapahtunut ajoissa!"); } set { liekki = value; } }
495   public DoubleMeter ElamaLaskuri { get { return elamaLaskuri; } }
496    public Pelaaja(double leveys, double korkeus)
497    :base(leveys, korkeus)
498    {
499        elamaLaskuri = new DoubleMeter(10, 0, 10);
500       
501    }
502
503
504
505}
Note: See TracBrowser for help on using the repository browser.