source: 2013/27/PihlaM/Tasohyppelypeli1/Tasohyppelypeli1/Tasohyppelypeli1/Tasohyppelypeli1.cs @ 5787

Revision 5787, 10.5 KB checked in by sieerinn, 6 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 Rajoittaja : PhysicsObject
10{
11    // public double Etaisyys { get; set; }
12    public double MaxEtaisyys { get; set; }
13    public PlatformCharacter Seurattava { get; set; }
14    public Rajoittaja(PlatformCharacter pelaaja, double maxEtaisyysPelaajaan, double leveys, double korkeus)
15        : base(leveys, korkeus)
16    {
17        this.Seurattava = pelaaja;
18        this.MaxEtaisyys = maxEtaisyysPelaajaan;
19        this.IgnoresCollisionResponse = true;
20        this.MakeStatic();
21        IsUpdated = true;
22
23    }
24
25
26    public override void Update(Time time)
27    {
28        if (this.Seurattava.Y - this.Position.Y > MaxEtaisyys)
29        {
30            this.Position = new Vector(this.Position.X, Seurattava.Y - MaxEtaisyys);
31        }
32
33        //this.Position = new Vector(this.Position.X, Seurattava.Y-100);
34        base.Update(time);
35    }
36}
37
38public class Tasohyppelypeli1 : PhysicsGame
39{
40    const double nopeus = 200;
41    const double hyppyNopeus = 1000;
42    const int RUUDUN_KOKO = 15;
43    double pisteet = 0;
44    int tasonumero = 1;
45    double edellinenx = 0;
46    int Elamat = 0;
47
48
49    PlatformCharacter pelaaja1;
50
51    Image pelaajanKuva = LoadImage("ninjamuokattu");
52    Image kuvadonitsi = LoadImage("muokattu");
53    Image tahtikuva = LoadImage("tahti");
54    //Image[] pelaajanHyppykuvat = LoadImages("hahmo1", "hahmo2");
55    SoundEffect maaliAani = LoadSoundEffect("maali");
56    List<Label> valikonKohdat;
57    ScoreList topLista = new ScoreList(10, false, 0);
58
59    public override void Begin()
60    {
61        SetWindowSize(800, 600);
62        topLista = DataStorage.TryLoad<ScoreList>(topLista, "pisteet.xml");
63        Valikko();
64       
65        AloitaPeli();
66
67        //Pause();
68    }
69
70    void LuoKentta()
71    {
72        TileMap kentta = TileMap.FromLevelAsset("kentta1");
73        //kentta.SetTileMethod('#', LisaaTaso);
74        kentta.SetTileMethod('+', LisaaDonut);
75        //kentta.SetTileMethod('*', LisaaTahti);
76        kentta.SetTileMethod('N', LisaaPelaaja);
77        kentta.SetTileMethod('-', LisaaMaali);
78
79
80        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
81        Level.CreateBottomBorder(1.0,false);
82        //BottomBorder.Color = Color.SkyBlue;
83        Level.CreateLeftBorder();
84        Level.CreateRightBorder();
85        Level.Background.CreateGradient(Color.SkyBlue, Color.Blue);
86        LisaaDonitsiAjastin();
87        LisaaTasoja();
88
89        int i = 0;
90        while (i < 50)
91        {
92            LisaaTaso();
93
94            i++;
95        }
96        double maxEtaisyysPelaajasta = 300;
97
98        Rajoittaja rajoittaja = new Rajoittaja(pelaaja1, maxEtaisyysPelaajasta, Level.Width, 50);
99        rajoittaja.Tag = "pohja";
100        rajoittaja.Position = new Vector(0, pelaaja1.Y - maxEtaisyysPelaajasta);
101        rajoittaja.Color = Color.Transparent;
102        Add(rajoittaja);
103
104        MessageDisplay.BackgroundColor = Color.Blue;
105        // MessageDisplay.Color = Color.SkyBlue;
106        MessageDisplay.MessageTime = new TimeSpan(0, 0, 5);
107        MessageDisplay.MaxMessageCount = 3;
108
109    }
110
111    void LisaaTaso()
112    {
113        PhysicsObject taso = PhysicsObject.CreateStaticObject(RUUDUN_KOKO * 2, RUUDUN_KOKO);
114        taso.Color = Color.Green;
115        taso.Shape = Shape.Ellipse;
116        taso.Size = new Vector(35, 10);
117        taso.X = edellinenx + RandomGen.NextDouble(-50, 50);
118        if (taso.X < Level.Left) taso.X = Level.Left;
119        if (taso.X > Level.Right) taso.X = Level.Right;
120        taso.Y = Level.Bottom + tasonumero * 100; RandomGen.NextDouble(pelaaja1.Y - 15, pelaaja1.Y + 700);
121        taso.Tag = "taso";
122        taso.MakeOneWay();
123        Add(taso);
124        tasonumero++;
125        edellinenx = taso.X;
126
127        LisaaTahti(taso.Position, RUUDUN_KOKO, RUUDUN_KOKO);
128
129    }
130
131    void LisaaTahti(Vector paikka, double leveys, double korkeus)
132    {
133        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys, korkeus);
134        tahti.IgnoresCollisionResponse = true;
135        tahti.Position = paikka + RandomGen.NextVector(50, 20);
136        tahti.X = RandomGen.NextDouble(Level.Left, Level.Right);
137        tahti.Y = RandomGen.NextDouble(pelaaja1.Y - 30, pelaaja1.Y + 700);
138
139        tahti.Image = tahtikuva;
140        tahti.Tag = "tahti";
141        Add(tahti);
142    }
143
144    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
145    {
146        pelaaja1 = new PlatformCharacter(leveys, korkeus);
147        pelaaja1.Position = paikka;
148        pelaaja1.Mass = 7.0;
149        pelaaja1.Image = pelaajanKuva;
150        pelaaja1.Size = new Vector(20, 50);
151        Elamat = 3;
152        AddCollisionHandler(pelaaja1, "tahti", TormaaTahteen);
153        AddCollisionHandler(pelaaja1, "Donut", Tormaa);
154        AddCollisionHandler(pelaaja1, "taso", tormaatasoon);
155        AddCollisionHandler<PhysicsObject, Rajoittaja>(pelaaja1, "pohja", delegate { AloitaPeli(); });
156
157        Add(pelaaja1);
158    }
159
160    void LisaaMaali(Vector paikka, double leveys, double korkeus)
161    {
162        PhysicsObject maali = PhysicsObject.CreateStaticObject(leveys, korkeus);
163        maali.IgnoresCollisionResponse = true;
164        maali.Position = paikka;
165        maali.Image = LoadImage("muokattumaali");
166        maali.Color = Color.Aqua;
167        maali.Tag = "maali";
168        Add(maali);
169
170    }
171    void LisaaDonut(Vector paikka, double leveys, double korkeus)
172    {
173
174        PhysicsObject Donut = new PhysicsObject(20, 20);
175        Donut.IgnoresCollisionResponse = true;
176        Donut.Mass = 0.1;
177
178        Donut.Position = paikka;
179        Donut.Image = LoadImage("muokattu");
180        Donut.Tag = "Donut";
181        Add(Donut);
182
183
184    }
185
186    void Tormaa(PhysicsObject pelaaja, PhysicsObject donitsi)
187    {
188        donitsi.Destroy();
189        if (Elamat < 0)
190        {
191            pisteet = pelaaja.Y;
192            pelaaja.Destroy();
193            Explosion rajahdys = new Explosion(300);
194            rajahdys.Position = pelaaja.Position;
195            Add(rajahdys);
196            Timer.SingleShot(2, AloitaPeli);
197            NaytaHighScore();
198        }
199        else 
200        {
201            Elamat--; 
202        }
203    }
204
205
206    void LisaaNappaimet()
207    {
208        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
209        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
210        Keyboard.Listen(Key.S, ButtonState.Pressed, ShowControlHelp, "AloitaAlusta");
211        Keyboard.Listen(Key.P, ButtonState.Pressed, Pause, "Pause");
212
213        Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
214        Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, nopeus);
215        Keyboard.Listen(Key.Up, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
216
217        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
218
219        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
220        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
221        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
222
223        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
224    }
225
226    void Liikuta(PlatformCharacter hahmo, double nopeus)
227    {
228        hahmo.Walk(nopeus);
229    }
230
231    void Hyppaa(PlatformCharacter hahmo, double nopeus)
232    {
233        hahmo.Jump(nopeus);
234    }
235
236    void TormaaTahteen(PhysicsObject hahmo, PhysicsObject tahti)
237    {
238        MessageDisplay.Add("Keräsit tähden!");
239        tahti.Destroy();
240    }
241
242    void Valikko()
243    {
244        ClearAll();
245        IsMouseVisible = true;
246        valikonKohdat = new List<Label>();
247
248        Label kohta1 = new Label("Aloita uusi peli");
249        kohta1.Position = new Vector(0, 40);
250        valikonKohdat.Add(kohta1);
251        Mouse.ListenOn(kohta1, MouseButton.Left, ButtonState.Pressed, AloitaPeli, null);
252
253        Label kohta2 = new Label("Parhaat pisteet");
254        kohta2.Position = new Vector(0, 0);
255        valikonKohdat.Add(kohta2);
256
257        //Mouse.ListenOn(kohta2, MouseButton.Left, ButtonState.Pressed, ParhaatPisteet, null);
258
259        Label kohta3 = new Label("Lopeta peli");
260        kohta3.Position = new Vector(0, -40);
261        valikonKohdat.Add(kohta3);
262        Mouse.ListenOn(kohta3, MouseButton.Left, ButtonState.Pressed, Exit, null);
263
264
265
266
267        foreach (Label valikonKohta in valikonKohdat)
268        {
269            Add(valikonKohta);
270        }
271        Mouse.ListenMovement(1.0, ValikossaLiikkuminen, null);
272    }
273
274    void ValikossaLiikkuminen(AnalogState hiirenTila)
275    {
276
277        foreach (Label kohta in valikonKohdat)
278        {
279            if (Mouse.IsCursorOn(kohta))
280
281                kohta.TextColor = Color.Red;
282
283            else
284
285                kohta.TextColor = Color.Black;
286        }
287
288    }
289    void AloitaPeli()
290    {
291        ClearAll();
292        Gravity = new Vector(0, -1000);
293
294        tasonumero = 0;
295        edellinenx = 0;
296
297        LuoKentta();
298        LisaaNappaimet();
299
300
301        Camera.FollowY(pelaaja1);
302        Camera.ZoomFactor = 2.5;
303
304    }
305
306    void LisaaDonitsiAjastin()
307    {
308        Timer ajastin = new Timer();
309        ajastin.Interval = 0.5;
310        ajastin.Timeout += LisaaDonitseja;
311        ajastin.Start();
312    }
313
314    void LisaaDonitseja()
315    {
316        Vector paikka = new Vector(RandomGen.NextDouble(Level.Left, Level.Right), pelaaja1.Y + 800);
317        LisaaDonut(paikka, 100, 100);
318    }
319
320
321    void tormaatasoon(PhysicsObject tormaaaja, PhysicsObject taso)
322    {
323        taso.LifetimeLeft = TimeSpan.FromSeconds(2.0);
324    }
325
326    void NaytaHighScore()
327    {
328        ClearAll();
329        HighScoreWindow topIkkuna = new HighScoreWindow(
330                             "Parhaat pisteet",
331                             "Onneksi olkoon, pääsit listalle pisteillä %p! Syötä nimesi:",
332                             topLista, pisteet);
333        topIkkuna.Closed += TallennaPisteet;
334        Add(topIkkuna);
335    }
336
337    void TallennaPisteet(Window sender)
338    {
339        DataStorage.Save<ScoreList>(topLista, "pisteet.xml");
340        Begin();
341    }
342
343    void LisaaTasoja()
344    {
345        Timer ajastin = new Timer();
346        ajastin.Interval = 0.3;
347        ajastin.Timeout += LisaaTaso;
348        ajastin.Start();
349
350    }
351
352
353}
354
355
356
357
358
359
360
361
Note: See TracBrowser for help on using the repository browser.