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

Revision 981, 14.2 KB checked in by kaosmaja, 9 years ago (diff)

valmis

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