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

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