source: 2015/23/EemeliR/LiikenneOhjaus/LiikenneOhjaus/LiikenneOhjaus.cs @ 5892

Revision 5892, 19.2 KB checked in by sieerinn, 4 years ago (diff)
Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Widgets;
7
8public class LiikenneOhjaus : PhysicsGame
9{
10    EasyHighScore topLista = new EasyHighScore();
11
12
13    Image auto1 = LoadImage("auto1");
14    Image auto2 = LoadImage("auto2");
15    Image auto3 = LoadImage("auto4");
16    Image auto4 = LoadImage("auto3");
17    Image rekka1 = LoadImage("Rekka");
18    Image tiekuva = LoadImage("tie");
19    Image ruohokuva = LoadImage("ruoho");
20    Image RaideJkuva = LoadImage("RaideJumppi");
21    Image junakuva = LoadImage("juna");
22    public static Image LiValokuva = LoadImage("LiValo");
23    public static Image LiValo2kuva = LoadImage("LiValo2");
24    public static Image LiValo3kuva = LoadImage("LiValo3");
25    Image Tolppakuva = LoadImage("Valotolppa");
26    Image Tolppa1kuva = LoadImage("Valotolppa1");
27    Image Tolppa2kuva = LoadImage("Valotolppa2");
28    Image Tolppa3kuva = LoadImage("Valotolppa3");
29    SoundEffect carcrash = LoadSoundEffect("carcrash");
30
31    public GameObject livalot, livalot1, livalot2, livalot3;
32
33    IntMeter pisteLaskuri;
34
35    List<PhysicsObject> autot = new List<PhysicsObject>();
36    List<PhysicsObject> autot2 = new List<PhysicsObject>();
37    List<PhysicsObject> autot3 = new List<PhysicsObject>();
38    List<PhysicsObject> autot4 = new List<PhysicsObject>();
39    List<GameObject> sydammet = new List<GameObject>();
40
41    Boolean AaniPaalle = true;
42
43    List<GameObject> viivat = new List<GameObject>();
44
45    private Image[] valovihreälle = LoadImages("LiValo", "LiValo2", "LiValo3");
46    private Image[] valopunaiselle = LoadImages("LiValo3", "LiValo2", "Livalo");
47
48
49    public override void Begin()
50    {
51        AloitaPeli();
52
53       
54
55
56    }
57    void AloitaPeli()
58    {
59        ClearAll();
60        IsPaused = false;
61        AaniPaalle = true;
62
63        TileMap mappi = TileMap.FromLevelAsset("Mappi");
64
65        mappi.SetTileMethod('R', LuoTie);
66        mappi.SetTileMethod('-', LuoRuoho);
67        mappi.SetTileMethod('O', LuoRaideJ);
68        mappi.SetTileMethod('W', Luotolppa1);
69        mappi.SetTileMethod('D', Luotolppa2);
70        mappi.SetTileMethod('S', Luotolppa3);
71        mappi.SetTileMethod('A', Luotolppa4);
72        mappi.Execute(40, 40);
73
74        Camera.ZoomFactor = 1.5;
75
76        IsFullScreen = true;
77
78        elamat();
79        Livalot();
80        SpacePar();
81        LuoInfoTeksti();
82        LuoSpaceTeksti();
83        SpacePar2();
84        LuoQuitTeksti();
85        LuoescTeksti();
86        LuoPistelaskuri();
87
88        Timer Ajastin = new Timer();
89        Ajastin.Interval = 3.0;
90        Ajastin.Timeout += LuoAuto;
91        Ajastin.Timeout += LuoAuto2;
92        Ajastin.Timeout += LuoAuto3;
93        Ajastin.Timeout += LuoAuto4;
94        Ajastin.Timeout += LuoJuna;
95        //Ajastin.Timeout += LuoRekka; (rekka poistettu bugien takia)
96        Ajastin.Start();
97
98        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
99        Keyboard.Listen(Key.Space, ButtonState.Pressed, Viivapääl, "Viivat päälle");
100        Keyboard.Listen(Key.Space, ButtonState.Released, Viivatpois, "Viivat pois");
101        Keyboard.Listen(Key.Space, ButtonState.Pressed, Pause, "Peli pauselle");
102        Keyboard.Listen(Key.Space, ButtonState.Released, Pause, "Viivat pois");
103    }
104    void LuoPistelaskuri()
105    {
106        pisteLaskuri = new IntMeter(0);
107
108        Label pisteNaytto = new Label();
109        pisteNaytto.X = -150;   
110        pisteNaytto.Y = 269.0;
111        pisteNaytto.TextColor = Color.Black;
112        pisteNaytto.Color = Color.Aquamarine;
113
114        pisteNaytto.BindTo(pisteLaskuri);
115        Add(pisteNaytto, 3);
116    }
117    void LuoInfoTeksti()
118    {
119        Label info = new Label("Help");
120        info.Position = new Vector(150.0, 378.0);
121        info.TextColor = Color.White;
122        info.Font = Font.DefaultLarge;
123        Add(info);
124    }
125    void LuoSpaceTeksti()
126    {
127        Label space = new Label("(space)");
128        space.Position = new Vector(150.0, 362.0);
129        //space.Color = Color.Gray;
130        space.TextColor = Color.White;
131        space.Font = Font.DefaultSmall;
132        Add(space);
133    }
134    void LuoQuitTeksti()
135    {
136        Label space = new Label("QUIT");
137        space.Position = new Vector(150.0, 420.0);
138        space.TextColor = Color.White;
139        space.Font = Font.DefaultLarge;
140        Add(space);
141    }
142    void LuoescTeksti()
143    {
144        Label space = new Label("(esc)");
145        space.Position = new Vector(150.0, 405.0);
146        space.TextColor = Color.White;
147        space.Font = Font.DefaultSmall;
148        Add(space);
149    }
150
151
152    void LuoTie(Vector paikka, double leveys, double korkeus)
153    {
154        GameObject tie = new GameObject(leveys, korkeus);
155        tie.Position = paikka;
156        tie.Image = tiekuva;
157        Add(tie, -3);
158    }
159
160    void LuoRuoho(Vector paikka, double leveys, double korkeus)
161    {
162        PhysicsObject ruoho = PhysicsObject.CreateStaticObject(leveys, korkeus);
163        ruoho.Position = paikka;
164        ruoho.Image = ruohokuva;
165        ruoho.CollisionIgnoreGroup = 1;
166        Add(ruoho);
167
168
169
170
171    }
172    void LuoAuto()
173    {
174        if (RandomGen.NextInt(1, 100) > 70)
175        {
176            PhysicsObject auto = new PhysicsObject(42, 20);
177            auto.Mass = 1000.0;
178            auto.Image = auto2;
179            auto.X = 500.0;
180            auto.Y = 5.0;
181            AddCollisionHandler(auto, AutoTormasi);
182           
183            AutonAivot aivot = new AutonAivot(60.0, new Vector(-600, 5.0));
184            aivot.ArrivedAtEnd += delegate {
185                aivot.Owner.Destroy();
186                pisteLaskuri.Value += 1;
187            };
188            auto.Brain = aivot;
189           
190            Add(auto, 1);
191
192            autot.Add(auto);
193
194            //auto.MoveTo(new Vector(-2000, 5), 60.0, auto.Destroy);
195
196        }
197    }
198
199    void LuoRaideJ(Vector paikka, double leveys, double korkeus)
200    {
201        GameObject RaideJ = new GameObject(leveys, korkeus);
202        RaideJ.Position = paikka;
203        RaideJ.Image = RaideJkuva;
204        Add(RaideJ, -2);
205
206
207
208
209    }
210    void LuoJuna()
211    {
212
213        if (RandomGen.NextInt(1, 100) > 95   )
214        {
215            PhysicsObject juna = new PhysicsObject(210, 35);
216            juna.Mass = 50000.0;
217            juna.Image = junakuva;
218            juna.X = 500.0;
219            juna.Y = 200.0;
220            AddCollisionHandler(juna, AutoTormasi);
221            Add(juna, 3);
222            juna.IgnoresPhysicsLogics = true;
223
224            juna.MoveTo(new Vector(-20000, 200), 1500.0, juna.Destroy);
225
226        }
227    }
228    void LuoAuto2()
229    {
230        if (RandomGen.NextInt(1, 100) > 70)
231        {
232            PhysicsObject auto = new PhysicsObject(42, 20);
233            auto.Mass = 1000.0;
234            auto.Image = auto1;
235            auto.X = -500.0;
236            auto.Y = -45.0;
237            AddCollisionHandler(auto, AutoTormasi);
238            Add(auto, 1);
239
240            AutonAivot aivot = new AutonAivot(60.0, new Vector(600, -45.0));
241            aivot.ArrivedAtEnd += delegate { aivot.Owner.Destroy();
242            pisteLaskuri.Value += 1;
243            };
244            auto.Brain = aivot;
245
246            autot2.Add(auto);
247
248        }
249
250
251    }
252    void LuoAuto3()
253    {
254        if (RandomGen.NextInt(1, 100) > 70)
255        {
256            PhysicsObject auto = new PhysicsObject(20, 42);
257            auto.Mass = 1000.0;
258            auto.Image = auto3;
259            auto.X = -47.0;
260            auto.Y = 500.0;
261            AddCollisionHandler(auto, AutoTormasi);
262            Add(auto, 1);
263
264            AutonAivot aivot = new AutonAivot(60.0, new Vector(-50, -600.0));
265            aivot.ArrivedAtEnd += delegate { aivot.Owner.Destroy();
266            pisteLaskuri.Value += 1;
267            };
268            auto.Brain = aivot;
269
270            autot3.Add(auto);
271        }
272    }
273    void LuoAuto4()
274    {
275        if (RandomGen.NextInt(1, 100) > 70)
276        {
277            PhysicsObject auto = new PhysicsObject(20, 42);
278            auto.Mass = 1000.0;
279            auto.Image = auto4;
280            auto.X = 5.0;
281            auto.Y = -500.0;
282            AddCollisionHandler(auto, AutoTormasi);
283            Add(auto, 1);
284
285            AutonAivot aivot = new AutonAivot(60.0, new Vector(5, 600.0));
286            aivot.ArrivedAtEnd += delegate { aivot.Owner.Destroy();
287            pisteLaskuri.Value += 1;
288            };
289            auto.Brain = aivot;
290
291            autot4.Add(auto);
292
293           
294
295        }
296    }
297    // rekka poistettu bugien takia
298    //void LuoRekka()
299    //{
300       // if (RandomGen.NextInt(1, 100) > 95)
301       // {
302           // PhysicsObject rekka = new PhysicsObject(205, 45);
303           // rekka.Mass = 30000.0;
304           // rekka.Image = rekka1;
305           // rekka.X = 500.0;
306          //  rekka.Y = -5.0;
307          //  AddCollisionHandler(rekka, AutoTormasi);
308          //  Add(rekka, 1);
309          //  rekka.Restitution = 0;
310
311            //AutonAivot aivot = new AutonAivot(59.0, new Vector(-600, 6.0));
312           // aivot.ArrivedAtEnd += delegate { aivot.Owner.Destroy();
313           // pisteLaskuri.Value += 3;
314            //};
315           // rekka.Brain = aivot;
316
317           // autot.Add(rekka);
318
319           // rekka.MoveTo(new Vector(-20000, 6), 59.0, rekka.Destroy);
320
321       // }
322   // }
323    void AutoTormasi(PhysicsObject mikä, PhysicsObject mihin)
324    {
325        mikä.Brain = null;
326
327        Timer lavastin = new Timer();
328        lavastin.Timeout += delegate
329        {
330            mikä.Move(new Vector(0.0, 0.0));
331            mikä.Destroy();
332        };
333
334        lavastin.Interval = 2.0;
335        lavastin.Start(1);
336       
337        if (AaniPaalle)
338        {
339            carcrash.Play();
340            PoistaSyd();
341            AaniPaalle = false;
342
343            Timer ajastin = new Timer();
344            ajastin.Timeout += delegate { AaniPaalle = true;  };
345           
346            //Ääni pois päältä sekunneissa
347            ajastin.Interval = 2.0;
348            ajastin.Start(1);
349        }
350    }
351
352    void elamat()
353    {
354        PhysicsObject sydän = new PhysicsObject(30, 30);
355        sydän.Shape = Shape.Heart;
356        sydän.Color = Color.Red;
357        sydän.X = -460.0;
358        sydän.Y = 270.0;
359        sydammet.Add(sydän);
360
361
362        PhysicsObject sydän1 = new PhysicsObject(30, 30);
363        sydän1.Shape = Shape.Heart;
364        sydän1.Color = Color.Red;
365        sydän1.X = -420.0;
366        sydän1.Y = 270.0;
367        sydammet.Add(sydän1);
368         
369        PhysicsObject sydän2 = new PhysicsObject(30, 30);
370        sydän2.Shape = Shape.Heart;
371        sydän2.Color = Color.Red;
372        sydän2.X = -380.0;
373        sydän2.Y = 270.0;
374        sydammet.Add(sydän2);
375
376        PhysicsObject sydän3 = new PhysicsObject(30, 30);
377        sydän3.Shape = Shape.Heart;
378        sydän3.Color = Color.Red;
379        sydän3.X = -340.0;
380        sydän3.Y = 270.0;
381        sydammet.Add(sydän3);
382
383        PhysicsObject sydän4 = new PhysicsObject(30, 30);
384        sydän4.Shape = Shape.Heart;
385        sydän4.Color = Color.Red;
386        sydän4.X = -300.0;
387        sydän4.Y = 270.0;
388        sydammet.Add(sydän4);
389
390        Add(sydän, 2);
391        Add(sydän1, 2);
392        Add(sydän2, 2);
393        Add(sydän3, 2);
394        Add(sydän4, 2);
395       
396    }
397    void PoistaSyd()
398    {
399        GameObject poistettava = sydammet[sydammet.Count - 1];
400        sydammet.Remove(poistettava);
401        poistettava.Destroy();
402
403        if (sydammet.Count  < 1)
404        {
405            Pause();
406            topLista.EnterAndShow(pisteLaskuri.Value);
407            topLista.HighScoreWindow.Closed += delegate 
408            {
409
410                MultiSelectWindow alkuValikko = new MultiSelectWindow("Yritäppä uuestaan :P",
411    "Yritä uudestaan", "Parhaat pisteet", "Lopeta");
412                Add(alkuValikko);
413
414                alkuValikko.AddItemHandler(0, AloitaPeli);
415                alkuValikko.AddItemHandler(1, ParhaatPisteet);
416                alkuValikko.AddItemHandler(2, Exit);
417            };
418
419
420        }
421
422
423    }
424    void Livalot()
425    {
426        livalot = new GameObject(40.0, 71.0);
427        livalot.Image = LiValo3kuva;
428        livalot.X = 380;
429        livalot.Y = 263;
430        livalot.Tag = "ylos";
431        Add(livalot);
432
433        livalot1 = new GameObject(40.0, 71.0);
434        livalot1.Image = LiValo3kuva;
435        livalot1.X = 320;
436        livalot1.Y = 263;
437        livalot1.Tag = "ylos";
438        Add(livalot1);
439
440        livalot2 = new GameObject(40.0, 71.0);
441        livalot2.Image = LiValo3kuva;
442        livalot2.X = 260;
443        livalot2.Y = 263;
444        livalot2.Tag = "ylos";
445        Add(livalot2);
446
447        livalot3 = new GameObject(40.0, 71.0);
448        livalot3.Image = LiValo3kuva;
449        livalot3.X = 200;
450        livalot3.Y = 263;
451        livalot3.Tag = "ylos";
452        Add(livalot3);
453
454        Keyboard.Listen(Key.NumPad4, ButtonState.Pressed, Valo1, "Vaihtaa ykkösvaloa", livalot, 4);
455        Keyboard.Listen(Key.NumPad3, ButtonState.Pressed, Valo1, "Vaihtaa ykkösvaloa", livalot1, 1);
456        Keyboard.Listen(Key.NumPad2, ButtonState.Pressed, Valo1, "Vaihtaa ykkösvaloa", livalot2, 2);
457        Keyboard.Listen(Key.NumPad1, ButtonState.Pressed, Valo1, "Vaihtaa ykkösvaloa", livalot3, 3);
458
459    }
460    void Valo1(GameObject liikennevalo, int valo)
461    {
462        Timer Ajastin = new Timer();
463        Ajastin.Interval = 1.0;
464        Ajastin.Timeout += delegate { VaihdaKuva(liikennevalo, valo); };
465        Ajastin.Start(2);
466
467    }
468    void VaihdaKuva(GameObject liikennevalo, int valo)
469    {
470        if (liikennevalo.Image == LiValokuva)
471        {
472            liikennevalo.Image = LiValo2kuva;
473            LiikennevaloLogiikka(valo, "on");
474        }
475        else if (liikennevalo.Image == LiValo2kuva && liikennevalo.Tag == "alas")
476        {
477            liikennevalo.Image = LiValo3kuva;
478            liikennevalo.Tag = "ylos";
479        }
480        else if (liikennevalo.Image == LiValo3kuva)
481        {
482            liikennevalo.Image = LiValo2kuva;           
483        }
484        else if (liikennevalo.Image == LiValo2kuva && liikennevalo.Tag == "ylos")
485        {
486            liikennevalo.Image = LiValokuva;
487            liikennevalo.Tag = "alas";
488            LiikennevaloLogiikka(valo, "off");
489        }
490    }
491    void LiikennevaloLogiikka(int valo, String onoff)
492    {
493        List<PhysicsObject> autoLista = new List<PhysicsObject>();
494       
495        switch (valo)
496        {
497            case 1:
498                autoLista = autot2;
499                break;
500            case 2:
501                autoLista = autot;
502                break;
503            case 3:
504                autoLista = autot3;
505                break;
506            case 4:
507                autoLista = autot4;
508                break;
509        }
510        if (onoff == "off")
511            foreach (GameObject auto in autoLista)
512            {
513                switch (valo)
514                {
515                    case 1:
516                        if (auto.X <= 0)
517                        {
518                            auto.Brain.Active = false;
519                            auto.Stop();
520                        }
521                       
522                       
523                        break;
524                    case 2:
525                        if (auto.X >= 0)
526                        {
527                            auto.Brain.Active = false;
528                            auto.Stop();
529                        }
530                        break;
531                    case 3:
532                        if (auto.Y >= 0)
533                        {
534                            auto.Brain.Active = false;
535                            auto.Stop();
536                        }
537                       
538                        break;
539                    case 4:
540                        if (auto.Y <= 0)
541                        {
542                            auto.Brain.Active = false;
543                            auto.Stop();
544                        }
545                       
546                        break;
547                }             
548            }
549        else if (onoff == "on")
550        {
551            foreach (GameObject auto in autoLista)
552            {
553                auto.Brain.Active = true;
554            }
555        }
556    }
557
558    void Viivapääl()
559    {
560
561        GameObject viiva1 = new GameObject(300.0, 1.0);
562        viiva1.Color = Color.Red;
563        viiva1.X = 55.0;
564        viiva1.Y = 135.0;
565        viiva1.Angle = Angle.FromDegrees(37.0);
566        Add(viiva1, 3);
567        viivat.Add(viiva1);
568
569        GameObject viiva2 = new GameObject(475.0, 1.0);
570        viiva2.Color = Color.LightGreen;
571        viiva2.X = 120.0;
572        viiva2.Y = 75.0;
573        viiva2.Angle = Angle.FromDegrees(38.0);
574        Add(viiva2, 3);
575        viivat.Add(viiva2);
576
577        GameObject viiva3 = new GameObject(250.0, 1.0);
578        viiva3.Color = Color.Aqua;
579        viiva3.X = 140.0;
580        viiva3.Y = 140.0;
581        viiva3.Angle = Angle.FromDegrees(40.0);
582        Add(viiva3, 3);
583        viivat.Add(viiva3);
584
585        GameObject viiva4 = new GameObject(420.0, 1.0);
586        viiva4.Color = Color.Blue;
587        viiva4.X = 205.0;
588        viiva4.Y = 75.0;
589        viiva4.Angle = Angle.FromDegrees(42.0);
590        Add(viiva4, 3);
591        viivat.Add(viiva4);
592
593        Level.AmbientLight = 0.5;
594
595
596
597    }
598    void SpacePar()
599    {
600        GameObject space = new GameObject(100.0, 25.0);
601        space.Color = Color.Gray;
602        space.X = 100.0;
603        space.Y = 250.0;
604        Add(space, 3);
605    }
606    void Viivatpois()
607    {
608        foreach (GameObject viiva in viivat)
609        {
610            viiva.Destroy();
611
612        }
613        Level.AmbientLight = 1.0;
614
615    }
616    void Luotolppa1(Vector paikka, double leveys, double korkeus)
617    {
618        PhysicsObject valotolppa = PhysicsObject.CreateStaticObject(leveys, korkeus);
619        valotolppa.Position = paikka;
620        valotolppa.Image = Tolppakuva;
621        valotolppa.CollisionIgnoreGroup = 3;
622        Add(valotolppa);
623
624    }
625    void Luotolppa2(Vector paikka, double leveys, double korkeus)
626    {
627        PhysicsObject valotolppa = PhysicsObject.CreateStaticObject(leveys, korkeus);
628        valotolppa.Position = paikka;
629        valotolppa.Image = Tolppa1kuva;
630        valotolppa.CollisionIgnoreGroup = 3;
631        Add(valotolppa);
632
633    }
634    void Luotolppa3(Vector paikka, double leveys, double korkeus)
635    {
636        PhysicsObject valotolppa = PhysicsObject.CreateStaticObject(leveys, korkeus);
637        valotolppa.Position = paikka;
638        valotolppa.Image = Tolppa2kuva;
639        valotolppa.CollisionIgnoreGroup = 3;
640        Add(valotolppa);
641
642    }
643    void Luotolppa4(Vector paikka, double leveys, double korkeus)
644    {
645        PhysicsObject valotolppa = PhysicsObject.CreateStaticObject(leveys, korkeus);
646        valotolppa.Position = paikka;
647        valotolppa.Image = Tolppa3kuva;
648        valotolppa.CollisionIgnoreGroup = 3;
649        Add(valotolppa);
650
651    }
652   
653    void SpacePar2()
654    {
655        GameObject space = new GameObject(100.0, 25.0);
656        space.Color = Color.Blue;
657        space.X = 100.0;
658        space.Y = 280.0;
659        Add(space, 3);
660
661        }
662    void ParhaatPisteet()
663    {
664        topLista.Show();
665    }
666
667
668   
669}
670
671
672
673
674
675
676
677
678
679
680
681
682
Note: See TracBrowser for help on using the repository browser.