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

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