source: 2017/utsjoki/TorstiK/GreatMonsters/GreatMonsters/GreatMonsters/GreatMonsters.cs @ 9193

Revision 9193, 10.5 KB checked in by sieerinn, 2 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 GreatMonsters : PhysicsGame
10{
11    const double nopeus = 200;
12    const double hyppyNopeus = 750;
13    const int RUUDUN_KOKO = 40;
14
15    int kenttaNro = 1;
16
17    PlatformCharacter pelaaja1;
18
19    Image pelaajanKuva1 = LoadImage("Monster1");
20    Image pelaajanKuva2 = LoadImage("Monster2");
21    Image pelaajanKuva3 = LoadImage("Monster3");
22    Image pelaajanKuva4 = LoadImage("Monster4");
23    Image pelaajanKuva5 = LoadImage("Monster5");
24
25    Image valittu;
26
27    Image tahtiKuva = LoadImage("Star");
28    Image piikkikuva = LoadImage("Piikki");
29    Image kallokuva = LoadImage("Kallo");
30    Image pikkuarkkukuva = LoadImage("Pikkuarkku");
31    Image voittoarkkukuva = LoadImage("Voittoarkku");
32    Image sydanpydanKuva = LoadImage("Sydanpydan");
33
34    IntMeter pistelaskuri = new IntMeter(0);
35    IntMeter elämälaskuri = new IntMeter(3);
36
37    Inventory tähdet;
38    Inventory sydämet;
39
40    SoundEffect maaliAani = LoadSoundEffect("maali");
41
42    DoubleMeter alaspainLaskuri;
43    Timer aikaLaskuri;
44
45    public override void Begin()
46    {
47
48
49        ClearAll();
50       
51
52        MultiSelectWindow alkuValikko = new MultiSelectWindow("Valitse Great Monster -hahmosi", "1", "2", "3", "4", "5", "Lopeta");
53        Add(alkuValikko);
54
55        alkuValikko.AddItemHandler(0, AloitaPeli, pelaajanKuva1);
56        alkuValikko.AddItemHandler(1, AloitaPeli, pelaajanKuva2);
57        alkuValikko.AddItemHandler(2, AloitaPeli, pelaajanKuva3);
58        alkuValikko.AddItemHandler(3, AloitaPeli, pelaajanKuva4);
59        alkuValikko.AddItemHandler(4, AloitaPeli, pelaajanKuva5);
60
61
62        alkuValikko.AddItemHandler(5, Exit);
63
64    }
65
66    void AloitaPeli(Image kuva)
67    {
68        valittu = kuva;
69
70        if (kenttaNro == 3)
71        {
72            Label läpäisy = new Label("Läpäisit pelin!");
73            Add(läpäisy);
74            Timer.SingleShot(4, delegate {
75                lopetaPeli();
76            });
77            return;
78        }
79
80        ClearAll();
81        Gravity = new Vector(0, -1000);
82        LuoKentta();
83        LisaaNappaimet();
84        LuoPistelaskuri();
85        LuoElämälaskuri();
86
87        Camera.Follow(pelaaja1);
88        Camera.ZoomFactor = 1.2;
89        Camera.StayInLevel = true;
90    }
91    void lopetaPeli()
92    {
93
94       Exit();
95       return;
96
97    }
98    void LuoPistelaskuri()
99    {
100        pistelaskuri = new IntMeter(0);
101        //Label pisteNaytto = new Label();
102        //pisteNaytto.X = Screen.Right + 100;
103        //pisteNaytto.Y = Screen.Top - 100;
104        ////pisteNaytto.SetImage = tahtiKuva;
105
106        //pisteNaytto.BindTo(pistelaskuri);
107        //Add(pisteNaytto);
108
109        tähdet = new Inventory();
110        tähdet.Top = Screen.Top - 50;
111        Add(tähdet);
112    }
113
114    void LuoElämälaskuri()
115    {
116        //elämälaskuri = new IntMeter(3);
117        sydämet = new Inventory();
118        sydämet.Top = Screen.Top - 150;
119        Add(sydämet);
120
121        for (int i = 0; i < elämälaskuri.Value; i++)
122        {
123            sydämet.AddItem(null, sydanpydanKuva);
124        }
125    }
126
127    void LuoKentta()
128    {
129       
130        TileMap kentta = TileMap.FromLevelAsset("kentta" + kenttaNro);
131        kentta.SetTileMethod('#', LisaaTaso);
132        kentta.SetTileMethod('*', LisaaTahti);
133        kentta.SetTileMethod('N', LisaaPelaaja);
134        kentta.SetTileMethod('P', LisaaPiikki);
135        kentta.SetTileMethod('K', LisaaKallo);
136        kentta.SetTileMethod('p', LisaaPikkuarkku);
137        kentta.SetTileMethod('V', LisaaVoittoarkku);
138        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
139        Level.CreateBorders();
140        Level.Background.CreateGradient(Color.White, Color.SkyBlue);
141    }
142
143    void LisaaTaso(Vector paikka, double leveys, double korkeus)
144    {
145        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
146        taso.Position = paikka;
147        taso.Color = Color.Aquamarine;
148        Add(taso);
149    }
150
151    void LisaaTahti(Vector paikka, double leveys, double korkeus)
152    {
153        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys, korkeus);
154        tahti.IgnoresCollisionResponse = true;
155        tahti.Position = paikka;
156        tahti.Image = tahtiKuva;
157        tahti.Tag = "tahti";
158        Add(tahti);
159    }
160    void LisaaPiikki(Vector paikka, double leveys, double korkeus)
161    {
162        PhysicsObject Piikki = PhysicsObject.CreateStaticObject(leveys, korkeus);
163        Piikki.Position = paikka;
164        Piikki.Image = piikkikuva;
165        Piikki.Tag = "Piikki";
166        Add(Piikki);
167    }
168    void LisaaKallo(Vector paikka, double leveys, double korkeus)
169    {
170        PhysicsObject Kallo = PhysicsObject.CreateStaticObject(leveys, korkeus);
171        Kallo.IgnoresCollisionResponse = true;
172        Kallo.Position = paikka;
173        Kallo.Image = kallokuva;
174        Kallo.Tag = "Kallo";
175        Add(Kallo);
176    }
177    void LisaaPikkuarkku(Vector paikka, double leveys, double korkeus)
178    {
179        PhysicsObject Pikkuarkku = PhysicsObject.CreateStaticObject(leveys, korkeus);
180        Pikkuarkku.IgnoresCollisionResponse = true;
181        Pikkuarkku.Position = paikka;
182        Pikkuarkku.Image = pikkuarkkukuva;
183        Pikkuarkku.Tag = "Pikkuarkku";
184        Add(Pikkuarkku);
185    }
186    void LisaaVoittoarkku(Vector paikka, double leveys, double korkeus)
187    {
188        PhysicsObject Voittoarkku = PhysicsObject.CreateStaticObject(leveys, korkeus);
189        Voittoarkku.IgnoresCollisionResponse = true;
190        Voittoarkku.Position = paikka;
191        Voittoarkku.Image = voittoarkkukuva;
192        Voittoarkku.Tag = "Voittoarkku";
193        Add(Voittoarkku);
194    }
195    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
196    {
197        pelaaja1 = new PlatformCharacter(leveys, korkeus);
198        pelaaja1.Position = paikka;
199        pelaaja1.Mass = 4.0;
200        pelaaja1.Image = valittu;
201        AddCollisionHandler(pelaaja1, "tahti", TormaaTahteen);
202        AddCollisionHandler(pelaaja1, "Piikki", TormaaPiikkiin);
203        AddCollisionHandler(pelaaja1, "Kallo", TormaaKalloon);
204        AddCollisionHandler(pelaaja1, "Pikkuarkku", TormaaPikkuarkkuun);
205        AddCollisionHandler(pelaaja1, "Voittoarkku", TormaaVoittoarkkuun);
206        Add(pelaaja1);
207    }
208
209    void LisaaNappaimet()
210    {
211        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
212        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
213
214        Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
215        Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, nopeus);
216        Keyboard.Listen(Key.Up, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
217
218        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
219
220        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
221        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
222        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
223
224        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
225    }
226
227    void Liikuta(PlatformCharacter hahmo, double nopeus)
228    {
229        hahmo.Walk(nopeus);
230    }
231
232    void Hyppaa(PlatformCharacter hahmo, double nopeus)
233    {
234        hahmo.Jump(nopeus);
235    }
236
237    void TormaaTahteen(PhysicsObject hahmo, PhysicsObject tahti)
238    {
239        maaliAani.Play();
240        MessageDisplay.Add("Keräsit tähden!");
241        tahti.Destroy();
242        pistelaskuri.Value += 1;
243        tähdet.AddItem(null, tahtiKuva);
244    }
245    void Kuole()
246    {
247        elämälaskuri.Value -= 1;
248        if (sydämet.ObjectCount > 0)
249            sydämet.Objects[0].Destroy();
250        if(elämälaskuri.Value <= 0)
251        {
252            Label viesti = new Label("Game over");
253            Add(viesti);
254            //MessageDisplay.Add("Game over!");
255            Timer.SingleShot(3, delegate
256             {
257                 Exit();
258
259             });
260           
261            //LuoAikaLaskuri();
262        }
263        Timer.SingleShot(3, delegate
264        {
265            ClearAll();
266            //Begin();
267            AloitaPeli(valittu);
268        });
269    }
270
271   
272    void TormaaPiikkiin(PhysicsObject hahmo, PhysicsObject piikki)
273    {
274        if (Math.Abs(pelaaja1.Bottom - piikki.Top) < 5)
275        {
276            MessageDisplay.Add("Menetit elämän!");
277            pelaaja1.Destroy();
278            Kuole();
279        }
280
281    }
282    void TormaaKalloon(PhysicsObject hahmo, PhysicsObject kallo)
283    {
284        MessageDisplay.Add("Menetit elämän!");
285        pelaaja1.Destroy();
286        kallo.Destroy();
287        Kuole();
288
289        Explosion rajahdys = new Explosion(100);
290        rajahdys.Position = kallo.Position;
291        Add(rajahdys);
292    }
293
294    void TormaaPikkuarkkuun(PhysicsObject hahmo, PhysicsObject pikkuarkku)
295    {
296        if (elämälaskuri.Value < 3)
297        {
298            MessageDisplay.Add("Sait elämän!");
299            pikkuarkku.Destroy();
300            sydämet.AddItem(null, sydanpydanKuva);
301            elämälaskuri.Value += 1;
302        }
303
304
305    }
306    void TormaaVoittoarkkuun(PhysicsObject hahmo, PhysicsObject voittoarkku)
307    {
308        MessageDisplay.Add("Voitit!");
309
310        if(pistelaskuri.Value >= 10)
311        {
312            kenttaNro += 1;
313           
314            //Begin();
315            AloitaPeli(valittu);
316        }
317    }
318}
319
320
321class Inventory : Widget
322{
323    /// <summary>
324    /// Tapahtuma, kun esine on valittu.
325    /// </summary>
326    public event Action<PhysicsObject> ItemSelected;
327
328    /// <summary>
329    /// Luo uuden esinevalikon.
330    /// </summary>
331    public Inventory()
332        : base(new HorizontalLayout())
333    {
334    }
335
336    /// <summary>
337    /// Lisää esineen.
338    /// </summary>
339    /// <param name="item">Lisättävä esine.</param>
340    /// <param name="kuva">Esineen ikoni, joka näkyy valikossa.</param>
341    public void AddItem(PhysicsObject item, Image kuva)
342    {
343        PushButton icon = new PushButton(60, 60);
344        icon.Image = kuva;
345        Add(icon);
346        icon.Clicked += delegate () { SelectItem(item); };
347    }
348
349    void SelectItem(PhysicsObject item)
350    {
351        if (ItemSelected != null)
352        {
353            ItemSelected(item);
354        }
355    }
356}
Note: See TracBrowser for help on using the repository browser.