source: 2010/24/kaosmaja/Tasohyppely1/Peli.cs @ 974

Revision 974, 13.8 KB checked in by kaosmaja, 10 years ago (diff)
Line 
1using System;
2using Jypeli;
3using Jypeli.ScreenObjects;
4using Jypeli.Assets;
5
6
7class Tasohyppely : PhysicsGame
8{
9    double nopeus = 350;
10    double hyppyVoima = 7000;
11
12    int elamat = 3;
13
14
15    IntMeter pisteLaskuri;
16    ValueDisplay pisteNaytto;
17
18    PlatformCharacter pelaaja1;
19
20       PlatformCharacter boss1;
21       PlatformCharacter boss2;
22
23    Vector Aloituspaikka;
24
25    int kenttaNro; // monesko kenttä on menossa
26
27    const int ruudunLeveys = 50;
28    const int ruudunKorkeus = 50;
29
30    HighScoreList topLista;
31
32    protected override void Begin()
33    {
34        topLista = HighScoreList.LoadOrCreate("toplista.dat", 5);
35
36        kenttaNro = 0;
37        Level.Width = 1500;
38        Level.Height = 1000;
39        pisteLaskuri = new IntMeter(0);
40       
41
42        // Zoomataan lähemmäksi
43        Camera.ZoomFactor = 2.0;
44
45        Camera.StayInLevel = true;
46
47        seuraavaKentta();
48        MessageDisplay.Add("Etsi iso tähti!");
49    }   
50
51
52    void seuraavaKentta()
53    {
54        ClearAll();
55        LisaaPistelaskuri();
56        pisteLaskuri.Reset();
57
58        //MediaPlayer.Play("taustamusiikki");
59
60        kenttaNro += 1; // lisätään kenttänumeroa yhdellä
61        MessageDisplay.Add("Kenttä " + kenttaNro);
62
63        // Asetetaan painovoima
64        Gravity = new Vector(0, -1500);
65        if (kenttaNro == 1)
66        {
67            luoKentta();
68        }
69        if (kenttaNro == 2)
70        {
71            LuoKentta2();
72        }
73        if (kenttaNro == 3)
74        {
75            LuoKentta3();
76        }
77        if (kenttaNro == 4)
78        {
79            topLista.Show(RandomGen.NextInt(10, 100000));
80        }
81        lisaaNappaimet();
82        Camera.Follow(pelaaja1);
83    }
84
85    void LisaaPistelaskuri()
86    {
87        // Luodaan pistelaskuri
88
89
90        // luodaan pistelaskunäyttö
91        pisteNaytto = new ValueDisplay();
92        pisteNaytto.Text = "Pisteitä: ";
93        pisteNaytto.X = Screen.RightSafe - 250;
94        pisteNaytto.Y = Screen.TopSafe - 50;
95        pisteNaytto.BindTo(pisteLaskuri);
96        Add(pisteNaytto);    // lisätään peliin
97    }
98
99    void luoKentta()
100    {
101        Level.CreateBorders();
102        Level.Background.CreateGradient(Color.White, Color.SkyBlue);
103
104        lisaaTaso(-200, -350);
105        lisaaTaso(0, -200);
106        lisaaTaso(0, 0);
107        lisaaTaso(-150, -100);
108        lisaaTaso(200, -200);
109        lisaaTaso(100, -200);
110        lisaaTaso(300, -200);
111        lisaaTaso(400, -200);
112        lisaaTaso(500, -200);
113        lisaaTaso(600, -200);
114        PhysicsObject palikka2 = lisaaTaso(700, -200);
115        palikka2.IgnoresCollisionResponse = (true);
116        lisaaTaso(0, 120);
117        lisaaTaso(-100, 120);
118        lisaaTaso(-200, 120);
119        lisaaTaso(-300, 120);
120        lisaaTaso(-400, 120);
121        lisaaTaso(-300, 0);
122        lisaaTaso(-500, -200);
123        lisaaTaso(-700, 0);
124        lisaaTaso(-250, -100);
125
126        LisaaTaso2(-10, -150);
127        LisaaTaso2(-10, -50);
128        LisaaTaso2(35, 55);
129
130        int i = 15;
131        while (i < 50)
132        {
133            int sade = RandomGen.NextInt(5, 20);
134            PhysicsObject smiley = LisaaSmiley(
135                RandomGen.NextDouble(
136                  Level.Left,
137                  Level.Right
138                ),
139                RandomGen.NextDouble(
140                  Level.Top,
141                  Level.Bottom
142                ));
143                smiley.Color = Color.LightYellow;
144                Add(smiley);
145                i++;
146        }
147        lisaaMaali();
148        lisaaPelaajat();
149    }
150    void LuoKentta2()
151    {
152
153        TileMap ruudut = TileMap.FromFile("kentta.txt");
154        ruudut['='] = LuoPalikka;
155        ruudut['*'] = LuoSmiley2;
156        ruudut['S'] = LuoS;
157        ruudut['T'] = LuoTeho;
158        ruudut['V'] = LuoSieni1;
159        ruudut['v'] = LuoSieni2;
160        ruudut['B'] = LuoBoss1;
161        ruudut['b'] = LuoBoss2;
162        ruudut['!'] = lisaaMaali;
163        ruudut['@'] = lisaaPelaajat;
164        ruudut.Insert(ruudunLeveys, ruudunKorkeus);
165        Aloituspaikka = pelaaja1.Position;
166        Camera.Follow(pelaaja1);
167    }
168    void LuoKentta3()
169    {
170        TileMap ruudut = TileMap.FromFile("kentta3.txt");
171        ruudut['='] = LuoPalikka;
172        ruudut['*'] = LuoSmiley2;
173        ruudut['S'] = LuoS;
174        ruudut['V'] = LuoSieni1;
175        ruudut['v'] = LuoSieni2;
176        ruudut['B'] = LuoBoss1;
177        ruudut['b'] = LuoBoss2;
178        ruudut['!'] = lisaaMaali;
179        ruudut['@'] = lisaaPelaajat;
180        ruudut.Insert(ruudunLeveys, ruudunKorkeus);
181        Aloituspaikka = pelaaja1.Position;
182        Camera.Follow(pelaaja1);
183    }
184    PlatformCharacter LuoSieni1()
185    {
186        PlatformCharacter sieni1 = new PlatformCharacter(25, 25);
187        sieni1.Image = LoadImage("Sieni");
188        sieni1.Tag = "Sieni";
189        sieni1.Velocity = new Vector(-400, 0);
190        //sieni1.Hit(new Vector(400, 0));
191       
192        sieni1.IgnoresCollisionResponse = true;
193        sieni1.LinearDamping = 1;
194        sieni1.IgnoresGravity = true;
195
196        sieni1.Restitution = 1;
197        sieni1.KineticFriction = 0;
198
199        AddCollisionHandler(sieni1, tormaus);
200
201        Add (sieni1);
202        return sieni1;
203    }
204    PlatformCharacter LuoSieni2()
205    {
206        PlatformCharacter sieni2 = new PlatformCharacter(25, 25);
207        sieni2.Image = LoadImage("Sieni.p");
208        sieni2.Tag = "Sieni";
209        //sieni2.Velocity = new Vector(-400, 0);
210        sieni2.Velocity = new Vector(400, 0);
211        sieni2.IgnoresCollisionResponse = true;
212        sieni2.IgnoresGravity = true;
213        sieni2.LinearDamping = 1;
214
215        sieni2.Restitution = 1;
216        sieni2.KineticFriction = 0;
217
218        AddCollisionHandler(sieni2, tormaus);
219
220        Add(sieni2);
221        return sieni2;
222    }
223    PlatformCharacter LuoBoss1()
224    {
225        boss1 = new PlatformCharacter(35, 35);
226        boss1.Tag = "Sieni";
227        boss1.Image = LoadImage("boss1");
228
229        PlasmaCannon ase = new PlasmaCannon(60, 20);
230        boss1.Weapon = ase;
231        ase.PlasmaParticleCollision = AmmusOsuu;
232        boss1.Weapon.Angle = Angle.StraightAngle;
233
234        Add(boss1);
235        return boss1;
236    }
237    PlatformCharacter LuoBoss2()
238    {
239        boss2 = new PlatformCharacter(35, 35);
240        boss2.Tag = "Sieni";
241        boss2.Image = LoadImage("boss2");
242
243        PlasmaCannon ase2 = new PlasmaCannon(60, 20);
244        boss2.Weapon = ase2;
245        ase2.PlasmaParticleCollision = AmmusOsuu;
246        boss2.Weapon.Shoot();
247
248        Timer aikalaskuri = new Timer();
249        aikalaskuri.Interval = 5;
250        aikalaskuri.Trigger += new Timer.TriggerHandler (tuli);
251        Add(aikalaskuri);
252        aikalaskuri.Start();
253
254        Add(boss2);
255        return boss2;
256    }
257
258    PlatformCharacter LuoTeho()
259    {
260        PlatformCharacter teho = new PlatformCharacter(20, 20);
261        teho.Color = Color.LightBlue;
262        teho.Tag = "Teho";
263        teho.Image = LoadImage("Teho");
264        return teho;
265    } 
266
267    PhysicsObject LuoPalikka()
268    {
269        PhysicsObject Palikka = PhysicsObject.CreateStaticObject(50.0, 50.0);
270        Palikka.Color = Color.DarkGreen;
271        Palikka.Tag = "seina";
272       
273
274        return Palikka;
275    }
276    PhysicsObject LuoSmiley2()
277    {
278        PhysicsObject smiley2 = PhysicsObject.CreateStaticObject(10.0, 10.0);
279        smiley2.Image = LoadImage("smiley2");
280        smiley2.Tag = "smiley2";
281        return smiley2;
282    }
283    PhysicsObject LuoS()
284    {
285        PhysicsObject S = new PhysicsObject(15.0, 15.0);
286        S.Tag = "S";
287        S.Image = LoadImage("S-man");
288        return S;
289    }
290
291    PhysicsObject lisaaTaso(double x, double y)
292    {
293        PhysicsObject taso = PhysicsObject.CreateStaticObject(100, 30);
294        taso.Color = Color.Green;
295        taso.X = x;
296        taso.Y = y;
297        Add(taso);
298        return taso;
299    }
300    PhysicsObject LisaaTaso2( double x, double y )
301    {
302        PhysicsObject taso2 = PhysicsObject.CreateStaticObject(30, 100);
303        taso2.Color = Color.Green;
304        taso2.X = x;
305        taso2.Y = y;
306        Add(taso2);
307        return taso2;
308    }
309    PhysicsObject LisaaSmiley( double x, double y )
310    {
311        PhysicsObject smiley = new PlatformCharacter( 10, 10 );
312        smiley.Image = LoadImage("smiley");
313        smiley.Tag = "smiley";
314        smiley.Position = new Vector(x, y);
315
316        Add(smiley);
317        return smiley;
318    }
319
320    PlatformCharacter lisaaPelaajat() 
321    {
322        pelaaja1 = new PlatformCharacter(40, 40);
323        pelaaja1.Mass = 4.0;
324        pelaaja1.Image = LoadImage("norsu");
325        pelaaja1.X = 0;
326        pelaaja1.Y = Level.Bottom + 120;
327
328        AddCollisionHandler(pelaaja1, osuiJohonkin);
329
330        Add(pelaaja1);
331        return pelaaja1;
332    }
333
334    PhysicsObject lisaaMaali()
335    {
336        PhysicsObject maali = PhysicsObject.CreateStaticObject(50, 50, Shapes.Circle);
337        maali.Tag = "maali";
338        maali.IgnoresCollisionResponse = true;
339        maali.X = 30;
340        maali.Y = -60;
341        maali.Image = LoadImage("tahti");
342        Add(maali);
343        return maali;
344    }
345
346    void lisaaNappaimet()
347    {
348        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
349        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, "Poistu pelistä");
350
351        Keyboard.Listen(Key.Left, ButtonState.Down, liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
352        Keyboard.Listen(Key.Right, ButtonState.Down, liikuta, "Liikkuu oikealle", pelaaja1, nopeus);
353        Keyboard.Listen(Key.Up, ButtonState.Pressed, hyppaa, "Hyppää", pelaaja1, hyppyVoima);
354
355        lisaaGamePadNappaimet(ControllerOne);
356    }
357
358    void lisaaGamePadNappaimet(GamePad controller)
359    {
360        controller.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
361
362        controller.Listen(Button.DPadLeft, ButtonState.Down, liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
363        controller.Listen(Button.DPadRight, ButtonState.Down, liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
364        controller.Listen(Button.A, ButtonState.Pressed, hyppaa, "Pelaaja hyppää", pelaaja1, hyppyVoima);
365    }
366
367    void liikuta(PlatformCharacter hahmo, double nopeus)
368    {
369        hahmo.Walk(nopeus);
370    }
371
372    void hyppaa(PlatformCharacter hahmo, double voima)
373    {
374        hahmo.Jump(hyppyVoima);
375    }
376    void tormaus(PhysicsObject collidingObject, PhysicsObject otherObject)
377    {
378        if (otherObject.Tag.ToString() == "seina")
379        {
380            collidingObject.Velocity = -collidingObject.Velocity;
381
382           
383        }
384    }
385
386    void osuiJohonkin(PhysicsObject collidingObject, PhysicsObject otherObject)
387    {
388        if (otherObject.Tag.ToString() == "maali")
389        {
390            this.PlaySound("maali");
391            int edellisenKentanPisteet = pisteLaskuri.Value;
392            seuraavaKentta();
393            MessageDisplay.Add("Pääsit läpi kentän " + kenttaNro + ". Pisteitä: " + edellisenKentanPisteet);
394        }
395
396        if (otherObject.Tag.ToString() == "smiley")
397        {
398            otherObject.Destroy();
399            MessageDisplay.Add("Otit smileyn mukaan, sait pisteitä");
400            pisteLaskuri.Value++;
401        }
402        if (otherObject.Tag.ToString() == "smiley2")
403        {
404            otherObject.Destroy();
405            MessageDisplay.Add("Otit smileyn mukaan, sait pisteitä");
406            pisteLaskuri.Value++;
407        }
408        if (otherObject.Tag.ToString() == "S")
409        {
410            otherObject.Destroy();
411            MessageDisplay.Add("Otit S:än, nyt Pystyt hyppäämään korkeammalle!");
412            hyppyVoima = hyppyVoima * 2;
413            MessageDisplay.Add("Hyppyvoima " + hyppyVoima);
414            pisteLaskuri.Value++;
415
416            Timer aikalaskuri = new Timer();
417            aikalaskuri.Interval = 30;
418            aikalaskuri.Trigger += new Timer.TriggerHandler(SKosketus);
419            Add(aikalaskuri);
420            aikalaskuri.Start(1);
421            //ValueDisplay aikaNaytto;
422
423
424        }
425
426        if (otherObject.Tag.ToString() == "Teho")
427        {
428            otherObject.Destroy();
429            MessageDisplay.Add("TEHO!!!");
430            hyppyVoima = hyppyVoima * 10;
431            MessageDisplay.Add("Hyppyvoima " + hyppyVoima);
432
433            Timer aikalaskuri = new Timer();
434            aikalaskuri.Interval = 15;
435            aikalaskuri.Trigger += new Timer.TriggerHandler(TKosketus);
436            Add(aikalaskuri);
437            aikalaskuri.Start(1);
438            //ValueDisplay aikanaytto;
439        }
440        if (otherObject.Tag.ToString() == "Sieni")
441        {
442            MessageDisplay.Add("Too Bad...");
443            pelaaja1.Position = Aloituspaikka;
444            elamat--;
445        }
446        if (elamat == -1)
447        {
448           MessageDisplay.Add("Peli Loppui...");
449
450           Timer aikalaskuri = new Timer();
451           aikalaskuri.Interval = 5;
452           aikalaskuri.Trigger += new Timer.TriggerHandler(SiKosketus);
453           Add(aikalaskuri);
454           aikalaskuri.Start(1);
455        }
456    }
457    private void SKosketus(Timer sender)
458    {
459        MessageDisplay.Add("Aika loppui! Hyppykorkeus normalisoitu.");
460        hyppyVoima = hyppyVoima / 2;
461    }
462    private void TKosketus(Timer sender)
463    {
464        MessageDisplay.Add("Teho loppui!");
465            hyppyVoima = hyppyVoima / 10;
466    }
467    private void SiKosketus(Timer sender)
468    {
469        Exit();
470    }
471    private void tuli(Timer Sender)
472    {
473        boss1.Weapon.Use();
474        boss2.Weapon.Use();
475    }
476    private void AmmusOsuu(PhysicsObject Ammus, PhysicsObject toinen)
477    {
478        if (toinen == pelaaja1)
479        {
480            MessageDisplay.Add("Too Bad...");
481            pelaaja1.Position = Aloituspaikka;
482            elamat--;
483        }
484    }
485
486}
Note: See TracBrowser for help on using the repository browser.