source: 2017/31/BeaJ/Tasohyppelypeli2/Tasohyppelypeli2/Tasohyppelypeli2/Tasohyppelypeli2.cs @ 9434

Revision 9434, 9.5 KB checked in by npo17_74, 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 Tasohyppelypeli2 : PhysicsGame
10{
11    const double nopeus = 250;
12    const double hyppyNopeus = 750;
13    const int RUUDUN_KOKO = 40;
14
15    Pelaaja pelaaja1;
16    Image pelaajanKuva = LoadImage("sydanemoj2i");
17    Image hirvionKuva = LoadImage("hirviö");
18    Image tahtiKuva = LoadImage("sydan1");
19
20    SoundEffect maaliAani = LoadSoundEffect("maali");
21    EasyHighScore topLista = new EasyHighScore();
22
23    public override void Begin()
24    {
25       
26
27        LuoAlkuValikko();
28        Camera.ZoomFactor = 1.2;
29        Camera.StayInLevel = true;
30    }
31
32    void LuoAlkuValikko()
33    {
34        MultiSelectWindow alkuValikko = new MultiSelectWindow("Pelin alkuvalikko",
35"Aloita peli", "Lopeta");
36        Add(alkuValikko);
37        alkuValikko.AddItemHandler(0, AloitaPeli);
38        alkuValikko.AddItemHandler(1, ParhaatPisteet);
39        alkuValikko.AddItemHandler(1, Exit);
40        alkuValikko.Color = Color.RosePink ;
41        alkuValikko.SetButtonColor(Color.Purple);
42    }
43    void LuoAikaLaskuri()
44    {
45        Timer aikaLaskuri = new Timer();
46        aikaLaskuri.Start();
47
48        Label aikaNaytto = new Label();
49        aikaNaytto.TextColor = Color.White;
50        aikaNaytto.DecimalPlaces = 1;
51        aikaNaytto.X = Screen.Left +500;
52        aikaNaytto.Y = Screen.Top - 100;
53    //    aikaNaytto.Screen.Left + 500;
54      //  aikaNaytto.Screen.Top - 100;
55        aikaNaytto.BindTo(aikaLaskuri.SecondCounter);
56        double aikaaKulunut = aikaLaskuri.SecondCounter.Value;
57        Add(aikaNaytto);
58    }
59    void AikaLoppui()
60    {
61        MessageDisplay.Add("Aika loppui...");
62
63        // täydennä mitä tapahtuu, kun aika loppuu
64    }
65
66    void ParhaatPisteet()
67    {
68
69    }
70
71    void AloitaPeli()
72    {
73
74        ClearAll();
75        LuoPistelaskuri();
76        LuoKentta();
77        Gravity = new Vector(0, -1000);
78        LisaaNappaimet();
79        Camera.ZoomFactor = 1.2;
80        Camera.StayInLevel = true;
81    }
82    void LuoKentta()
83    {
84     
85        TileMap kentta = TileMap.FromLevelAsset("kentta1");
86        kentta.SetTileMethod('N', LisaaPelaaja);
87        kentta.SetTileMethod('#', LisaaTaso);
88        kentta.SetTileMethod('*', LisaaTahti);
89        kentta.SetTileMethod('+', LisaaAvain);
90
91        kentta.SetTileMethod('K', LisaaHirvio);
92        kentta.SetTileMethod('L', LisaaSeuraajaHirvio);
93        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
94
95        LuoAikaLaskuri();
96        Camera.Follow(pelaaja1);
97        Level.CreateBorders();
98        Level.Background.CreateGradient(Color.Purple, Color.Aqua);
99    }
100
101
102    void LisaaTaso(Vector paikka, double leveys, double korkeus)
103    {
104        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
105        taso.Position = paikka;
106       taso.Image = Image.FromGradient (RUUDUN_KOKO, RUUDUN_KOKO, Color.Aqua, Color.Aqua);
107        Add(taso);
108    }
109
110    void LisaaTahti(Vector paikka, double leveys, double korkeus)
111    {
112        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys, korkeus);
113        tahti.IgnoresCollisionResponse = true;
114        tahti.Position = paikka;
115        tahti.Image = tahtiKuva;
116        tahti.Tag = "tahti";
117        Add(tahti);
118        pisteLaskuri.MaxValue++;
119        Console.WriteLine("value at " + pisteLaskuri.MaxValue + ", star at : " + paikka.X + ", " + paikka.Y);
120
121    }
122    void PelaajaKuoli()
123    {
124        //topLista.EnterAndShow(pisteLaskuri.Value);
125        //topLista.HighScoreWindow.Closed += AloitaPeli;
126
127    }
128    IntMeter pisteLaskuri;
129
130    void LuoPistelaskuri()
131    {
132        pisteLaskuri = new IntMeter(0,0, 0);
133        pisteLaskuri.UpperLimit += LopetaPeli;
134        Label pisteNaytto = new Label();
135        pisteNaytto.X = Screen.Left + 400;
136        pisteNaytto.Y = Screen.Top - 100;
137        pisteNaytto.TextColor = Color.Black;
138        pisteNaytto.Color = Color.White;
139        pisteNaytto.Title = "Pisteet";
140        pisteNaytto.BindTo(pisteLaskuri);
141        Add(pisteNaytto);
142    }
143    void LopetaPeli()
144    {
145        pelaaja1.Destroy();
146        topLista.EnterAndShow(pisteLaskuri.Value);
147        topLista.HighScoreWindow.Closed += delegate
148        {
149            AloitaPeli();
150        };
151        MessageDisplay.Add("Suoritit pelin loppuun!");
152
153    }
154    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
155    {
156        pelaaja1 = new Pelaaja(leveys, korkeus);
157        pelaaja1.Position = paikka;
158        pelaaja1.Mass = 4.0;
159        pelaaja1.Tag = "pelaaja";
160        pelaaja1.Image = pelaajanKuva;
161        AddCollisionHandler(pelaaja1, "avain", TormaaAvaimeen);
162        AddCollisionHandler(pelaaja1, "tahti", TormaaSydameen);
163        AddCollisionHandler(pelaaja1, "hirvio", TormaaHirvioon);
164        AddCollisionHandler(pelaaja1, "ovi", TormaaOveen);
165        pelaaja1.ElamaLaskuri.LowerLimit += PelaajaKuoli;
166        Add(pelaaja1);
167
168        Label elamaNaytto = new Label();
169        elamaNaytto.X = Screen.Left + 400;
170        elamaNaytto.Y = Screen.Top - 200;
171        elamaNaytto.TextColor = Color.Black;
172        elamaNaytto.Color = Color.White;
173        elamaNaytto.Title = "Elämät";
174        elamaNaytto.BindTo(pelaaja1.ElamaLaskuri);
175        Add(elamaNaytto);
176    }
177
178
179    void LisaaNappaimet()
180    {
181        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
182        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
183
184        Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
185        Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, nopeus);
186        Keyboard.Listen(Key.Up, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
187
188        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
189
190        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
191        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
192        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
193
194        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
195    }
196
197    void Liikuta(PlatformCharacter hahmo, double nopeus)
198    {
199        hahmo.Walk(nopeus);
200    }
201
202    void Hyppaa(PlatformCharacter hahmo, double nopeus)
203    {
204        hahmo.Jump(nopeus);
205    }
206    void TormaaAvaimeen(PhysicsObject hahmo, PhysicsObject avain)
207    {
208        MessageDisplay.Add("Keräsit avaimen!");
209        avain.Destroy();
210    }
211    void TormaaSydameen(PhysicsObject hahmo, PhysicsObject sydan)
212    {
213        MessageDisplay.Add("Keräsit sydämen!");
214        sydan.Destroy();
215        pisteLaskuri.AddValue(1);
216        if (pisteLaskuri.Value == pisteLaskuri.MaxValue)
217        {
218            LopetaPeli();
219        }
220    }
221    void TormaaOveen(PhysicsObject hahmo, PhysicsObject ovi)
222    {
223        MessageDisplay.Add("Voitit pelin!");
224        pelaaja1.Destroy();
225    }
226    void TormaaHirvioon(PhysicsObject hahmo, PhysicsObject tahti)
227    {
228        pelaaja1.ElamaLaskuri.AddValue(-1);
229    }
230    void LisaaAvain(Vector paikka, double leveys, double korkeus)
231    {
232        PhysicsObject avain = PhysicsObject.CreateStaticObject(leveys, korkeus);
233        avain.IgnoresCollisionResponse = true;
234        avain.Position = paikka;
235        avain.Image = LoadImage ("key");
236        avain.Tag = "avain";
237        Add(avain);
238
239
240    }
241
242    void LisaaHirvio(Vector paikka, double leveys, double korkeus)
243    {
244        PhysicsObject hirvio;
245        hirvio = new PlatformCharacter(leveys, korkeus * 0.95);
246        hirvio.Position = paikka;
247        hirvio.Mass = 4.0;
248        hirvio.Image = hirvionKuva;
249        hirvio.Tag = "hirvio";
250
251        PlatformWandererBrain tasoAivot = new PlatformWandererBrain();
252        tasoAivot.Speed = 100;
253        tasoAivot.FallsOffPlatforms = true;
254        tasoAivot.JumpSpeed = 700;
255        tasoAivot.TriesToJump = true;
256        hirvio.Brain = tasoAivot;
257
258     
259        Add(hirvio);
260    }
261
262    void LisaaSeuraajaHirvio(Vector paikka, double leveys, double korkeus)
263    {
264        PhysicsObject hirvio;
265        hirvio = new PlatformCharacter(leveys, korkeus * 0.95);
266        hirvio.Position = paikka;
267        hirvio.Mass = 4.0;
268        hirvio.Image = hirvionKuva;
269        hirvio.Tag = "hirvio";
270
271        FollowerBrain seuraajanAivot = new FollowerBrain("pelaaja");
272        seuraajanAivot.Speed = 300;                 // Millä nopeudella kohdetta seurataan
273        seuraajanAivot.DistanceFar = 600;           // Etäisyys jolla aletaan seurata kohdetta
274        seuraajanAivot.DistanceClose = 200;         // Etäisyys jolloin ollaan lähellä kohdetta
275        seuraajanAivot.StopWhenTargetClose = true;  // Pysähdytään kun ollaan lähellä kohdetta
276        // seuraajanAivot.FarBrain = satunnaisAivot;   // Käytetään satunnaisaivoja kun ollaan kaukana
277
278
279        hirvio.Brain = seuraajanAivot;
280        Add(hirvio);
281    }
282}
283
284class Pelaaja : PlatformCharacter
285{
286    private IntMeter elamaLaskuri = new IntMeter(3, 0, 3);
287    public IntMeter ElamaLaskuri { get { return elamaLaskuri; } }
288
289    public Pelaaja(double leveys, double korkeus)
290        : base(leveys, korkeus)
291    {
292        elamaLaskuri.LowerLimit += delegate { this.Destroy(); };
293    }
294   
295   
296   
297}
Note: See TracBrowser for help on using the repository browser.