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

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