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

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