source: 2015/27/JaakkoS/Tikku/Tikku/Tikku/Tikku.cs @ 7082

Revision 7082, 12.6 KB checked in by sieerinn, 5 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 Tikku : PhysicsGame
10{
11
12    const double nopeus = 300;
13    const double hyppyNopeus = 750;
14    const int RUUDUN_KOKO = 40;
15
16    int kenttaNro = 1;
17
18   
19
20    PlatformCharacter pelaaja1;
21    PlatformCharacter vihu1;
22    PlatformCharacter Torni1;
23
24
25    IntMeter elamalaskuri;
26
27
28    List<Widget> pelaajansydammet = new List<Widget>();
29
30    Image pelaajanKuva = LoadImage("Pelaaja");
31    Image tahtiKuva = LoadImage("aarre");
32    Image vihuKuva = LoadImage("AUTO");
33    Image kynaKuva = LoadImage("kyna");
34    Image MaaKuva = LoadImage("Maa");
35    Image palikkaKuva = LoadImage("palikka");
36    Image Loppukuva = LoadImage("Loppu");
37    Image AseKuva = LoadImage("Tyhja");
38
39    SoundEffect maaliAani = LoadSoundEffect("maali");
40    SoundEffect kynaAani = LoadSoundEffect("Health");
41    SoundEffect auts = LoadSoundEffect("Auts");
42    SoundEffect kuoleAani = LoadSoundEffect("Kuole");
43
44    bool onmenettanytenergiaa = false;
45
46    Widget sydammet;
47
48    int pelaajia;
49
50    private Animation torniAnimaatio;
51    public override void Begin()
52    {
53        torniAnimaatio = LoadAnimation("Torni");
54
55        SeuraavaKentta();
56        SmoothTextures = false;
57
58        MultiSelectWindow valikko = new MultiSelectWindow("Alkuvalikko", "Aloita", "Lopeta");
59        Add(valikko);
60        valikko.AddItemHandler(0, valikko2);
61        valikko.AddItemHandler(1, Exit);
62
63        IsMouseVisible = true;
64
65       
66    }
67
68    void valikko2()
69    {
70        MultiSelectWindow valikko2 = new MultiSelectWindow("Pelaaja määrä?", "1", "2");
71        Add(valikko2);
72        valikko2.AddItemHandler(0, delegate { pelaajia = 1; SeuraavaKentta(); });
73        valikko2.AddItemHandler(1, delegate { pelaajia = 2;  SeuraavaKentta(); });
74    }
75
76
77    void LiikutaPelaajaa(AnalogState tatinTila)
78    {
79        Vector tatinAsento = tatinTila.StateVector.Normalize();
80       
81        if (tatinAsento == new Vector(1,0)) // oikealle
82        {
83            pelaaja1.Walk(nopeus);
84        }
85        else if (tatinAsento == new Vector(-1, 0)) // vasemmalle
86        {
87            pelaaja1.Walk(-nopeus);
88        }
89
90    }
91 
92    void LuoKentta(string kenttaTiedostonNimi)
93    {
94        TileMap kentta = TileMap.FromLevelAsset(kenttaTiedostonNimi);
95        kentta.SetTileMethod('#', LisaaTaso);
96        kentta.SetTileMethod('!', LisaaTappavaTaso);
97        kentta.SetTileMethod('*', LisaaTahti);
98        kentta.SetTileMethod('N', LisaaPelaaja);
99        kentta.SetTileMethod('V', LisaaVihu);
100        kentta.SetTileMethod('K', Lisaakyna);
101        kentta.SetTileMethod('M', LisaaMaa);
102        kentta.SetTileMethod('T', LisaaTorni);
103
104        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
105
106
107        PhysicsObject alaReuna = Level.CreateBottomBorder();
108        alaReuna.Restitution = 1.0;
109        alaReuna.IsVisible = false;
110        alaReuna.Tag = "alaReuna";
111
112        PhysicsObject oikeaReuna = Level.CreateRightBorder();
113        oikeaReuna.Restitution = 1.0;
114        oikeaReuna.IsVisible = false;
115
116        PhysicsObject vasenReuna = Level.CreateLeftBorder();
117        vasenReuna.Restitution = 1.0;
118        vasenReuna.IsVisible = false;
119
120        TileMap ruudut = TileMap.FromLevelAsset(kenttaTiedostonNimi);
121
122        Level.Background.CreateGradient(Color.White, Color.SkyBlue);
123
124        Label sydamet = new Label();
125        sydamet.BindTo(elamalaskuri);
126        sydamet.Position = new Vector(Screen.Left + 20, Screen.Top - 100);
127        Add(sydamet);
128
129       
130    }
131
132    void LisaaTaso(Vector paikka, double leveys, double korkeus)
133    {
134        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
135        taso.Position = paikka;
136        taso.Image = palikkaKuva;
137        Add(taso);
138    }
139
140    void LisaaMaa(Vector paikka, double leveys, double korkeus)
141    {
142        PhysicsObject maa = PhysicsObject.CreateStaticObject(leveys, korkeus);
143        maa.Position = paikka;
144        maa.Image = MaaKuva;
145        Add(maa);
146    }
147
148
149    void LisaaTappavaTaso(Vector paikka, double leveys, double korkeus)
150    {
151        PhysicsObject tappavataso = PhysicsObject.CreateStaticObject(leveys, korkeus);
152        tappavataso.Position = paikka;
153        tappavataso.Image = palikkaKuva;
154        tappavataso.Tag = "tappavapalikka";
155        Add(tappavataso);
156    }
157
158    void LisaaTahti(Vector paikka, double leveys, double korkeus)
159    {
160        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys, korkeus);
161        tahti.IgnoresCollisionResponse = true;
162        tahti.Position = paikka;
163        tahti.Image = tahtiKuva;
164        tahti.Tag = "tahti";
165        Add(tahti);
166    }
167
168    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
169    {
170        pelaaja1 = new PlatformCharacter(leveys, korkeus);
171        pelaaja1.Position = paikka;
172        pelaaja1.Mass = 4.0;
173        pelaaja1.Image = pelaajanKuva;
174        AddCollisionHandler(pelaaja1, "tahti", TormaaTahteen);
175        AddCollisionHandler(pelaaja1, "kyna", TormaaKynaan);
176        AddCollisionHandler(pelaaja1, "alaReuna", Putoaa);
177        AddCollisionHandler(pelaaja1, "tappavapalikka", Kuole);
178        AddCollisionHandler(pelaaja1, "vihu", Kuole);
179        AddCollisionHandler(pelaaja1, "ammus", Kuole);
180
181        Add(pelaaja1);
182    }
183
184    void LisaaVihu(Vector paikka, double leveys, double korkeus)
185    {
186        vihu1 = new PlatformCharacter(70.0, 25.0);
187        vihu1.Position = paikka;
188        vihu1.Mass = 4.0;
189        vihu1.Image = vihuKuva;
190
191        PlatformWandererBrain tasoAivot = new PlatformWandererBrain();
192        tasoAivot.Speed = 100;
193        vihu1.Brain = tasoAivot;
194
195        vihu1.Tag = "vihu";
196        Add(vihu1);
197    }
198
199    void LisaaTorni(Vector paikka, double leveys, double korkeus)
200    {
201        Torni1 = new PlatformCharacter(50.0, 70.0);
202        Torni1.Position = paikka;
203        Torni1.Mass = 10000.0;
204
205        Torni1.Animation = torniAnimaatio;
206        Torni1.Animation.Start();
207        Torni1.Animation.FPS = 5;
208
209        Torni1.Weapon = new AssaultRifle(30, 10);
210        Torni1.Weapon.ProjectileCollision = AmmusOsui;
211        Torni1.Weapon.Image = AseKuva;
212        Torni1.Weapon.FireRate = 1;
213        Torni1.Weapon.Power.MaxValue = 50;
214
215        Timer ampumisAjastin = new Timer();
216        ampumisAjastin.Interval = 1;
217        ampumisAjastin.Timeout += delegate { TorniAmpuu(Torni1); };
218        ampumisAjastin.Start();
219
220        Add(Torni1);
221    }
222
223    void TorniAmpuu (PlatformCharacter torni)
224    {
225        if (Vector.Distance(pelaaja1.Position, torni.Position) < 300)
226        {
227            torni.Weapon.AbsoluteAngle = (pelaaja1.Position - torni.Position).Angle;, 
228            PhysicsObject ammus = torni.Weapon.Shoot();
229            if (ammus != null)
230            {
231                ammus.Tag = "ammus";
232            }
233        }
234    }
235
236void Lisaakyna(Vector paikka, double leveys, double korkeus)
237    {
238        PhysicsObject kyna = PhysicsObject.CreateStaticObject(leveys, korkeus);
239        kyna.IgnoresCollisionResponse = true;
240        kyna.Position = paikka;
241        kyna.Image = kynaKuva;
242        kyna.Tag = "kyna";
243        Add(kyna);
244    }
245
246
247    void LisaaNappaimet()
248    {
249        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
250        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
251       
252
253
254        if (pelaajia == 2)
255        {
256            Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, "Liikkuu oikalle", pelaaja1, nopeus);
257            Keyboard.Listen(Key.A, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
258            Keyboard.Listen(Key.Space, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
259
260            ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
261
262            ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
263            ControllerTwo.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja Liikkuu vasemmalle", pelaaja1, -nopeus);
264            ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
265            ControllerTwo.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
266        }
267
268        if (pelaajia == 1)
269        {
270            Keyboard.Listen(Key.D, ButtonState.Down, Liikuta, "Liikkuu oikalle", pelaaja1, nopeus);
271            Keyboard.Listen(Key.A, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
272            Keyboard.Listen(Key.Space, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
273
274            ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
275            ControllerOne.ListenAnalog(AnalogControl.LeftStick, 0.1, LiikutaPelaajaa, "Liikuta pelaajaa tattia pyörittämällä.");
276            ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
277        }
278
279
280        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
281    }
282
283    void Liikuta(PlatformCharacter hahmo, double nopeus)
284    {
285        hahmo.Walk(nopeus);
286    }
287
288    void Hyppaa(PlatformCharacter hahmo, double nopeus)
289    {
290        hahmo.Jump(nopeus);
291    }
292
293    void TormaaTahteen(PhysicsObject hahmo, PhysicsObject tahti)
294    {
295        maaliAani.Play();
296        tahti.Destroy();
297        kenttaNro++;
298        SeuraavaKentta();
299
300    }
301
302    void TormaaKynaan(PhysicsObject hahmo, PhysicsObject kyna)
303    {
304       
305        kyna.Destroy();
306        if (elamalaskuri.Value < 3)
307        {
308            MessageDisplay.Add("Sait lisää elämää!");
309            elamalaskuri.Value++;
310            LisaaYksiUusiSydan();
311            kynaAani.Play();
312        }
313    }
314
315    void Putoaa(PhysicsObject hahmo, PhysicsObject kolo)
316    {
317        hahmo.Destroy();
318        MessageDisplay.Add("Kuolit :(");
319        Timer.SingleShot(3.0, Exit);
320        SeuraavaKentta();
321
322    }
323
324
325    void Kuole(PhysicsObject hahmo, PhysicsObject vihu)
326    {
327
328        if (onmenettanytenergiaa == false)
329        {
330            if (elamalaskuri.Value >= 0 && pelaajansydammet[elamalaskuri.Value-1] != null)
331            {
332               
333                elamalaskuri.Value--;
334                onmenettanytenergiaa = true;
335                Timer.SingleShot(0.1, delegate { onmenettanytenergiaa = false; });
336                pelaajansydammet[elamalaskuri.Value].Destroy();
337                auts.Play();
338            }
339            if (elamalaskuri.Value < 1)
340            {
341                hahmo.Destroy();
342                MessageDisplay.Add("Kuolit :(");
343                Timer.SingleShot(3.0, SeuraavaKentta);
344                pelaajansydammet.Clear();
345                kuoleAani.Play();
346            }
347        }
348
349
350    }
351
352    void LuoSydammet()
353    {
354        HorizontalLayout asettelu = new HorizontalLayout();
355        asettelu.Spacing = 3;
356
357        sydammet = new Widget(asettelu);
358        sydammet.Color = Color.Transparent;
359        sydammet.X = Screen.Center.X;
360        sydammet.Y = Screen.Top - 30;
361        Add(sydammet);
362
363        pelaajansydammet.Clear();
364        for (int i = 0; i < 3; i++)
365        {
366            LisaaYksiUusiSydan();
367        }
368    }
369
370    void LisaaYksiUusiSydan()
371    {
372        Widget sydan = new Widget(30, 30, Shape.Heart);
373        sydan.Color = Color.Red;
374        sydammet.Add(sydan);
375        pelaajansydammet.Add(sydan);
376    }
377
378    void SeuraavaKentta()
379    {
380       
381
382        ClearAll();
383        LuoSydammet();
384
385        elamalaskuri = new IntMeter(3, 0, 3);
386
387        if (kenttaNro == 1) LuoKentta("kentta1");
388        if (kenttaNro == 1) MessageDisplay.Add("Lähdet etsimään tarun hohtoista aarretta... No mene jo!");
389        else if (kenttaNro == 2) LuoKentta("kentta2");
390        if (kenttaNro == 2) MessageDisplay.Add("Huhuh. Oliko rankkaa :D? AI EIKÖ VAI...");
391        else if (kenttaNro == 3) LuoKentta("kentta3");
392        else if (kenttaNro == 4) LuoKentta("kentta4");
393        if (kenttaNro == 4) MessageDisplay.Add("NO OLIKO NYT RANKKAA?!");
394        else if (kenttaNro == 5) MessageDisplay.Add("Noh löysit aarteen. Onko nyt hyvä mieli? -_-*");
395        if (kenttaNro == 5) Timer.SingleShot(3.0, Exit);
396
397
398        LisaaNappaimet();
399
400
401
402
403        Camera.Follow(pelaaja1);
404        Camera.ZoomFactor = 1.2;
405        Camera.StayInLevel = true;
406
407        Gravity = new Vector(0, -1000);
408    }
409
410    void AmmusOsui (PhysicsObject ammus, PhysicsObject kohde)
411    {
412        ammus.Destroy();
413    }
414
415}
Note: See TracBrowser for help on using the repository browser.