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

Revision 1887, 14.8 KB checked in by latakoso, 8 years ago (diff)

Muokkasin pelaajan kuolemaa.

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