source: 2011/26/LasseV/ShapeRace/ShapeRace/ShapeRace/Peli.cs @ 2419

Revision 2419, 9.1 KB checked in by lavirtan, 9 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 Peli : PhysicsGame
10{
11    const double nopeus = 200;
12    const double hyppyNopeus = 200;
13    const int RUUDUN_KOKO = 46;
14   
15    PlatformCharacter pelaaja1;
16    Timer aikaLaskuri;
17    Image tahtiKuva = LoadImage("tahti");
18    Image Ylapiikki = LoadImage("Ylapiikki");
19    Image Alapiikki = LoadImage("Alapiikki");
20
21    public override void Begin()
22    {
23        Gravity = new Vector(0, -1000);
24
25        MediaPlayer.Play("Kick Shock");
26        MediaPlayer.IsRepeating = true;
27
28        luoKentta();
29        lisaaNappaimet();
30        LuoLaskuri();
31        LuoAikaLaskuri();
32       
33        Camera.ZoomFactor = 1.2;
34        Camera.StayInLevel = true;
35       
36    }
37
38    void AloitaAlusta()
39    {
40        ClearAll();
41        luoKentta();
42        lisaaNappaimet();
43        LuoLaskuri();
44        LuoAikaLaskuri();
45    }
46   
47    void luoKentta()
48    {
49        TileMap kentta = TileMap.FromFile("kentta1.txt");
50        kentta['#'] = lisaaTaso;
51        kentta['*'] = lisaaTahti;
52        kentta['P'] = lisaaPelaaja;
53        kentta['v'] = lisaaYlaPiikki;
54        kentta['^'] = lisaaAlaPiikki;
55        kentta['M'] = lisaaMaali;
56        kentta['T'] = lisaaTausta;
57        kentta['N'] = lisaaNelio;
58        kentta.Insert(RUUDUN_KOKO, RUUDUN_KOKO);
59        Level.CreateBorders();
60        Level.BackgroundColor = Color.DarkGray;
61    }
62
63    IntMeter pisteLaskuri;
64
65    void LuoLaskuri()
66    {
67        pisteLaskuri = new IntMeter(0);
68
69        Label pisteNaytto = new Label();
70        pisteNaytto.X = Screen.Left + 100;
71        pisteNaytto.Y = Screen.Top - 100;
72        pisteNaytto.TextColor = Color.Red;
73        pisteLaskuri.MaxValue = 10000;
74        pisteLaskuri.MinValue = 0;
75        pisteNaytto.BindTo(pisteLaskuri);
76        Add(pisteNaytto);
77
78        Label pisteTeksti = new Label("Pisteesi:   ");
79        pisteTeksti.X = Screen.Left + 50;
80        pisteTeksti.Y = Screen.Top - 100;
81        pisteTeksti.TextColor = Color.Red;
82        Add(pisteTeksti);
83    }
84
85    DoubleMeter alaspainLaskuri;
86
87    void LuoAikaLaskuri()
88    {
89        alaspainLaskuri = new DoubleMeter(40);
90
91        aikaLaskuri = new Timer();
92        aikaLaskuri.Interval = 0.07;
93
94        aikaLaskuri.Trigger += LaskeAlaspain;
95        aikaLaskuri.Start();
96        Label aikaNaytto = new Label ();
97        aikaNaytto.X = Screen.Left + 50;
98        aikaNaytto.Y = Screen.Top - 140;
99        aikaNaytto.TextColor = Color.Red;
100        aikaNaytto.DecimalPlaces = 0;
101        aikaNaytto.BindTo(alaspainLaskuri);
102        Add(aikaNaytto);
103    }
104
105    void LaskeAlaspain(Timer timer)
106    {
107        alaspainLaskuri.Value -= 0.07;
108
109        if (alaspainLaskuri.Value <= 0)
110        {
111            MessageDisplay.Add("Aika loppui. Hävisit pelin!");
112            timer.Stop();
113        }
114    }
115
116    PhysicsObject lisaaYlaPiikki()
117    {
118        PhysicsObject piikki = PhysicsObject.CreateStaticObject(RUUDUN_KOKO, RUUDUN_KOKO);
119        Shape shape = Shape.FromImage(Ylapiikki);
120        piikki.Image = Ylapiikki;
121        piikki.Shape = shape;
122        piikki.Tag = "piikki";
123        piikki.Height = 26;
124        piikki.Width = 26;
125       
126        return piikki;
127    }
128
129    PhysicsObject lisaaMaali()
130    {
131        PhysicsObject maali = PhysicsObject.CreateStaticObject(RUUDUN_KOKO, RUUDUN_KOKO, Shape.Rectangle, CollisionShapeQuality.Best);
132        maali.Color = Color.Gray;
133        maali.Tag = "maali";
134        return maali;
135    }
136
137
138
139 
140
141    PhysicsObject lisaaNelio()
142    {
143        PhysicsObject nelio = PhysicsObject.CreateStaticObject(RUUDUN_KOKO, RUUDUN_KOKO, Shape.Rectangle, CollisionShapeQuality.Best);
144        nelio.Color = Color.Red;
145        Add(nelio, -1);
146        nelio.Height = 27;
147        nelio.Width = 27;
148        return nelio;
149    }
150
151    PhysicsObject lisaaAlaPiikki()
152    {
153        PhysicsObject alapiikki = PhysicsObject.CreateStaticObject(RUUDUN_KOKO, RUUDUN_KOKO);
154        Shape shape = Shape.FromImage(Alapiikki);
155        alapiikki.Image = Alapiikki;
156        alapiikki.Shape = shape;
157        alapiikki.Tag = "alapiikki";
158        alapiikki.Height = 26;
159        alapiikki.Width = 26;
160       
161        return alapiikki;
162    }
163
164
165    PhysicsObject lisaaTaso()
166    {
167        PhysicsObject taso = PhysicsObject.CreateStaticObject(RUUDUN_KOKO, RUUDUN_KOKO, Shape.Rectangle, CollisionShapeQuality.Best);
168        taso.Color = Color.Gray;
169        return taso;
170    }
171
172    PhysicsObject lisaaTausta()
173    {
174        PhysicsObject tausta = PhysicsObject.CreateStaticObject(RUUDUN_KOKO, RUUDUN_KOKO, Shape.Rectangle, CollisionShapeQuality.Best);
175        tausta.Color = Color.SkyBlue;
176        Add(tausta, -1);
177        return tausta;
178    }
179
180    PhysicsObject lisaaTahti()
181    {
182        PhysicsObject tahti = PhysicsObject.CreateStaticObject(RUUDUN_KOKO, RUUDUN_KOKO);
183        tahti.Image = tahtiKuva;
184        tahti.Tag = "tahti";
185        tahti.Height = 20;
186        tahti.Width = 20;
187        return tahti;
188    }
189
190    PlatformCharacter lisaaPelaaja()
191    {
192
193
194        pelaaja1 = new PlatformCharacter(30, 30);
195        pelaaja1.Mass = 10.0;
196        pelaaja1.Shape = Shape.Circle;
197        pelaaja1.Color = Color.Orange;
198        AddCollisionHandler(pelaaja1, osuTahteen);
199        AddCollisionHandler(pelaaja1, osuPiikkiin);
200        AddCollisionHandler(pelaaja1, osuMaaliin);
201        AddCollisionHandler(pelaaja1, osuNelioon);
202        return pelaaja1;
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, Exit, "Poistu pelistä");
210        Keyboard.Listen(Key.Left, ButtonState.Down, liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
211        Keyboard.Listen(Key.Right, ButtonState.Down, liikuta, "Liikkuu oikealle", pelaaja1, nopeus);
212        Keyboard.Listen(Key.B, ButtonState.Down, hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
213        Keyboard.Listen(Key.Space, ButtonState.Pressed, vaihdapainovoimaa, "Vaihda painovoiman suuntaa", pelaaja1);
214        Keyboard.Listen(Key.Down, ButtonState.Pressed, vaihdapienemmaksi, "Muutu pieneksi", pelaaja1);
215        Keyboard.Listen(Key.Up, ButtonState.Pressed, vaihdasuuremmaksi,"Muutu takaisin suureksi", pelaaja1);
216        Keyboard.Listen(Key.R, ButtonState.Pressed, yritauudelleen, "Aloita alusta", pelaaja1);
217    }
218
219    void yritauudelleen(PlatformCharacter pelaaja1)
220    {
221        AloitaAlusta();
222    }
223   
224    void vaihdasuuremmaksi(PlatformCharacter pelaaja1)
225    {
226        pelaaja1.Height = 30;
227        pelaaja1.Width = 30;
228        pelaaja1.Color = Color.Orange;
229    }
230   
231   
232   
233   
234    void vaihdapainovoimaa(PlatformCharacter pelaaja1)
235    {
236        if (pelaaja1.Height > 16)
237        {
238           
239       
240            if (Gravity.Y < 0)
241            {
242                Gravity = new Vector(0, 1000);
243                pelaaja1.Jump(nopeus);
244            }
245
246            else
247            {
248                Gravity = new Vector(0, -1000);
249                //pelaaja1.Hit(new Vector(0, -1000));
250            }
251        }
252    }
253
254    void vaihdapienemmaksi(PlatformCharacter pelaaja1)
255    {       
256        pelaaja1.Height = 16; 
257        pelaaja1.Width = 16;
258        pelaaja1.Color = Color.DarkOrange;
259    }
260
261    void liikuta(PlatformCharacter hahmo, double nopeus)
262    {
263        hahmo.Walk(nopeus);
264    }
265
266    void hyppaa(PlatformCharacter hahmo, double nopeus)
267    { 
268        if (pelaaja1.Height < 30)
269        {
270            hahmo.Jump(nopeus);
271        }
272       
273       
274    }
275
276    void osuTahteen(PhysicsObject hahmo, PhysicsObject kohde)
277    {
278        if (kohde.Tag.ToString() == "tahti")
279        {
280            MessageDisplay.Add("jeejee");
281            kohde.Destroy();
282        }
283
284        if (kohde.Tag.ToString() == "tahti")
285        {
286            pisteLaskuri.Value = +1;
287        }
288    }
289
290
291
292    void osuPiikkiin(PhysicsObject hahmo, PhysicsObject kohde)
293    {
294       
295
296        if (kohde.Tag.ToString() == "piikki")
297        {
298            aikaLaskuri.Stop();
299            AloitaAlusta();
300        }
301
302        if (kohde.Tag.ToString() == "alapiikki")
303        {
304            aikaLaskuri.Stop();
305            AloitaAlusta();
306        }
307
308    }
309
310    void osuMaaliin(PhysicsObject hahmo, PhysicsObject kohde)
311    {
312        if (kohde.Tag.ToString() == "maali")
313        {
314            Window ikkuna = new Window();
315            ikkuna.Title.Text = "JEE";
316            Add(ikkuna);
317
318            Label tarina = new Label("Onneksi olkoon! Voitit pelin.Paina R yrittääksesi uudelleen.");
319            tarina.Width = 600;
320            tarina.SizeMode = TextSizeMode.Wrapped;
321            ikkuna.ClientArea.Add(tarina);
322            aikaLaskuri.Stop();
323            Keyboard.Listen(Key.R, ButtonState.Pressed, yritauudelleen, "Aloita alusta", pelaaja1);
324        }
325    }
326
327    void osuNelioon(PhysicsObject nelio, PhysicsObject seppo)
328    {
329        if (seppo.Tag.ToString() == "nelio")
330        {
331            AloitaAlusta();
332            aikaLaskuri.Stop();
333        }
334    }
335
336}
337
Note: See TracBrowser for help on using the repository browser.