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

Revision 4488, 10.3 KB checked in by pimuhone, 8 years ago (diff)

Talletus.

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