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

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