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

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