source: 2011/23/latakoso/Gladiaattori X720/Gladiaattori X720/Gladiaattori X720/Peli.cs @ 1894

Revision 1894, 14.9 KB checked in by latakoso, 8 years ago (diff)

Lisäsin tekijän.

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    //Tehnyt Lauri Kosonen. Kiitos kaikille nuorten peliohjelmointileirin ihmisille!
12    List<Label> valikonKohdat;
13    List<GameObject> SpawnPoint = new List<GameObject>();
14    PhysicsObject X720;
15    PhysicsObject Plasma;
16    PhysicsObject PahaPlasma;
17    PhysicsObject Luoti;
18    HighScoreWindow topPisteet;
19    ScoreList lista;
20    IntMeter laskuri;
21    Label naytto;
22    IntMeter laskuri2;
23    Label naytto2;
24    bool sallittu = true;
25    const int leveys = 60;
26    const int leveys2 = 30;
27    const int korkeus = 60;
28    const int korkeus2 = 30;
29    PhysicsObject Ase = new PhysicsObject(10, 30);
30   
31    public override void Begin()
32    {
33        IsFullScreen = true;
34        Camera.Zoom(1.4);
35        Level.BackgroundColor = Color.DarkGray;
36        Valikko();
37       
38    }
39
40    void Valikko()
41    {
42        ClearAll();
43        MediaPlayer.Stop();
44        valikonKohdat = new List<Label>(); 
45
46        Label kohta1 = new Label(" Aloita peli ");
47        kohta1.Position = new Vector(0, 40);
48        kohta1.Color = Color.Transparent;
49        kohta1.BorderColor = Color.Black;
50        valikonKohdat.Add(kohta1);
51
52        Label kohta2 = new Label(" Lopeta ");
53        kohta2.Position = new Vector(0, -40);
54        kohta2.Color = Color.Transparent;
55        kohta2.BorderColor = Color.Black;
56        valikonKohdat.Add(kohta2);
57
58        Label otsikko = new Label("Gladiaattori X720");
59        otsikko.Position = new Vector(0, 300);
60        otsikko.TextColor = Color.DarkBlue;
61        Add(otsikko);
62
63        Label ohjeet = new Label("OHJEET: Liiku W-, A-, S- ja D-näppäimillä ja ammu välilyönnillä. Vihollisen");
64        Label ohjeet2 = new Label("nitistämisestä saa 20 pistettä ja kolikon keräämisestä 10 pistettä. Sydämistä saa lisäelämiä.");
65        ohjeet.Position = new Vector(0, -250);
66        ohjeet2.Position = new Vector(0, -290);
67        ohjeet.TextColor = Color.Black;
68        ohjeet2.TextColor = Color.Black;
69        Add(ohjeet);
70        Add(ohjeet2);
71
72        foreach (Label valikonKohta in valikonKohdat)
73        {
74            Add(valikonKohta);
75        }
76
77        Mouse.ListenOn(kohta1, MouseButton.Left, ButtonState.Pressed, AloitaPeli, null);
78        Mouse.ListenOn(kohta2, MouseButton.Left, ButtonState.Pressed, Exit, null);
79
80        Mouse.IsCursorVisible = true;
81        Mouse.ListenMovement(1, ValikossaLiikkuminen, null);
82        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, null);
83    }
84
85    void ValikossaLiikkuminen(AnalogState hiirenTila)
86    {
87        foreach (Label kohta in valikonKohdat)
88        {
89            if (Mouse.IsCursorOn(kohta))
90            {
91                kohta.TextColor = Color.White;
92            }
93            else
94            {
95                kohta.TextColor = Color.Black;
96            }
97        }
98    }
99
100    void AloitaPeli()
101    {
102        ClearAll();
103        SpawnPoint.Clear();
104        Paahahmo();
105        MediaPlayer.Play("Musa");
106        MediaPlayer.IsRepeating = true;
107        Mouse.IsCursorVisible = false;
108        Camera.StayInLevel = true;
109        IsFullScreen = true;
110        lista = new ScoreList(10, false, 0);
111        if (DataStorage.Exists("pisteet.xml"))
112        {
113            lista = DataStorage.Load<ScoreList>(lista, "pisteet.xml");
114        }
115        Level.BackgroundColor = Color.DarkGray;
116        KutsuKentta();
117        Elamat();
118        Pisteet();
119        Ohjaimet();
120    }
121
122    void Paahahmo()
123    {
124        X720 = new PhysicsObject(50, 50);
125        X720.Image = LoadImage("X720");
126        X720.Shape = Shape.Circle;
127        X720.Restitution = 0;
128        X720.CanRotate = false;
129        AddCollisionHandler(X720, PahisOsui);
130        Add(X720);
131        Camera.Follow(X720);
132    }
133
134    PhysicsObject Viholliset()
135    {
136        PhysicsObject Pahis = new PhysicsObject(50,50);
137        Pahis.Shape = Shape.Circle;
138        Pahis.Image = LoadImage("Pahis");
139        Pahis.Restitution = 0;
140        FollowerBrain Aivot = new FollowerBrain(X720, 150);
141        Aivot.TargetFollowDistance = 500;
142        Aivot.Active = true;
143        Pahis.Brain = Aivot;
144        Pahis.CanRotate = false;
145        IntMeter elkut = new IntMeter(RandomGen.NextInt(3,5));
146        Pahis.Tag = elkut;
147        Timer ajastin = new Timer();
148        ajastin.Interval = 0.01;
149        ajastin.Trigger += KatsoPelaajaa;
150        ajastin.Tag = Pahis;
151        ajastin.Start();
152        Timer ajastin5 = new Timer();
153        ajastin5.Interval = 0.01;
154        ajastin5.Trigger += KatsoPelaajaa;
155        ajastin5.Tag = Pahis;
156        ajastin5.Start();
157        Timer ajastin3 = new Timer();
158        ajastin3.Interval = 0.01;
159        ajastin3.Trigger += PahisStop;
160        ajastin3.Tag = Pahis;
161        ajastin3.Start();
162        Timer ajastin2 = new Timer();
163        ajastin2.Interval = RandomGen.NextDouble(1.5,2.2);
164        ajastin2.Trigger += PahisAmpuu;
165        ajastin2.Tag = Pahis;
166        ajastin2.Start();
167        AddCollisionHandler(Pahis, Osuma);
168        return Pahis;
169    }
170
171    void Spawn( GameObject Paikka)
172    {
173        PhysicsObject Pahis = Viholliset();
174        Pahis.Position = Paikka.Position;
175        Paikka.Tag = Pahis;
176        Timer ajastin4 = new Timer();
177        ajastin4.Interval = 20;
178        ajastin4.Trigger += Paluu;
179        ajastin4.Tag = Paikka;
180        ajastin4.Start();
181    }
182
183    void Paluu(Timer ajastin)
184    {
185        GameObject Paikka = ajastin.Tag as GameObject;
186        PhysicsObject Pahis = Paikka.Tag as PhysicsObject;
187        if (Pahis.IsAddedToGame == false)
188        {
189            Add(Pahis);
190            ajastin.Stop();
191        }
192    }
193
194    void PahisStop(Timer ajastin)
195    {
196        PhysicsObject pahis = ajastin.Tag as PhysicsObject;
197        if (Vector.Distance(pahis.Position, X720.Position) < 200)
198        {
199            pahis.Velocity = Vector.Zero;
200        }
201    }
202
203    void PahisAmpuu(Timer ajastin)
204    {
205        PhysicsObject pahis = ajastin.Tag as PhysicsObject;
206        PhysicsObject Luoti2;
207        if (X720.IsDestroyed == false && Vector.Distance(pahis.Position, X720.Position) < 500 && pahis.IsAddedToGame == true)
208        {
209            Luoti2 = PahaAmmus();
210            Luoti2.Position = pahis.Position + Vector.FromLengthAndAngle(35, pahis.Angle - Angle.RightAngle);
211            Vector impulssi = Vector.FromLengthAndAngle(1000, pahis.Angle - Angle.RightAngle);
212            Add(Luoti2);
213            Luoti2.Hit(impulssi);
214        }
215    }
216
217    void KatsoPelaajaa(Timer ajastin)
218    {
219        PhysicsObject pahis = ajastin.Tag as PhysicsObject;
220        Vector suunta = pahis.Position - X720.Position;
221        pahis.Angle = suunta.Angle - Angle.RightAngle;
222    }
223
224    GameObject SpawnP()
225    {
226        GameObject P = new GameObject(60,60);
227        P.IsVisible = false;
228        SpawnPoint.Add(P);
229        return P;
230    }
231
232    void KutsuKentta()
233    {
234        TileMap Kentta = TileMap.FromFile("kentta.txt");
235        Kentta['='] = LuoSeina;
236        Kentta['o'] = PisteBonus;
237        Kentta['+'] = ElamaBonus;
238        Kentta['P'] = SpawnP;
239        Kentta.Insert(leveys,korkeus);
240        foreach (GameObject p in SpawnPoint)
241        {
242            PhysicsObject pahis = Viholliset();
243            pahis.Position = p.Position;
244            p.Tag = pahis;
245            if (pahis.IsAddedToGame == false && X720.IsDestroyed == false)
246            {
247            Add(pahis);
248            }
249        }
250    }
251
252    PhysicsObject Ammus()
253    {
254        Plasma = new PhysicsObject(20, 20);
255        Plasma.Image = LoadImage("Plasma");
256        Plasma.Shape = Shape.Circle;
257        AddCollisionHandler(Plasma, Poisto);
258        return Plasma;
259    }
260
261    PhysicsObject PahaAmmus()
262    {
263        PahaPlasma = new PhysicsObject(20, 20);
264        PahaPlasma.Image = LoadImage("PahaPlasma");
265        PahaPlasma.Shape = Shape.Circle;
266        AddCollisionHandler(PahaPlasma, Poisto);
267        return PahaPlasma;
268    }
269
270    void Poisto(PhysicsObject ammus, PhysicsObject kohde)
271    {
272        Timer.SingleShot(0.05, ammus.Destroy);
273    }
274
275    void Ohjaimet()
276    {
277        Keyboard.Listen(Key.W, ButtonState.Down, LiikuYlos, null);
278        Keyboard.Listen(Key.W, ButtonState.Released, Pysahdy, null);
279        Keyboard.Listen(Key.S, ButtonState.Down, LiikuAlas, null);
280        Keyboard.Listen(Key.S, ButtonState.Released, Pysahdy, null);
281        Keyboard.Listen(Key.A, ButtonState.Down, LiikuVasen, null);
282        Keyboard.Listen(Key.A, ButtonState.Released, Pysahdy, null);
283        Keyboard.Listen(Key.D, ButtonState.Down, LiikuOikea, null);
284        Keyboard.Listen(Key.D, ButtonState.Released, Pysahdy, null);
285        Keyboard.Listen(Key.Space, ButtonState.Pressed, Ammu, null);
286        Keyboard.Listen(Key.Escape, ButtonState.Pressed, End, null);
287    }
288
289    GameObject LuoSeina()
290    {
291        PhysicsObject seina = PhysicsObject.CreateStaticObject(60,60);
292        seina.Restitution = 0;
293        seina.Color = Color.Gray;
294        return seina;
295    }
296
297    void LiikuYlos()
298    {
299        X720.Velocity = new Vector(0, 300);
300        X720.Angle = Angle.StraightAngle;
301    }
302
303    void LiikuAlas()
304    {
305        X720.Velocity = new Vector(0,-300);
306        X720.Angle = Angle.Zero;
307    }
308
309    void LiikuVasen()
310    {
311        X720.Velocity = new Vector(-300, 0);
312        X720.Angle = -Angle.RightAngle;
313    }
314
315    void LiikuOikea()
316    {
317        X720.Velocity = new Vector(300, 0);
318        X720.Angle = Angle.RightAngle;
319    }
320
321    void Pysahdy()
322    {
323        X720.Velocity = Vector.Zero;
324    }
325
326    void Ammu()
327    {
328        if (sallittu == true)
329        {
330            sallittu = false;
331            Luoti = Ammus();
332            Luoti.Position = X720.Position + Vector.FromLengthAndAngle(35, X720.Angle - Angle.RightAngle);
333            Vector impulssi = Vector.FromLengthAndAngle(1000, X720.Angle - Angle.RightAngle);
334            Luoti.Hit(impulssi);
335            SoundEffect Ampuminen = LoadSoundEffect("Ampuminen");
336            Sound Ampuminen1 = Ampuminen.CreateSound();
337            Ampuminen1.Volume = 0.6;
338            Ampuminen1.Play();
339            Add(Luoti);
340            Timer.SingleShot(0.4, Salli);
341        }
342    }
343
344    void Salli()
345    {
346        sallittu = true;
347    }
348
349    GameObject PisteBonus()
350    {
351        PhysicsObject Bonus = new PhysicsObject(30,30);
352        Bonus.IgnoresCollisionResponse = true;
353        Bonus.Shape = Shape.Circle;
354        Bonus.Color = Color.Yellow;
355        AddCollisionHandler(Bonus, BonusPisteet);
356        return Bonus;
357    }
358
359    GameObject ElamaBonus()
360    {
361        PhysicsObject Elkku = new PhysicsObject(30,30);
362        Elkku.IgnoresCollisionResponse = true;
363        Elkku.Shape = Shape.Heart;
364        Elkku.Color = Color.Red;
365        AddCollisionHandler(Elkku, LisaElama);
366        return Elkku;
367    }
368   
369    void BonusPisteet(PhysicsObject Bonus, PhysicsObject kohde)
370    {
371        if (kohde == X720)
372        {
373            Bonus.Destroy();
374            SoundEffect Points = LoadSoundEffect("PisteBonus");
375            Points.Play();
376            laskuri.Value += 10;
377            naytto.Text = " Pisteet: " + laskuri.Value + " ";
378        }
379    }
380
381    void LisaElama(PhysicsObject Elkku, PhysicsObject kohde)
382    {
383        if (kohde == X720)
384        {
385            Elkku.Destroy();
386            SoundEffect HP = LoadSoundEffect("ElamaBonus");
387            HP.Play();
388            laskuri2.Value += 1;
389            naytto2.Text = " Elämät: " + laskuri2.Value + " ";
390        }
391        if (laskuri2.Value == 2)
392        {
393            naytto2.TextColor = Color.Black;
394        }
395    }
396
397    void PahisOsui(PhysicsObject X720, PhysicsObject kohde)
398    {
399        if (kohde == PahaPlasma)
400        {
401            laskuri2.Value -= 1;
402            naytto2.Text = " Elämät: " + laskuri2.Value + " ";
403            if (laskuri2.Value == 1)
404            {
405                naytto2.TextColor = Color.Red;
406            }
407            if (laskuri2.Value == 0)
408            {
409                Explosion rajahdys = new Explosion(5);
410                rajahdys.Position = X720.Position;
411                rajahdys.Force = 0;
412                rajahdys.Speed = 50;
413                rajahdys.ShockwaveColor = Color.Purple;
414                Add(rajahdys);
415                MediaPlayer.Stop();
416                X720.Destroy();
417                Timer.SingleShot(1.2, End);
418            }
419        }
420    }
421
422    void Osuma(PhysicsObject Pahis, PhysicsObject kohde)
423    {
424        IntMeter elkut = Pahis.Tag as IntMeter;
425        if (kohde == Luoti)
426        {
427            elkut.Value -= 1;
428            if (elkut == 0)
429            {
430                Explosion rajahdys = new Explosion(5);
431                rajahdys.Position = Pahis.Position;
432                rajahdys.Force = 0;
433                rajahdys.Speed = 50;
434                rajahdys.ShockwaveColor = Color.Blue;
435                Add(rajahdys);
436                Pahis.Destroy();
437                foreach (GameObject p in SpawnPoint)
438                {
439                    PhysicsObject TagPahis = p.Tag as PhysicsObject;
440                    if (Pahis == TagPahis)
441                    {
442                        Spawn(p);
443                    }
444                }
445                laskuri.Value += 20;
446                naytto.Text = " Pisteet: " + laskuri.Value + " ";
447            }
448        }
449    }
450
451    void Pisteet()
452    {
453        laskuri = new IntMeter(0);
454        naytto = new Label();
455        naytto.Text = " Pisteet: 0 ";
456        naytto.Size = new Vector (20,15);
457        naytto.X = Screen.Left + 80;
458        naytto.Y = Screen.Top - 70;
459        naytto.TextColor = Color.Black;
460        naytto.BorderColor = Color.Transparent;
461        naytto.Color = Color.Transparent;
462        Add(naytto);
463       
464    }
465
466    void Elamat()
467    {
468        laskuri2 = new IntMeter(3);
469        naytto2 = new Label();
470        naytto2.Text = " Elämät: 3 ";
471        naytto2.Size = new Vector(20, 15);
472        naytto2.X = Screen.Left + 80;
473        naytto2.Y = Screen.Top - 44;
474        naytto2.TextColor = Color.Black;
475        naytto2.BorderColor = Color.Transparent;
476        naytto2.Color = Color.Transparent;
477        Add(naytto2);
478    }
479
480    void TallennaPisteet(Window sender)
481    {
482        DataStorage.Save<ScoreList>(lista, "pisteet.xml");
483        Valikko();
484    }
485
486    void End()
487    {
488        if (X720.IsDestroyed == false)
489        {
490            X720.Destroy();
491        }
492        SoundEffect Havio = LoadSoundEffect("Havio");
493        Havio.Play();
494        Loppu();
495    }
496
497    void Loppu()
498    {
499        topPisteet = new HighScoreWindow
500 ("", "     Parhaat pisteet     ", "Teit ennätyksen pisteillä " + laskuri.Value + ". Kirjoita nimesi:", lista, laskuri.Value);
501        topPisteet.Closed += TallennaPisteet;
502        Add(topPisteet);
503    }
504
505
506}
Note: See TracBrowser for help on using the repository browser.