source: 2016/27/ValtteriM/Tag/Tag/Tag/Tag.cs @ 8365

Revision 8365, 7.4 KB checked in by tesatapa, 3 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
9public class Tag : PhysicsGame
10{
11    const double nopeus = 200;
12    const double hyppyNopeus = 750;
13    const int RUUDUN_KOKO = 40;
14
15    PlatformCharacter pelaaja1;
16    PlatformCharacter pelaaja2;
17    PlatformCharacter pelaaja3;
18    PlatformCharacter pelaaja4;
19
20    GameObject merkki;
21    PlatformCharacter hippa;
22    int pelaajia;
23    Image pelaajan1Kuva = LoadImage("pelaaja1");
24    Image pelaaja2Kuva = LoadImage("pelaaja2");
25    Image pelaaja3Kuva = LoadImage("pelaaja3");
26    Image pelaaja4Kuva = LoadImage("pelaaja4");
27    IntMeter kello = new IntMeter(30, 0, 30);
28    public override void Begin()
29    {
30       
31        MultiSelectWindow alkuValikko = new MultiSelectWindow("Pelin alkuvalikko",
32"play", "Lopeta");
33        Add(alkuValikko);
34        alkuValikko.AddItemHandler(0, kysyMontako);
35        alkuValikko.AddItemHandler(1, Exit);
36        //Camera.Follow(pelaaja1);
37        //Camera.ZoomFactor = 1.2;
38        //Camera.StayInLevel = true;
39    }
40    void kysyMontako()
41    {
42        MultiSelectWindow alkuValikko = new MultiSelectWindow("Montako pelaajaa haluat?",
43"2", "3","4");
44        Add(alkuValikko);
45        alkuValikko.AddItemHandler(0, AloitaPeli, 2);
46        alkuValikko.AddItemHandler(1, AloitaPeli,3);
47        alkuValikko.AddItemHandler(2, AloitaPeli, 4);
48
49
50    }
51    void AloitaPeli(int montakopelaajaa)
52    {
53        ClearAll();
54        pelaajia = montakopelaajaa;
55        Gravity = new Vector(0, -1000);
56
57        LuoKentta();
58        LisaaNappaimet();
59
60        Camera.ZoomToLevel();
61        AloitaKello();
62    }
63    void AloitaKello()
64    {
65        kello.Value = kello.MaxValue;
66        Label aikaNaytto = new Label();
67        aikaNaytto.TextColor = Color.White;
68        aikaNaytto.DecimalPlaces = 1;
69        aikaNaytto.BindTo(kello);
70        Add(aikaNaytto);
71        Timer ajastin = new Timer();
72        ajastin.Interval = 1.0;
73        ajastin.Timeout += delegate { kello.Value -= 1; };
74        ajastin.Start();
75        kello.LowerLimit += Restart;
76    }
77
78
79    void LuoKentta()
80    {
81        TileMap kentta = TileMap.FromLevelAsset("kentta1");
82        kentta.SetTileMethod('#', LisaaTaso);
83       
84        kentta.SetTileMethod('1',delegate(Vector paikka, double leveys, double korkeus) { pelaaja1 = LisaaPelaaja(paikka, leveys, korkeus, pelaajan1Kuva); });
85        kentta.SetTileMethod('2', delegate (Vector paikka, double leveys, double korkeus) { pelaaja2 = LisaaPelaaja(paikka, leveys, korkeus, pelaaja2Kuva); });
86        kentta.SetTileMethod('3', delegate (Vector paikka, double leveys, double korkeus) {if(pelaajia>=3) pelaaja3 = LisaaPelaaja(paikka, leveys, korkeus, pelaaja3Kuva); });
87        kentta.SetTileMethod('4', delegate (Vector paikka, double leveys, double korkeus) { if (pelaajia >= 4) pelaaja4 = LisaaPelaaja(paikka, leveys, korkeus, pelaaja4Kuva); });
88
89        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
90        Level.Background.Color = Color.Black;
91
92        LuoHippaMerkki();
93        PlatformCharacter pelaaja = RandomGen.SelectOne<PlatformCharacter>(new PlatformCharacter[] { pelaaja1, pelaaja2, pelaaja3, pelaaja4 });
94        pelaaja.Tag = "Hippa";
95        hippa = pelaaja;
96        merkki.Position = hippa.Position;
97    }
98
99    void LuoHippaMerkki()
100    {
101        merkki = new GameObject(5, 5);
102        Add(merkki, 3);
103    }
104
105    void LisaaTaso(Vector paikka, double leveys, double korkeus)
106    {
107        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
108        taso.Position = paikka;
109        taso.Color = Color.Brown;
110        Add(taso);
111    }
112
113    PlatformCharacter LisaaPelaaja(Vector paikka, double leveys, double korkeus, Image kuva)
114    {
115        PlatformCharacter pelaaja = new PlatformCharacter(leveys*0.3, korkeus*0.3);
116        pelaaja.Position = paikka;
117        pelaaja.Mass = 2.0;
118        pelaaja.Image = kuva;
119        pelaaja.Tag = "Pelaaja";
120        AddCollisionHandler(pelaaja, "Hippa", HippaOsui);
121       
122        Add(pelaaja);return pelaaja;
123    }
124
125    void HippaOsui(PhysicsObject pelaaja, PhysicsObject vanhaHippa)
126    {
127        Timer.SingleShot(0.1, delegate
128        {
129            pelaaja.Tag = "Hippa";
130            vanhaHippa.Tag = "Pelaaja";
131            hippa = (PlatformCharacter)pelaaja;
132            merkki.Position = hippa.Position;
133        });
134
135    }
136
137    void LisaaNappaimet()
138    {
139        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
140        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
141        Keyboard.Listen(Key.Space, ButtonState.Pressed, Restart, "Aloita alusta");
142
143        Keyboard.Listen(Key.A, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
144        Keyboard.Listen(Key.D, ButtonState.Down, Liikuta, "Liikkuu oikealle", pelaaja1, nopeus);
145        Keyboard.Listen(Key.W, ButtonState.Pressed, Hyppaa, "Pelaaja1 hyppää", pelaaja1, hyppyNopeus);
146
147        Keyboard.Listen(Key.NumPad4, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja2, -nopeus);
148        Keyboard.Listen(Key.NumPad6, ButtonState.Down, Liikuta, "Liikkuu oikealle", pelaaja2, nopeus);
149        Keyboard.Listen(Key.NumPad8, ButtonState.Pressed, Hyppaa, "Pelaaja2 hyppää", pelaaja2, hyppyNopeus);
150        if (pelaajia >= 3)
151        {
152            Keyboard.Listen(Key.G, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja3, -nopeus);
153            Keyboard.Listen(Key.J, ButtonState.Down, Liikuta, "Liikkuu oikealle", pelaaja3, nopeus);
154            Keyboard.Listen(Key.Y, ButtonState.Pressed, Hyppaa, "Pelaaja3 hyppää", pelaaja3, hyppyNopeus);
155        }
156        if (pelaajia >= 4)
157        {
158            Keyboard.Listen(Key.L, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja4, -nopeus);
159            Keyboard.Listen(Key.Auml, ButtonState.Down, Liikuta, "Liikkuu oikealle", pelaaja4, nopeus);
160            Keyboard.Listen(Key.P, ButtonState.Pressed, Hyppaa, "Pelaaja4 hyppää", pelaaja4, hyppyNopeus);
161        }
162        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
163
164        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
165        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
166        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
167
168        ControllerTwo.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja2, -nopeus);
169        ControllerTwo.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja2, nopeus);
170        ControllerTwo.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja2, hyppyNopeus);
171
172        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
173    }
174
175    void Restart()
176    {
177        AloitaPeli(pelaajia);
178    }
179
180    void Liikuta(PlatformCharacter hahmo, double nopeus)
181    {
182        if (hahmo.Tag.Equals("Hippa")) hahmo.Walk(nopeus*2);
183        else hahmo.Walk(nopeus);
184    }
185
186    void Hyppaa(PlatformCharacter hahmo, double nopeus)
187    {
188        hahmo.Jump(nopeus);
189    }
190
191    protected override void Update(Time time)
192    {
193        base.Update(time);
194        if(merkki != null)
195            merkki.Position = hippa.Position;
196    }
197
198}
Note: See TracBrowser for help on using the repository browser.