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

Revision 966, 12.7 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(700, -300);
108        lisaaTaso(0, 120);
109        lisaaTaso(-100, 120);
110        lisaaTaso(-200, 120);
111        lisaaTaso(-300, 120);
112        lisaaTaso(-400, 120);
113        lisaaTaso(-300, 0);
114        lisaaTaso(-500, -200);
115        lisaaTaso(-700, 0);
116        lisaaTaso(-250, -100);
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.Hit(new Vector(-400, 0));
181
182        Add (sieni1);
183        return sieni1;
184    }
185    PlatformCharacter LuoSieni2()
186    {
187        PlatformCharacter sieni2 = new PlatformCharacter(25, 25);
188        sieni2.Image = LoadImage("Sieni.p");
189        sieni2.Tag = "Sieni";
190
191
192        Add(sieni2);
193        return sieni2;
194    }
195    PlatformCharacter LuoBoss1()
196    {
197        boss1 = new PlatformCharacter(35, 35);
198        boss1.Tag = "Sieni";
199        boss1.Image = LoadImage("boss1");
200
201        PlasmaCannon ase = new PlasmaCannon(60, 20);
202        boss1.Weapon = ase;
203        ase.PlasmaParticleCollision = AmmusOsuu;
204        boss1.Weapon.Angle = Angle.StraightAngle;
205
206        Add(boss1);
207        return boss1;
208    }
209    PlatformCharacter LuoBoss2()
210    {
211        boss2 = new PlatformCharacter(35, 35);
212        boss2.Tag = "Sieni";
213        boss2.Image = LoadImage("boss2");
214
215        PlasmaCannon ase2 = new PlasmaCannon(60, 20);
216        boss2.Weapon = ase2;
217        ase2.PlasmaParticleCollision = AmmusOsuu;
218        boss2.Weapon.Shoot();
219
220        Timer aikalaskuri = new Timer();
221        aikalaskuri.Interval = 5;
222        aikalaskuri.Trigger += new Timer.TriggerHandler (tuli);
223        Add(aikalaskuri);
224        aikalaskuri.Start();
225
226        Add(boss2);
227        return boss2;
228    }
229
230    PlatformCharacter LuoTeho()
231    {
232        PlatformCharacter teho = new PlatformCharacter(20, 20);
233        teho.Color = Color.LightBlue;
234        teho.Tag = "Teho";
235        teho.Image = LoadImage("Teho");
236        return teho;
237    } 
238
239    PhysicsObject LuoPalikka()
240    {
241        PhysicsObject Palikka = PhysicsObject.CreateStaticObject(50.0, 50.0);
242        Palikka.Color = Color.LightGreen;
243        return Palikka;
244    }
245    PhysicsObject LuoSmiley2()
246    {
247        PhysicsObject smiley2 = PhysicsObject.CreateStaticObject(10.0, 10.0);
248        smiley2.Image = LoadImage("smiley2");
249        smiley2.Tag = "smiley2";
250        return smiley2;
251    }
252    PhysicsObject LuoS()
253    {
254        PhysicsObject S = new PhysicsObject(15.0, 15.0);
255        S.Tag = "S";
256        S.Image = LoadImage("S-man");
257        return S;
258    }
259
260    PhysicsObject lisaaTaso(double x, double y)
261    {
262        PhysicsObject taso = PhysicsObject.CreateStaticObject(100, 30);
263        taso.Color = Color.Green;
264        taso.X = x;
265        taso.Y = y;
266        Add(taso);
267        return taso;
268    }
269    PhysicsObject LisaaTaso2( double x, double y )
270    {
271        PhysicsObject taso2 = PhysicsObject.CreateStaticObject(30, 100);
272        taso2.Color = Color.Green;
273        taso2.X = x;
274        taso2.Y = y;
275        Add(taso2);
276        return taso2;
277    }
278    PhysicsObject LisaaSmiley( double x, double y )
279    {
280        PhysicsObject smiley = new PlatformCharacter( 10, 10 );
281        smiley.Image = LoadImage("smiley");
282        smiley.Tag = "smiley";
283        smiley.Position = new Vector(x, y);
284
285        Add(smiley);
286        return smiley;
287    }
288
289    PlatformCharacter lisaaPelaajat() 
290    {
291        pelaaja1 = new PlatformCharacter(40, 40);
292        pelaaja1.Mass = 4.0;
293        pelaaja1.Image = LoadImage("norsu");
294        pelaaja1.X = 0;
295        pelaaja1.Y = Level.Bottom + 120;
296
297        AddCollisionHandler(pelaaja1, osuiJohonkin);
298
299        Add(pelaaja1);
300        return pelaaja1;
301    }
302
303    PhysicsObject lisaaMaali()
304    {
305        PhysicsObject maali = PhysicsObject.CreateStaticObject(50, 50, Shapes.Circle);
306        maali.Tag = "maali";
307        maali.IgnoresCollisionResponse = true;
308        maali.X = 30;
309        maali.Y = -60;
310        maali.Image = LoadImage("tahti");
311        Add(maali);
312        return maali;
313    }
314
315    void lisaaNappaimet()
316    {
317        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
318        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, "Poistu pelistä");
319
320        Keyboard.Listen(Key.Left, ButtonState.Down, liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
321        Keyboard.Listen(Key.Right, ButtonState.Down, liikuta, "Liikkuu oikealle", pelaaja1, nopeus);
322        Keyboard.Listen(Key.Up, ButtonState.Pressed, hyppaa, "Hyppää", pelaaja1, hyppyVoima);
323
324        lisaaGamePadNappaimet(ControllerOne);
325    }
326
327    void lisaaGamePadNappaimet(GamePad controller)
328    {
329        controller.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
330
331        controller.Listen(Button.DPadLeft, ButtonState.Down, liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
332        controller.Listen(Button.DPadRight, ButtonState.Down, liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
333        controller.Listen(Button.A, ButtonState.Pressed, hyppaa, "Pelaaja hyppää", pelaaja1, hyppyVoima);
334    }
335
336    void liikuta(PlatformCharacter hahmo, double nopeus)
337    {
338        hahmo.Walk(nopeus);
339    }
340
341    void hyppaa(PlatformCharacter hahmo, double voima)
342    {
343        hahmo.Jump(hyppyVoima);
344    }
345
346    void osuiJohonkin(PhysicsObject collidingObject, PhysicsObject otherObject)
347    {
348        if (otherObject.Tag.ToString() == "maali")
349        {
350            this.PlaySound("maali");
351            int edellisenKentanPisteet = pisteLaskuri.Value;
352            seuraavaKentta();
353            MessageDisplay.Add("Pääsit läpi kentän " + kenttaNro + ". Pisteitä: " + edellisenKentanPisteet);
354        }
355
356        if (otherObject.Tag.ToString() == "smiley")
357        {
358            otherObject.Destroy();
359            MessageDisplay.Add("Otit smileyn mukaan, sait pisteitä");
360            pisteLaskuri.Value++;
361        }
362        if (otherObject.Tag.ToString() == "smiley2")
363        {
364            otherObject.Destroy();
365            MessageDisplay.Add("Otit smileyn mukaan, sait pisteitä");
366            pisteLaskuri.Value++;
367        }
368        if (otherObject.Tag.ToString() == "S")
369        {
370            otherObject.Destroy();
371            MessageDisplay.Add("Otit S:än, nyt Pystyt hyppäämään korkeammalle!");
372            hyppyVoima = hyppyVoima * 2;
373            MessageDisplay.Add("Hyppyvoima " + hyppyVoima);
374            pisteLaskuri.Value++;
375
376            Timer aikalaskuri = new Timer();
377            aikalaskuri.Interval = 30;
378            aikalaskuri.Trigger += new Timer.TriggerHandler(SKosketus);
379            Add(aikalaskuri);
380            aikalaskuri.Start(1);
381            //ValueDisplay aikaNaytto;
382
383
384        }
385
386        if (otherObject.Tag.ToString() == "Teho")
387        {
388            otherObject.Destroy();
389            MessageDisplay.Add("TEHO!!!");
390            hyppyVoima = hyppyVoima * 10;
391            MessageDisplay.Add("Hyppyvoima " + hyppyVoima);
392
393            Timer aikalaskuri = new Timer();
394            aikalaskuri.Interval = 15;
395            aikalaskuri.Trigger += new Timer.TriggerHandler(TKosketus);
396            Add(aikalaskuri);
397            aikalaskuri.Start(1);
398            //ValueDisplay aikanaytto;
399        }
400        if (otherObject.Tag.ToString() == "Sieni")
401        {
402            MessageDisplay.Add("Too Bad...");
403            pelaaja1.Position = Aloituspaikka;
404            elamat--;
405        }
406        if (elamat == -1)
407        {
408           MessageDisplay.Add("Peli Loppui...");
409
410           Timer aikalaskuri = new Timer();
411           aikalaskuri.Interval = 5;
412           aikalaskuri.Trigger += new Timer.TriggerHandler(SiKosketus);
413           Add(aikalaskuri);
414           aikalaskuri.Start(1);
415        }
416    }
417    private void SKosketus(Timer sender)
418    {
419        MessageDisplay.Add("Aika loppui! Hyppykorkeus normalisoitu.");
420        hyppyVoima = hyppyVoima / 2;
421    }
422    private void TKosketus(Timer sender)
423    {
424        MessageDisplay.Add("Teho loppui!");
425            hyppyVoima = hyppyVoima / 10;
426    }
427    private void SiKosketus(Timer sender)
428    {
429        Exit();
430    }
431    private void tuli(Timer Sender)
432    {
433        boss1.Weapon.Use();
434        boss2.Weapon.Use();
435    }
436    private void AmmusOsuu(PhysicsObject Ammus, PhysicsObject toinen)
437    {
438        if (pelaaja1.Hit) ;
439      MessageDisplay.Add("Too Bad...");
440      pelaaja1.Position = Aloituspaikka;
441      elamat--;
442    }
443
444}
Note: See TracBrowser for help on using the repository browser.