source: 2017/27/AnttiN/Kullankaivaja/Kullankaivaja/Kullankaivaja/Kullankaivaja.cs @ 8885

Revision 8885, 12.6 KB checked in by npo17_45, 4 years ago (diff)

Taas vähän edistystä kullankaivajaan.

Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9public class Kullankaivaja : PhysicsGame
10{
11
12    //tämä on peli
13    //tai oikeastaan sen koodi
14
15    const double nopeus = 200;
16    const double hyppyNopeus = 650;
17    const int RUUDUN_KOKO = 40;
18
19    int pisteet = 0;
20    IntMeter rahalaskuri;
21
22    PlatformCharacter pelaaja1;
23
24    SoundEffect maaliAani = LoadSoundEffect("maali");
25    Image pelaajanKuva = LoadImage("Kaivaja");
26    Image tahtiKuva = LoadImage("tahti");
27    Image ruohomaa = LoadImage("Ruohomaa");
28    Image maa = LoadImage("Maa");
29    Image hiekkakuva = LoadImage("Hiekka");
30    Image kuparikuva = LoadImage("Kupari");
31    Image hopeakuva = LoadImage("Hopea");
32    Image vahankultaakuva = LoadImage("Vahankultaa");
33    Image paljonkultaakuva = LoadImage("Paljonkultaa");
34    Image tyhjaruutukuva = LoadImage("Tyhjaruutu");
35    Image valitturuutukuva = LoadImage("Valitturuutu");
36    Image taustakuva = LoadImage("Tausta");
37
38
39    Inventory inventory;
40    int esinelaskuri = 0;
41
42    public override void Begin()
43    {
44        Level.Size = Screen.Size;
45        Level.Background.Image = taustakuva;
46        Level.Background.FitToLevel();
47        IsFullScreen = false;
48        Timer.SingleShot(0.1, LuoAlkuvalikko);
49    }
50
51    void LuoAlkuvalikko()
52    {
53       
54        MultiSelectWindow alkuValikko = new MultiSelectWindow("Pelin alkuvalikko",
55"Aloita peli", "Lopeta");
56        alkuValikko.AddItemHandler(0, AloitaPeli);
57        alkuValikko.AddItemHandler(1, Exit);
58        Add(alkuValikko);
59
60    }
61
62    void AloitaPeli()
63    {
64        ClearAll();
65        LuoKentta();
66        Level.Background.Image = taustakuva;
67
68        Camera.Follow(pelaaja1);
69        Camera.ZoomFactor = 1.2;
70        Camera.StayInLevel = true;
71
72        Gravity = new Vector(0, -500);
73
74        Luopainikkeet();
75        LisaaNappaimet();
76        LisaaMuut();
77
78    }
79
80    void LisaaMuut()
81    {
82        //rahalaskuri laskemaan ja näyttämään rahat
83        rahalaskuri = new IntMeter(pisteet);
84
85        Label pisteNaytto = new Label();
86        pisteNaytto.X = Screen.Left + 100;
87        pisteNaytto.Y = Screen.Top - 100;
88        pisteNaytto.TextColor = Color.Black;
89        pisteNaytto.Color = Color.White;
90
91        pisteNaytto.Title = "Rahaa";
92        pisteNaytto.BindTo(rahalaskuri);
93        Add(pisteNaytto);
94
95        inventory = new Inventory();
96        inventory.Bottom = Screen.Bottom + 50;
97        inventory.X = 0;
98        Add(inventory);
99
100        inventory.AddItem(null, valitturuutukuva);
101        inventory.AddItem(null, tyhjaruutukuva);
102        inventory.AddItem(null, tyhjaruutukuva);
103
104        // kaytossa = inventory.Objects[tyokalunPaikanNumero];
105
106
107    }
108    void LuoKentta()
109    {
110        TileMap kentta = TileMap.FromLevelAsset("kentta1");
111        kentta.SetTileMethod('#', LisaaTaso);
112        kentta.SetTileMethod('M', LisaaMaa);
113        kentta.SetTileMethod('*', LisaaTahti);
114        kentta.SetTileMethod('N', LisaaPelaaja);
115        kentta.SetTileMethod('P', LisaaMalmi);
116        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
117        Level.CreateBorders();
118        Level.Background.CreateGradient(Color.White, Color.SkyBlue);
119
120
121    }
122
123    void Luopainikkeet()
124    {
125
126        PushButton pause = new PushButton(LoadImage("Taukonappain"));
127        pause.X = Screen.Left + 50;
128        pause.Y = Screen.Top - 50;
129        pause.Clicked += Pausevalikko;
130        Add(pause);
131
132        PushButton asetukset = new PushButton(LoadImage("Asetusnappain"));
133        asetukset.Width *= 2;
134        asetukset.Height *= 2;
135
136        asetukset.Right = Screen.Right;
137        asetukset.Bottom = Screen.Bottom;
138
139        asetukset.Clicked += Asetusvalikko;
140        Add(asetukset);
141
142    }
143    void Pausevalikko()
144    {
145        Pause();
146        MultiSelectWindow pauseValikko = new MultiSelectWindow("Tauko", "Jatka", "Lopeta");
147        pauseValikko.AddItemHandler(0, Pause);
148        pauseValikko.AddItemHandler(1, Exit);
149        Add(pauseValikko);
150
151    }
152
153    void Asetusvalikko()
154    {
155
156        Pause();
157        MultiSelectWindow asetusValikko = new MultiSelectWindow("Asetukset", "Nollaa palikat || hinta:150", "Sulje");
158        asetusValikko.AddItemHandler(0, Nollaa);
159        asetusValikko.AddItemHandler(1, Pause);
160        Add(asetusValikko);
161
162    }
163    void LisaaTaso(Vector paikka, double leveys, double korkeus)
164    {
165        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
166        taso.Position = paikka;
167        taso.Image = ruohomaa;
168        taso.Tag = "taso";
169        Add(taso);
170    }
171
172    void LisaaMaa(Vector paikka, double leveys, double korkeus)
173    {
174
175        PhysicsObject multa = PhysicsObject.CreateStaticObject(leveys, korkeus);
176        multa.Position = paikka;
177        multa.Image = maa;
178        multa.Tag = "maa";
179        Add(multa);
180
181    }
182
183    void LisaaMalmi(Vector paikka, double leveys, double korkeus)
184    {
185        //sattumanvarainen kuutio
186        int Kuutio = RandomGen.SelectOne(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 5);
187
188        if (Kuutio == 1)
189        {
190            PhysicsObject hiekka = PhysicsObject.CreateStaticObject(leveys, korkeus);
191            hiekka.Position = paikka;
192            hiekka.Image = hiekkakuva;
193            hiekka.Tag = "hiekka";
194            Add(hiekka);
195        }
196
197        if (Kuutio == 2)
198        {
199            PhysicsObject kupari = PhysicsObject.CreateStaticObject(leveys, korkeus);
200            kupari.Position = paikka;
201            kupari.Image = kuparikuva;
202            kupari.Tag = "kupari";
203            Add(kupari);
204        }
205
206        if (Kuutio == 3)
207        {
208            PhysicsObject hopea = PhysicsObject.CreateStaticObject(leveys, korkeus);
209            hopea.Position = paikka;
210            hopea.Image = hopeakuva;
211            hopea.Tag = "hopea";
212            Add(hopea);
213        }
214
215        if (Kuutio == 4)
216        {
217            PhysicsObject vahankultaa = PhysicsObject.CreateStaticObject(leveys, korkeus);
218            vahankultaa.Position = paikka;
219            vahankultaa.Image = vahankultaakuva;
220            vahankultaa.Tag = "vahankultaa";
221            Add(vahankultaa);
222        }
223
224        if (Kuutio == 5)
225        {
226            PhysicsObject paljonkultaa = PhysicsObject.CreateStaticObject(leveys, korkeus);
227            paljonkultaa.Position = paikka;
228            paljonkultaa.Image = paljonkultaakuva;
229            paljonkultaa.Tag = "paljonkultaa";
230            Add(paljonkultaa);
231        }
232
233    }
234    void LisaaTahti(Vector paikka, double leveys, double korkeus)
235    {
236        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys, korkeus);
237        tahti.IgnoresCollisionResponse = true;
238        tahti.Position = paikka;
239        tahti.Image = tahtiKuva;
240        tahti.Tag = "tahti";
241        Add(tahti);
242    }
243
244    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
245    {
246        pelaaja1 = new PlatformCharacter(leveys * 0.9, korkeus * 2);
247        pelaaja1.Position = paikka;
248        pelaaja1.Mass = 1.0;
249        pelaaja1.Image = pelaajanKuva;
250        pelaaja1.StaticFriction = 0;
251        pelaaja1.KineticFriction = 0;
252        AddCollisionHandler(pelaaja1, "tahti", TormaaTahteen);
253        Add(pelaaja1);
254    }
255
256    void LisaaNappaimet()
257    {
258        IsMouseVisible = true;
259
260        Mouse.Listen(MouseButton.Left, ButtonState.Pressed, Klikkaa, null);
261        Mouse.Listen(MouseButton.Left, ButtonState.Released, LaskeIrti, null);
262        Mouse.ListenWheel(Vaihdaesine, "vaihda inventoryesineitä");
263
264        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
265        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Pausevalikko, "Pause");
266
267        Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
268        Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, nopeus);
269        Keyboard.Listen(Key.Up, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
270        Keyboard.Listen(Key.A, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
271        Keyboard.Listen(Key.D, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, nopeus);
272        Keyboard.Listen(Key.W, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
273
274
275
276        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
277        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
278        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
279        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
280
281        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
282    }
283
284    Timer hajotusAjastin;
285
286    void LaskeIrti()
287    {
288        if(hajotusAjastin !=null)
289        {
290            hajotusAjastin.Stop();
291        }
292    }
293
294    void Klikkaa()
295    {
296        Vector paikka = Mouse.PositionOnWorld;
297        List<GameObject> oliot = GetObjectsAt(paikka, 1);
298        foreach (GameObject g in oliot)
299        {
300            if (Vector.Distance(pelaaja1.Position, g.Position) < 160 && !g.Equals(pelaaja1) && !g.Tag.Equals("maa") && !g.Tag.Equals("taso"))
301            {
302                hajotusAjastin = new Timer();
303                hajotusAjastin.Interval = 0.4;
304
305                if (g.Tag == "kupari") hajotusAjastin.Interval = 0.6;
306                if (g.Tag == "hopea") hajotusAjastin.Interval = 1;
307                if (g.Tag == "vahankultaa") hajotusAjastin.Interval = 2;
308                if (g.Tag == "paljonkultaa") hajotusAjastin.Interval = 3;
309
310                hajotusAjastin.Timeout += delegate
311                {
312                    if (g.Tag == "kupari")
313                    {
314                        rahalaskuri.Value += 2;
315                    }
316                    if (g.Tag == "hopea")
317                    {
318                        rahalaskuri.Value += 5;
319                    }
320                    if (g.Tag == "vahankultaa")
321                    {
322                        rahalaskuri.Value += 10;
323                    }
324                    if (g.Tag == "paljonkultaa")
325                    {
326                        rahalaskuri.Value += 25;
327                    }
328                    pisteet = rahalaskuri.Value;
329                    g.Destroy();
330                };
331                hajotusAjastin.Start(1);
332
333            }
334        }
335
336    }
337
338    void Vaihdaesine()
339    {
340        inventory.esineet[esinelaskuri].Image = tyhjaruutukuva;
341
342        esinelaskuri = esinelaskuri + Mouse.WheelChange;
343        if (esinelaskuri < 0) esinelaskuri = 2;
344        if (esinelaskuri > 2) esinelaskuri = 0;
345        inventory.esineet[esinelaskuri].Image = valitturuutukuva;
346    }
347
348    void Nollaa()
349    {
350        if (rahalaskuri.Value >= 150)
351        {
352            ClearAll();
353            AloitaPeli();
354            rahalaskuri.Value -= 150;
355            IsPaused = false;
356        }
357
358        else
359        {
360
361            MessageDisplay.Add("liian vähän rahaa");
362            IsPaused = false;
363
364        }
365    }
366    void Liikuta(PlatformCharacter hahmo, double nopeus)
367    {
368        hahmo.Walk(nopeus);
369    }
370
371    void Hyppaa(PlatformCharacter hahmo, double nopeus)
372    {
373        hahmo.Jump(nopeus);
374    }
375
376    void TormaaTahteen(PhysicsObject hahmo, PhysicsObject tahti)
377    {
378        maaliAani.Play();
379        MessageDisplay.Add("Keräsit tähden!");
380        tahti.Destroy();
381    }
382}
383
384
385
386
387
388/// Esinevalikko.
389class Inventory : Widget
390{
391    /// Tapahtuma, kun esine on valittu.
392    public event Action<PhysicsObject> ItemSelected;
393    public List<PushButton> esineet = new List<PushButton>();
394
395    /// Luo uuden esinevalikon.
396    public Inventory()
397        : base(new HorizontalLayout())
398    {
399    }
400
401
402    /// Lisää esineen.
403    /// <param name="item">Lisättävä esine.</param>
404    /// <param name="kuva">Esineen ikoni, joka näkyy valikossa.</param>
405    public void AddItem(PhysicsObject item, Image kuva)
406    {
407        PushButton icon = new PushButton(kuva);
408        esineet.Add(icon);
409        Add(icon);
410        icon.Clicked += delegate () { SelectItem(item); };
411    }
412
413    void SelectItem(PhysicsObject item)
414    {
415        if (ItemSelected != null)
416        {
417            ItemSelected(item);
418        }
419    }
420}
Note: See TracBrowser for help on using the repository browser.