source: 2014/24/AakeR/UkkeliTappelu/UkkeliTappelu/UkkeliTappelu/UkkeliTappelu.cs @ 4956

Revision 4956, 12.3 KB checked in by aaruuttu, 8 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
10class Ukkeli : PhysicsObject
11{
12    public bool saaHypätä = true;
13    public int suunta = 0;
14   
15    private IntMeter staminaLaskuri = new IntMeter(6, 0, 6);
16    public IntMeter StaminaLaskuri { get { return staminaLaskuri; } }
17
18    public bool onJaahylla = false;
19    public bool katsooOikealle = true;
20
21    public Ukkeli(double leveys, double korkeus)
22        : base(leveys, korkeus)
23    {
24        CanRotate = false;
25        staminaLaskuri.LowerLimit += delegate { 
26            onJaahylla = true;
27            Timer.SingleShot(5.0, delegate { onJaahylla = false; } );
28        };
29    }
30
31    public void Hyppää()
32    {
33        if (saaHypätä)
34        {
35            Hit(new Vector(0, 2000));
36            saaHypätä = false;
37        }
38    }
39
40    public void Liiku(int liikkumisSuunta)
41    {
42        suunta = liikkumisSuunta;
43        Push(new Vector(suunta*3000, 0));
44    }
45}
46
47
48public class UkkeliTappelu : PhysicsGame
49{
50    const double nopeus = 200;
51    const double hyppyNopeus = 750;
52    const int RUUDUN_KOKO = 40;
53
54    Ukkeli pelaaja1;
55    Ukkeli pelaaja2;
56    Ukkeli pelaaja3;
57    Ukkeli pelaaja4;
58
59    Image pelaajan1Kuva = LoadImage("Ukkeli1");
60    Image pelaajan2Kuva = LoadImage("Ukkeli2");
61    Image pelaajan3Kuva = LoadImage("Ukkeli3");
62    Image pelaajan4Kuva = LoadImage("Ukkeli4");
63    Image tahtiKuva = LoadImage("tahti");
64    Image laavaKuva = LoadImage("Lava");
65    Image nyrkkiKuvaoikea = LoadImage("Nyrkki");
66    Image nyrkkiKuvavasen = LoadImage("Nyrkki2");
67    Image luurankoKuva = LoadImage("Luuranko");
68    Image tulivuoriKuva = LoadImage("InsideVolcano");
69
70    SoundEffect hyppyAani = LoadSoundEffect("Jump");
71    SoundEffect laskeutumisAani = LoadSoundEffect("Laskeutuminen");
72    SoundEffect lyontiAani = LoadSoundEffect("Punch");
73
74    List<Ukkeli> ukkeliList = new List<Ukkeli>();
75
76    int ukkojenMaara;
77
78    public override void Begin()
79    {
80        LuoAlkuvalikko();
81    }
82
83    void LuoAlkuvalikko()
84    {
85        ClearAll();
86
87        MultiSelectWindow alkuValikko = new MultiSelectWindow("Pelin alkuvalikko","Aloita peli", "Lopeta");
88        Add(alkuValikko);
89
90        alkuValikko.AddItemHandler(0, ValitsePelaajat);
91        alkuValikko.AddItemHandler(1, Exit);
92    }
93
94    void ValitsePelaajat()
95    {
96        MultiSelectWindow alkuValikko = new MultiSelectWindow("Montako pelaajaa","2 Pelaajaa", "3 Pelaajaa", "4 Pelaajaa");
97        Add(alkuValikko);
98
99        alkuValikko.AddItemHandler(0, delegate { AloitaPeli(2); });
100        alkuValikko.AddItemHandler(1, delegate { AloitaPeli(3); });
101        alkuValikko.AddItemHandler(2, delegate { AloitaPeli(4); });
102    }
103
104    void AloitaPeli(int PelaajaMaara)
105    {
106        Gravity = new Vector(0, -1000);
107
108        LuoKentta(PelaajaMaara);
109        LisaaNappaimet(PelaajaMaara);
110        MediaPlayer.Play("Guren_No_Yumiya");
111        MediaPlayer.Volume = 0.4;
112
113        //Camera.Follow(pelaaja1, pelaaja2, pelaaja3, pelaaja4);
114        //Camera.ZoomFactor = 1.5;
115        Camera.ZoomToLevel();
116        //Camera.StayInLevel = true;
117        //Camera.Velocity = new Vector(0, 0);
118
119        Timer ajastinStamina = new Timer();
120        ajastinStamina.Interval = 1.5;
121        ajastinStamina.Timeout += delegate
122        {
123            foreach (Ukkeli ukkeli in ukkeliList)
124            {
125                if (ukkeli.StaminaLaskuri.Value >= 6) continue;
126                if (!ukkeli.onJaahylla) ukkeli.StaminaLaskuri.Value++;
127            }
128        };
129        ajastinStamina.Start();
130
131        ukkojenMaara = ukkeliList.Count;
132    }
133
134    void Voitto()
135    {
136        GameObject voitto = new GameObject(200, 100);
137        voitto.Image = LoadImage("Winner");
138        Add(voitto);
139
140        Timer.SingleShot(5.0, delegate { LuoAlkuvalikko(); });
141    }
142
143    void LuoKentta(int PelaajaMaara)
144    {
145        ukkeliList.Clear();
146        TileMap kentta = TileMap.FromLevelAsset("kentta1");
147        kentta.SetTileMethod('#', LisaaTaso);
148        kentta.SetTileMethod('1', LisaaPelaaja1);
149        kentta.SetTileMethod('2', LisaaPelaaja2);
150        if(PelaajaMaara>=3) kentta.SetTileMethod('3', LisaaPelaaja3);
151        if (PelaajaMaara >= 4) kentta.SetTileMethod('4', LisaaPelaaja4);
152        kentta.Optimize('#');
153        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
154        Level.CreateBorders(1.0, false);
155        Level.Background.Color = Color.Black;
156        Level.Background.CreateGradient(Color.Orange, Color.DarkRed );
157        Level.Background.Image = tulivuoriKuva;
158        Level.Background.FitToLevel();
159        PhysicsObject Laava = PhysicsObject.CreateStaticObject(Level.Width, 800);
160        Add(Laava);
161        Laava.Image = laavaKuva;
162        Laava.Top = Level.Bottom + 10;
163        Laava.Velocity = new Vector(0, 5);
164        Laava.Tag = "laava";
165    }
166
167    void LisaaTaso(Vector paikka, double leveys, double korkeus)
168    {
169        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
170        taso.Position = paikka;
171        taso.Color = Color.Gray;
172        Add(taso);
173        taso.Tag = "Seina";
174    }
175
176    void LisaaTahti(Vector paikka, double leveys, double korkeus)
177    {
178        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys, korkeus);
179        tahti.IgnoresCollisionResponse = true;
180        tahti.Position = paikka;
181        tahti.Image = tahtiKuva;
182        tahti.Tag = "tahti";
183        Add(tahti);
184    }
185
186    Ukkeli LuoPelaaja(double leveys, double korkeus, Image kuva)
187    {
188        Ukkeli pelaaja = new Ukkeli(leveys, korkeus );
189        pelaaja.Mass = 4.0;
190        pelaaja.Image = kuva;
191        pelaaja.Tag = "pelaaja";
192        AddCollisionHandler(pelaaja, "tahti", TormaaTahteen);
193        AddCollisionHandler(pelaaja, "laava", TormaaLaavaan);
194        AddCollisionHandler(pelaaja, "Seina", TormaaSeinaan);
195        Add(pelaaja);
196        return pelaaja;
197    }
198
199    void LisaaPelaaja1(Vector paikka, double leveys, double korkeus)
200    {
201        pelaaja1 = LuoPelaaja(leveys, korkeus, pelaajan1Kuva);
202        pelaaja1.Position = paikka;
203
204        ukkeliList.Add(pelaaja1);
205
206        Label staminaKuvaaja1 = new Label(pelaaja1.StaminaLaskuri);
207        staminaKuvaaja1.Position = new Vector(Level.Left + 50, Screen.Top -20);
208        Add(staminaKuvaaja1);
209    }
210
211    void LisaaPelaaja2(Vector paikka, double leveys, double korkeus)
212    {
213        pelaaja2 = LuoPelaaja(leveys, korkeus, pelaajan2Kuva);
214        pelaaja2.Position = paikka;
215
216        ukkeliList.Add(pelaaja2);
217
218        Label staminaKuvaaja2 = new Label(pelaaja2.StaminaLaskuri);
219        staminaKuvaaja2.Position = new Vector(Level.Left + 300, Screen.Top - 20);
220        Add(staminaKuvaaja2);
221    }
222
223    void LisaaPelaaja3(Vector paikka, double leveys, double korkeus)
224    {
225        pelaaja3 = LuoPelaaja(leveys, korkeus, pelaajan3Kuva);
226        pelaaja3.Position = paikka;
227
228        ukkeliList.Add(pelaaja3);
229
230        Label staminaKuvaaja3 = new Label(pelaaja3.StaminaLaskuri);
231        staminaKuvaaja3.Position = new Vector(Level.Left + 550, Screen.Top - 20);
232        Add(staminaKuvaaja3);
233    }
234
235    void LisaaPelaaja4(Vector paikka, double leveys, double korkeus)
236    {
237        pelaaja4 = LuoPelaaja(leveys, korkeus, pelaajan4Kuva);
238        pelaaja4.Position = paikka;
239
240        ukkeliList.Add(pelaaja4);
241
242        Label staminaKuvaaja4 = new Label(pelaaja4.StaminaLaskuri);
243        staminaKuvaaja4.Position = new Vector(Level.Left + 800, Screen.Top - 20);
244        Add(staminaKuvaaja4);
245    }
246
247
248
249    void LisaaNappaimet(int PelaajaMaara)
250    {
251        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
252        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
253
254        Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -1);
255        Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, 1);
256        Keyboard.Listen(Key.Up, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
257        Keyboard.Listen(Key.Down, ButtonState.Pressed, Lyo, "Pelaaja lyö", pelaaja1, new Ukkeli[] {pelaaja2, pelaaja3, pelaaja4});
258
259        Keyboard.Listen(Key.A, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja2, -1);
260        Keyboard.Listen(Key.D, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja2, 1);
261        Keyboard.Listen(Key.W, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja2, hyppyNopeus);
262        Keyboard.Listen(Key.S, ButtonState.Pressed, Lyo, "Pelaaja lyö", pelaaja2, new Ukkeli[] {pelaaja1, pelaaja3, pelaaja4});
263
264        if (PelaajaMaara >= 3)
265        {
266            Keyboard.Listen(Key.J, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja3, -1);
267            Keyboard.Listen(Key.L, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja3, 1);
268            Keyboard.Listen(Key.I, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja3, hyppyNopeus);
269            Keyboard.Listen(Key.K, ButtonState.Pressed, Lyo, "Pelaaja lyö", pelaaja3, new Ukkeli[] { pelaaja1, pelaaja2, pelaaja4 });
270        }
271
272        if (PelaajaMaara >= 4)
273        {
274            Keyboard.Listen(Key.NumPad4, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja4, -1);
275            Keyboard.Listen(Key.NumPad6, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja4, 1);
276            Keyboard.Listen(Key.NumPad8, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja4, hyppyNopeus);
277            Keyboard.Listen(Key.NumPad5, ButtonState.Pressed, Lyo, "Pelaaja lyö", pelaaja4, new Ukkeli[] { pelaaja1, pelaaja2, pelaaja3 });
278        }
279
280        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
281
282        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -1);
283        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja1, 1);
284        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
285
286        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
287    }
288
289    void Lyo(Ukkeli hahmo, Ukkeli[] muut)
290    {
291        if (hahmo.IsDestroyed || hahmo.onJaahylla) return;
292        hahmo.StaminaLaskuri.Value--;
293
294        PhysicsObject Nyrkki = PhysicsObject.CreateStaticObject(20, 30);
295        Add(Nyrkki, -1);
296        Nyrkki.Position = hahmo.Position+new Vector(hahmo.suunta, 0) * 30;
297        Nyrkki.Image = (hahmo.suunta > 0) ? nyrkkiKuvaoikea : nyrkkiKuvavasen;
298        Nyrkki.MaximumLifetime = TimeSpan.FromSeconds(0.1);
299        Nyrkki.IgnoresCollisionResponse = true;
300
301        AddCollisionHandler(Nyrkki, "pelaaja", delegate(PhysicsObject nyrkki, PhysicsObject pelaaja)
302        {
303            if (pelaaja != hahmo)
304            {
305                pelaaja.Hit((pelaaja.Position - nyrkki.Position).Normalize() * 1500);
306                lyontiAani.Play();
307                //pelaaja.Velocity = (pelaaja.Position - nyrkki.Position).Normalize() * 1500;
308            }
309        });
310    }
311
312    void Liikuta(Ukkeli hahmo, int suunta)
313    {
314        if (suunta < 0 && hahmo.katsooOikealle)
315        {
316            hahmo.MirrorImage();
317            hahmo.katsooOikealle = false;
318        }
319        else if (suunta >= 0 && !hahmo.katsooOikealle)
320        {
321            hahmo.MirrorImage();
322            hahmo.katsooOikealle = true;
323        }
324        hahmo.Liiku(suunta);
325    }
326
327    void Hyppaa(Ukkeli hahmo, double nopeus)
328    {
329        hahmo.Hyppää();
330        hyppyAani.Play();
331    }
332
333    void TormaaTahteen(PhysicsObject hahmo, PhysicsObject tahti)
334    {
335        MessageDisplay.Add("Keräsit tähden!");
336        tahti.Destroy();
337    }
338
339    void TormaaLaavaan(PhysicsObject hahmo, PhysicsObject laava)
340    {
341        hahmo.Destroy();
342        ukkojenMaara--;
343        PhysicsObject Luuranko = new PhysicsObject(RUUDUN_KOKO, RUUDUN_KOKO);
344        Luuranko.IgnoresCollisionResponse = true;
345        Luuranko.Image = luurankoKuva;
346        Luuranko.Position = hahmo.Position;
347        Add(Luuranko);
348        Luuranko.Hit(new Vector(RandomGen.NextDouble(-100, 100),400));
349        if (ukkojenMaara == 1) Voitto(); 
350    }
351
352    void TormaaSeinaan(PhysicsObject hahmo, PhysicsObject Seina)
353    {
354        (hahmo as Ukkeli).saaHypätä = true;
355        laskeutumisAani.Play();
356    }
357}
358
359
360
361
Note: See TracBrowser for help on using the repository browser.