source: 2014/27/JuhanaK/Avaruuspeli/Avaruuspeli/Avaruuspeli/Avaruuspeli.cs @ 5440

Revision 5440, 24.8 KB checked in by jumaalku, 7 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
9
10
11class Vihu : PlatformCharacter
12{
13    private IntMeter elamaLaskuri;
14    public IntMeter ElamaLaskuri { get { return elamaLaskuri; } }
15
16    public Vihu(int elama, double leveys, double korkeus)
17        : base(leveys, korkeus)
18    {
19        elamaLaskuri = new IntMeter(elama, 0, elama);
20       
21    }
22}
23/// <summary>
24/// Esinevalikko.
25/// </summary>
26class Inventory : Widget
27{
28    /// <summary>
29    /// Tapahtuma, kun esine on valittu.
30    /// </summary>
31    public event Action<PhysicsObject> ItemSelected;
32
33    /// <summary>
34    /// Luo uuden esinevalikon.
35    /// </summary>
36    public Inventory()
37        : base(new HorizontalLayout())
38    {
39    }
40
41    /// <summary>
42    /// Lisää esineen.
43    /// </summary>
44    /// <param name="item">Lisättävä esine.</param>
45    /// <param name="kuva">Esineen ikoni, joka näkyy valikossa.</param>
46    public void AddItem(PhysicsObject item, Image kuva)
47    {
48        PushButton icon = new PushButton(kuva);
49        Add(icon);
50        icon.Clicked += delegate() { SelectItem(item); };
51    }
52
53    void SelectItem(PhysicsObject item)
54    {
55        if (ItemSelected != null)
56        {
57            ItemSelected(item);
58        }
59    }
60}
61
62class Tykki : PhysicsObject
63{
64    public int taso = 1;
65    public AssaultRifle ase;
66    private IntMeter elamaLaskuri;
67    public IntMeter ElamaLaskuri { get { return elamaLaskuri; } }
68     
69    public Tykki(double leveys, double korkeus, int elama)
70        : base(leveys, korkeus)
71    {
72        elamaLaskuri = new IntMeter(elama, 0, elama);
73
74    }
75
76}
77
78public class Avaruuspeli : PhysicsGame
79{
80    private Animation OrkinKavely;
81    private Animation MonsteriKavely;
82    private Animation AlienKavely;
83
84    const double nopeus = 200;
85    const double hyppyNopeus = 750;
86    const int RUUDUN_KOKO = 40;
87
88    private int kieorrokset = 10;
89    DoubleMeter aaltoPalkki;
90    ProgressBar aaltoNaytto;
91    DoubleMeter alaspainLaskuri;
92    Timer aaltoAikaLaskuri;
93    private const int MAX_KIERROSAIKA = 300;
94
95    Timer aseidenAjastin;
96
97    List<Vihu> vihut = new List<Vihu>();
98
99    private Image[] Avaruuskävely = LoadImages("Avaruus saankari", "Avaruus saankari2");
100    private Image[] Monsterinkavelykuvat = LoadImages("Monsteri", "Monsteri2");
101    private Image[] Alienkavelykuvat = LoadImages("Alien", "Alien2");
102
103    PlatformCharacter pelaaja2;
104    PlatformCharacter pelaaja1;
105
106
107    Image Tulikuva = LoadImage("tuli");
108    Image AlienKuva = LoadImage("Alien");
109    Image Orkkikuva = LoadImage("Orkki");
110    Image monsteri = LoadImage("Monsteri");
111    Image flamerkuva= LoadImage("Flamer");
112    Image Estekuva = LoadImage("Este");
113    Image Automaattikuva = LoadImage("Automaattitykki");
114
115    Image Robo = LoadImage("Robot");
116    Image pelaajanKuva = LoadImage("Avaruus saankari");
117    Image taustakuva = LoadImage("scifi hallway space ship model interior");
118    SoundEffect maaliAani = LoadSoundEffect("maali");
119    DoubleMeter elamaLaskuri;
120    DoubleMeter elamaLaskuri2;
121    SoundEffect osumisaani = LoadSoundEffect("Hit_Hurt2");
122
123    List<PushButton> painonapit = new List<PushButton>();
124    Label menuHelperNaytto;
125    private PhysicsObject seurattava;
126    bool ollaanRakentamassa = false;
127
128    PushButton menuNappi;
129
130    public override void Begin()
131    {
132        SmoothTextures = false;
133        IsMouseVisible = true;
134        MediaPlayer.Play("musiikki");
135        MediaPlayer.IsRepeating = true;
136        OrkinKavely = LoadAnimation("Orkki liikkuu");
137        MonsteriKavely = new Animation(Monsterinkavelykuvat);
138        AlienKavely = new Animation(Alienkavelykuvat);
139
140        MultiSelectWindow alkuValikko = new MultiSelectWindow("Spaceship madness", "Aloita peli", "Parhaat pisteet", "Lopeta");
141        Add(alkuValikko);
142        alkuValikko.AddItemHandler(0, pelaajienvalinta);
143        //alkuValikko.AddItemHandler(1, ParhaatPisteet);
144        alkuValikko.AddItemHandler(2, Exit);
145    }
146
147    void HiirenLiikutus(AnalogState tila)
148    {
149        if (ollaanRakentamassa)
150        {
151            seurattava.Position = Mouse.PositionOnWorld;
152        }
153    }
154
155    void HiirenKlikkaus()
156    {
157        if (ollaanRakentamassa)
158        {
159            AssaultRifle ase = new AssaultRifle(30, 30);
160            ase.IsVisible = false;
161            ase.FireRate = 2;
162            ase.ProjectileCollision = AmmusOsui;
163            seurattava.Add(ase);
164            seurattava.IgnoresCollisionResponse = false;
165            (seurattava as Tykki).ase = ase;
166            aseidenAjastin = new Timer();
167            aseidenAjastin.Interval = 0.1;
168            aseidenAjastin.Timeout += delegate
169            {
170               
171
172                //List<GameObject> vihut = GetObjectsWithTag("vihollinen");
173                //var vihut = vihulista;
174                //if (vihut == null || vihut.Count == 0) return;
175                //
176                //double etäisyys = Vector.Distance(ase.AbsolutePosition, vihut[0].Position);
177                //if (etäisyys > 400) return;
178                //
179                ////vihut.Sort((a, b) => Vector.Distance(a.Position, ase.AbsolutePosition) > Vector.Distance(b.Position, ase.AbsolutePosition) ? 1 : -1);
180                //vihut.Sort((a, b) => JarjestaVihut(ase, a, b));
181                //ase.Angle = (vihut[0].Position - ase.AbsolutePosition).Angle;
182                PhysicsObject ammus = ase.Shoot();
183
184                if (ammus != null)
185                {
186                    if (ase.Parent != null && ase.Parent.Tag.Equals("flamer"))
187                    {
188                        ammus.Image = Tulikuva;
189                        ammus.Size *= 3;
190                        ammus.CollisionIgnoreGroup = 3;
191                    }
192                    else
193                    {
194                        ammus.Size *= 0.5;
195                        ammus.CollisionIgnoreGroup = 3;
196                    }
197                    //ammus.Image = cannonballKuva;
198                    ammus.MaximumLifetime = TimeSpan.FromSeconds(2.0);
199                }
200
201                if (ase.Parent != null && ase.Parent.IsDestroyed)
202                    aseidenAjastin.Stop();
203            };
204            aseidenAjastin.Start();
205
206            ollaanRakentamassa = false;
207            seurattava = null;
208        }
209        /*
210        else
211        {
212            List<Tykki> tornit = GetObjectsWithTag("torni").Cast<Tykki>().ToList();
213            foreach (Tykki torni in tornit)
214            {
215                int hinta = 40 + 20 * torni.taso;
216                if (Mouse.IsCursorOn(torni) && torni.taso < Tornikuvat.Length)
217                {
218                    if (rahalaskuri.Value >= hinta)
219                    {
220
221
222                        torni.taso += 1;
223                        torni.ase.FireRate = 1 + torni.taso;
224                        rahalaskuri.Value -= hinta;
225                        torni.Image = Tornikuvat[torni.taso - 1];
226                    }
227                    else
228                    {
229                        MessageDisplay.Add("Ei tarpeeksi rahaa. Päivitys maksaa " + hinta);
230
231                    }
232                }
233
234            }
235        }
236         */
237    }
238
239    void AnnaAse(double leveys, double korkeus, int hinta, Image kuva, string tyyppi)
240    {
241        if (ollaanRakentamassa) return;
242        if (hinta > pisteLaskuri.Value) { MessageDisplay.Add("Ei tarpeeksi pisteitä!"); return; }
243        pisteLaskuri.Value -= hinta;
244
245        Tykki tykki = new Tykki(leveys, korkeus, 30);
246        tykki.MakeStatic();
247
248        tykki.ElamaLaskuri.LowerLimit += delegate
249        {
250            tykki.Destroy();
251        };
252
253        tykki.Color = Color.Black;
254        tykki.Image = kuva;
255        tykki.CanRotate = false;
256        tykki.IgnoresCollisionResponse = true;
257        tykki.Position = Mouse.PositionOnScreen;
258        tykki.IgnoresGravity = true;
259        tykki.Tag = tyyppi;
260        ollaanRakentamassa = true;
261        tykki.CollisionIgnoreGroup = 3;
262        seurattava = tykki;
263        Add(tykki, 3);
264        AddCollisionHandler(tykki, "vihollinen", VahingoitaAsetta);
265    }
266
267
268    void VahingoitaAsetta(PhysicsObject tykki, PhysicsObject kohde)
269    {
270        if (kohde.Tag.Equals("vihollinen"))
271        {
272            (tykki as Tykki).ElamaLaskuri.Value--;
273            MessageDisplay.Add("Au");
274            if ((tykki as Tykki).ElamaLaskuri.Value <= 0) tykki.Destroy();
275        }
276    }
277
278
279    void LuoTykkiNappula(Vector paikka, double leveys, double korkeus, Image rakennusKuva, int hinta, int rakennusKoko)
280    {
281        menuNappi = new PushButton(leveys * 2, korkeus * 2, rakennusKuva);
282        menuNappi.Position = paikka;
283        menuNappi.Clicked += new Action(() => AnnaAse(rakennusKoko, rakennusKoko, hinta, rakennusKuva, "automaattiTykki"));
284        Add(menuNappi);
285        Mouse.ListenMovement(1.0, delegate
286        {
287            if (Mouse.IsCursorOn(menuNappi))
288            {
289                menuHelperNaytto.IsVisible = true;
290                menuHelperNaytto.Text = "Ase, " + hinta + " pistettä";
291                menuHelperNaytto.Position = Mouse.PositionOnScreen + new Vector(menuHelperNaytto.Width / 2 + 10, 0);
292            }
293
294        }, null
295            );
296    }
297   
298    int JarjestaVihut(AssaultRifle ase, GameObject a, GameObject b)
299    {
300        if (a == null || b == null) return 0;
301        return Vector.Distance(a.Position, ase.AbsolutePosition) > Vector.Distance(b.Position, ase.AbsolutePosition) ? 1 : -1;
302    }
303
304    void LuoAseNappula(Vector paikka, double leveys, double korkeus, Image rakennusKuva, int hinta, int rakennusKoko)
305    {
306        menuNappi = new PushButton(leveys * 2, korkeus * 2, flamerkuva);
307        menuNappi.Position = new Vector(0, (Screen.Bottom + 30));
308        menuNappi.Clicked += new Action(() => AnnaAse(rakennusKoko, rakennusKoko, hinta, rakennusKuva, "flamer"));
309        Add(menuNappi);
310        Mouse.ListenMovement(1.0, delegate {
311            if (Mouse.IsCursorOn(menuNappi))
312            {
313                menuHelperNaytto.IsVisible = true;
314                menuHelperNaytto.Text = "Ase, " + hinta + " pistettä";
315                menuHelperNaytto.Position = Mouse.PositionOnScreen + new Vector(menuHelperNaytto.Width / 2 + 10, 0);
316            }
317
318        }, null
319            );
320    }
321
322    void pelaajienvalinta()
323    {
324        MultiSelectWindow alkuValikko = new MultiSelectWindow("Spaceship madness", "yksi pelaaja", "kaksi pelaajaa");
325        Add(alkuValikko);
326        alkuValikko.AddItemHandler(0, Aloitapeli, 1);
327        alkuValikko.AddItemHandler(1, Aloitapeli, 2);
328    }
329
330    void Aloitapeli(int pelaajienLkm)
331    {
332        Gravity = new Vector(0, -1000);
333        SmoothTextures = false;
334       
335
336        if (pelaajienLkm == 1)
337        {
338            LuoKentta();
339        }
340        else
341        {
342            LuoKentta2();
343            LuoElamaLaskuri2();
344        }
345        LisaaNappaimet();
346        LuoElamaLaskuri();
347        LuoPistelaskuri();
348        LuoAaltoPalkki();
349        AaltoLoppui();
350
351        LuoMenu();
352        LuoAseNappula(new Vector(80, (Screen.Bottom + 35)), 40, 40, flamerkuva, 200, 100);
353        LuoTykkiNappula(new Vector(-80, (Screen.Bottom + 35)), 40, 40, Automaattikuva, 300, 100);
354       
355        Camera.Follow(pelaaja1);
356        Camera.ZoomFactor = 1.2;
357        Camera.StayInLevel = true;
358
359        Mouse.ListenMovement(1.0, HiirenLiikutus, null);
360
361        Mouse.Listen(MouseButton.Left, ButtonState.Pressed, HiirenKlikkaus, null);
362        Mouse.ListenMovement(1.0, delegate
363        {
364            if (!Mouse.IsCursorOn(menuNappi))
365                menuHelperNaytto.IsVisible = false;
366
367        //    List<Torni> tornit = GetObjectsWithTag("torni").Cast<Torni>().ToList();
368        //    foreach (Torni torni in tornit)
369        //    {
370        //        if (Mouse.IsCursorOn(torni))
371        //        {
372        //            menuHelperNaytto.IsVisible = true;
373        //            menuHelperNaytto.Text = "Torni, " + torni.taso;
374        //            menuHelperNaytto.Position = Mouse.PositionOnScreen + new Vector(menuHelperNaytto.Width / 2 + 10, 0);
375        //        }
376        //    }
377        }, null);
378    }
379
380    void LuoMenu()
381    {
382        menuHelperNaytto = new Label("");
383        menuHelperNaytto.XMargin = 7.0;
384        menuHelperNaytto.YMargin = 7.0;
385        menuHelperNaytto.Color = new Color(0, 0, 0, 100);
386        menuHelperNaytto.TextColor = Color.White;
387        menuHelperNaytto.IsVisible = false;
388        Add(menuHelperNaytto);
389    }
390
391    void LuoKentta()
392    {
393        TileMap kentta = TileMap.FromLevelAsset("kentta1");
394        kentta.SetTileMethod('#', LisaaTaso);
395
396
397        kentta.SetTileMethod('N', LisaaPelaaja);
398        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
399        Level.CreateBorders();
400        Level.Background.Image = taustakuva;
401        Level.Background.ScaleToLevelByHeight();
402    }
403    void LuoKentta2()
404    {
405        TileMap kentta = TileMap.FromLevelAsset("kentta1");
406        kentta.SetTileMethod('#', LisaaTaso);
407
408        kentta.SetTileMethod('M', LisaaPelaaja2);
409        kentta.SetTileMethod('N', LisaaPelaaja);
410        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
411        Level.CreateBorders();
412        Level.Background.Image = taustakuva;
413        Level.Background.ScaleToLevelByHeight();
414    }
415    void LisaaTaso(Vector paikka, double leveys, double korkeus)
416    {
417        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
418        taso.Position = paikka;
419        taso.Color = Color.Transparent;
420        Add(taso);
421    }
422
423
424
425    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
426    {
427        pelaaja1 = new PlatformCharacter(leveys * 3, korkeus * 3);
428        pelaaja1.Position = paikka;
429        pelaaja1.Mass = 4.0;
430        pelaaja1.Image = pelaajanKuva;
431        Add(pelaaja1);
432        AddCollisionHandler(pelaaja1, "vihollinen", Tormaaviholliseen);
433
434        pelaaja1.AnimWalk = new Animation(Avaruuskävely);
435        pelaaja1.AnimIdle = new Animation(pelaajanKuva);
436        pelaaja1.AnimWalk.FPS = 5;
437
438        //inventory = new Inventory();
439        //inventory.Y = Screen.Bottom+50;
440        //Add(inventory);
441
442        //inventory.AddItem(null, );
443        //inventory.AddItem(null, flamerkuva);
444
445        pelaaja1.Weapon = new AssaultRifle(30, 10);
446        pelaaja1.Weapon.Ammo.Value = 100000;
447        pelaaja1.Weapon.ProjectileCollision = AmmusOsui;
448
449        //inventory.AddItem(, flamerkuva);
450
451    }
452    void LisaaPelaaja2(Vector paikka, double leveys, double korkeus)
453    {
454        pelaaja2 = new PlatformCharacter(leveys * 3, korkeus * 3);
455        pelaaja2.Position = paikka;
456        pelaaja2.Mass = 4.0;
457        pelaaja2.Image = pelaajanKuva;
458        Add(pelaaja2);
459        AddCollisionHandler(pelaaja2, "vihollinen", Tormaaviholliseen);
460
461        pelaaja2.AnimWalk = new Animation(Avaruuskävely);
462        pelaaja2.AnimIdle = new Animation(pelaajanKuva);
463        pelaaja2.AnimWalk.FPS = 5;
464
465        pelaaja2.Weapon = new AssaultRifle(30, 10);
466        pelaaja2.Weapon.Ammo.Value = 1000;
467        pelaaja2.Weapon.ProjectileCollision = AmmusOsui;
468    }
469
470    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
471    {
472        ammus.Destroy();
473        if (kohde.Tag.Equals("vihollinen"))
474        {
475            (kohde as Vihu).ElamaLaskuri.Value--;
476            osumisaani.Play();
477           
478        }
479    }
480
481    void AmmuAseella(PlatformCharacter pelaaja)
482    {
483        if (!pelaaja.IsDestroyed)
484        {
485            PhysicsObject ammus = pelaaja.Weapon.Shoot();
486
487            if (ammus != null)
488            {
489                //ammus.Size *= 3;
490                //ammus.Image = ...
491                ammus.MaximumLifetime = TimeSpan.FromSeconds(2.0);
492            }
493        }
494    }
495
496
497    void LisaaNappaimet()
498    {
499        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
500        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
501
502        Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
503        Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, nopeus);
504
505        Keyboard.Listen(Key.Up, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
506        Keyboard.Listen(Key.Space, ButtonState.Down, AmmuAseella, "Ammu", pelaaja1);
507
508        if (pelaaja2 != null)
509        {
510            Keyboard.Listen(Key.A, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja2, -nopeus);
511            Keyboard.Listen(Key.D, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja2, nopeus);
512
513            Keyboard.Listen(Key.W, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja2, hyppyNopeus);
514            Keyboard.Listen(Key.LeftShift, ButtonState.Down, AmmuAseella, "Ammu", pelaaja2);
515        }
516
517        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
518
519        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
520        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
521        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
522
523        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
524    }
525
526    void Liikuta(PlatformCharacter hahmo, double nopeus)
527    {
528        hahmo.Walk(nopeus);
529    }
530   
531
532
533    void Hyppaa(PlatformCharacter hahmo, double nopeus)
534    {
535        hahmo.Jump(nopeus);
536    }
537
538
539    void Tormaaviholliseen(PhysicsObject hahmo, PhysicsObject vihollinen)
540    {
541        if (hahmo == pelaaja1)
542        {
543            elamaLaskuri.Value--;
544        }
545        else
546        {
547            elamaLaskuri2.Value--;
548        }
549
550        osumisaani.Play();
551    }
552
553
554    void LuoAlien()
555    {
556        Vihu vihollinen = new Vihu(20, 100, 150);
557        vihollinen.ElamaLaskuri.LowerLimit += delegate
558        {
559            vihollinen.Destroy();
560            vihut.Remove(vihollinen as Vihu);
561            pisteLaskuri.Value += 20;
562        };
563        vihollinen.Image = AlienKuva;
564        vihollinen.CollisionIgnoreGroup = 1;
565        vihollinen.X = Level.Right - 100;
566        vihollinen.Tag = "vihollinen";
567        Add(vihollinen,3);
568
569        vihut.Add(vihollinen);
570
571        vihollinen.Animation = AlienKavely;
572        vihollinen.Animation.FPS = 5;
573        vihollinen.Animation.Start();
574        //vihollinen.AnimWalk = OrkinKavely;
575        //vihollinen.PlayAnimation(OrkinKavely);
576
577        PlatformWandererBrain tasoAivot = new PlatformWandererBrain();
578        tasoAivot.Speed = 100;
579        tasoAivot.FallsOffPlatforms = true;
580        tasoAivot.TriesToJump = true;
581
582        vihollinen.Brain = tasoAivot;
583    }
584
585
586    void LuoOrkki()
587    {
588        Vihu vihollinen = new Vihu(10, 200, 200);
589        vihollinen.ElamaLaskuri.LowerLimit += delegate
590        {
591            vihollinen.Destroy();
592            vihut.Remove(vihollinen as Vihu);
593            pisteLaskuri.Value += 10;
594        };
595        vihollinen.Image = Orkkikuva;
596        vihollinen.CollisionIgnoreGroup = 1;
597        vihollinen.X = Level.Right - 100;
598        vihollinen.Tag = "vihollinen";
599        Add(vihollinen, 2);
600
601        vihut.Add(vihollinen);
602
603        vihollinen.Animation = OrkinKavely;
604        vihollinen.Animation.FPS = 5;
605        vihollinen.Animation.Start();
606        //vihollinen.AnimWalk = OrkinKavely;
607        //vihollinen.PlayAnimation(OrkinKavely);
608
609        PlatformWandererBrain tasoAivot = new PlatformWandererBrain();
610        tasoAivot.Speed = 100;
611        tasoAivot.FallsOffPlatforms = true;
612        tasoAivot.TriesToJump = true;
613
614        vihollinen.Brain = tasoAivot;
615    }
616    void Luovihollinen()
617    {
618        Vihu vihollinen = new Vihu(3, 100, 100);
619        vihollinen.ElamaLaskuri.LowerLimit += delegate {
620            vihollinen.Destroy();
621            vihut.Remove(vihollinen as Vihu);
622            pisteLaskuri.Value += 5;
623        };
624        vihollinen.Image = monsteri;
625        vihollinen.CollisionIgnoreGroup = 1;
626        vihollinen.X = Level.Right - 40;
627        vihollinen.Tag = "vihollinen";
628        Add(vihollinen);
629
630        vihut.Add(vihollinen);
631
632        vihollinen.Animation = MonsteriKavely;
633        vihollinen.Animation.FPS = 5;
634        vihollinen.Animation.Start();
635
636        PlatformWandererBrain tasoAivot = new PlatformWandererBrain();
637        tasoAivot.Speed = 100;
638        tasoAivot.FallsOffPlatforms = true;
639        tasoAivot.TriesToJump = true;
640
641        vihollinen.Brain = tasoAivot;
642    }
643    void LuoElamaLaskuri()
644    {
645        elamaLaskuri = new DoubleMeter(20);
646        elamaLaskuri.MaxValue = 20;
647        elamaLaskuri.LowerLimit += ElamaLoppui;
648
649        ProgressBar elamaPalkki = new ProgressBar(150, 20);
650        elamaPalkki.X = Screen.Left + 150;
651        elamaPalkki.Y = Screen.Top - 20;
652        elamaPalkki.BindTo(elamaLaskuri);
653        Add(elamaPalkki);
654    }
655    void LuoElamaLaskuri2()
656    {
657        elamaLaskuri2 = new DoubleMeter(20);
658        elamaLaskuri2.MaxValue = 20;
659        elamaLaskuri2.LowerLimit += ElamaLoppui2;
660
661        ProgressBar elamaPalkki = new ProgressBar(150, 20);
662        elamaPalkki.X = Screen.Right - 150;
663        elamaPalkki.Y = Screen.Top - 20;
664        elamaPalkki.BindTo(elamaLaskuri2);
665        Add(elamaPalkki);
666    }
667
668
669    void ElamaLoppui()
670    {
671        MessageDisplay.Add("Elämät loppuivat.");
672        pelaaja1.Destroy();
673    }
674
675    void ElamaLoppui2()
676    {
677        MessageDisplay.Add("Elämät loppuivat.");
678        pelaaja2.Destroy();
679    }
680
681    IntMeter pisteLaskuri;
682
683    void LuoPistelaskuri()
684    {
685        pisteLaskuri = new IntMeter(500);
686
687        Label pisteNaytto = new Label();
688        pisteNaytto.X = Screen.Left + 100;
689        pisteNaytto.Y = Screen.Top - 100;
690        pisteNaytto.TextColor = Color.Black;
691        pisteNaytto.Color = Color.White;
692
693        pisteNaytto.BindTo(pisteLaskuri);
694        Add(pisteNaytto);
695    }
696
697    void AloitaAalto()
698    {
699        //int kier = 20 / kieorrokset;
700        //if (aseidenAjastin != null) aseidenAjastin.
701
702        Timer ajastin = new Timer();
703        ajastin.Interval = RandomGen.NextDouble(3.0, 5.0);
704        ajastin.Timeout += Luovihollinen;
705        ajastin.Start();
706
707        Timer ajastin2 = new Timer();
708        ajastin2.Interval = RandomGen.NextDouble(6.0, 8.0);
709        ajastin2.Timeout += LuoOrkki;
710        ajastin2.Start();
711
712        Timer ajastin3 = new Timer();
713        ajastin3.Interval = RandomGen.NextDouble(9.0, 12.0);
714        ajastin3.Timeout += LuoAlien;
715        ajastin3.Start();
716
717        if (alaspainLaskuri==null) LuoAaltoAikaLaskuri();
718        else
719        {
720            alaspainLaskuri.Value = MAX_KIERROSAIKA / kieorrokset;
721            aaltoAikaLaskuri.Start();
722        }
723        Timer.SingleShot(MAX_KIERROSAIKA / kieorrokset, delegate { ajastin.Stop(); ajastin2.Stop(); ajastin3.Stop(); TarkistaLoppu(); });
724    }
725
726
727    void LuoAaltoPalkki()
728    {
729        aaltoPalkki = new DoubleMeter(20);
730        aaltoPalkki.MaxValue = 20;
731        aaltoPalkki.LowerLimit += AloitaAalto;
732
733        aaltoNaytto = new ProgressBar(150, 20);
734        aaltoNaytto.X = 0;
735        aaltoNaytto.Y = Screen.Top - 20;
736        aaltoNaytto.BindTo(aaltoPalkki);
737        Add(aaltoNaytto);
738    }
739
740    void LuoAaltoAikaLaskuri()
741    {
742        alaspainLaskuri = new DoubleMeter(MAX_KIERROSAIKA / kieorrokset);
743
744        aaltoAikaLaskuri = new Timer();
745        aaltoAikaLaskuri.Interval = 0.1;
746        aaltoAikaLaskuri.Timeout += LaskeAlaspain;
747        aaltoAikaLaskuri.Start();
748
749        Label aikaNaytto = new Label();
750        aikaNaytto.TextColor = Color.White;
751        aikaNaytto.DecimalPlaces = 1;
752        aikaNaytto.X = 0;
753        aikaNaytto.Y = Screen.Top - 50;
754        aikaNaytto.BindTo(alaspainLaskuri);
755        Add(aikaNaytto);
756    }
757
758    void LaskeAlaspain()
759    {
760        alaspainLaskuri.Value -= 0.1;
761
762        if (alaspainLaskuri.Value <= 0)
763        {
764            MessageDisplay.Add("Aika loppui...");
765            aaltoAikaLaskuri.Stop();
766
767            // täydennä mitä tapahtuu, kun aika loppuu
768        }
769    }
770
771
772    void TarkistaLoppu()
773    {
774        Timer tarkistaja = new Timer();
775        tarkistaja.Interval = 0.5;
776        tarkistaja.Timeout += delegate { if (vihut.Count <= 0) { tarkistaja.Stop(); AaltoLoppui(); } };
777        tarkistaja.Start();
778    }
779
780
781    void AaltoLoppui()
782    {
783        //if (aseidenAjastin != null) aseidenAjastin.Interval = 10;
784        kieorrokset--;
785        aaltoPalkki.Value = 20;
786        Timer aaltoLaskuri = new Timer();
787        aaltoLaskuri.Interval = 0.1;
788        aaltoLaskuri.Timeout += delegate { aaltoPalkki.Value--; };
789        aaltoLaskuri.Start(20);
790    }
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814}
Note: See TracBrowser for help on using the repository browser.