source: 2011/24/LeeviK/Pong/Pong/Pong/Peli.cs @ 3776

Revision 3776, 17.8 KB checked in by lesejuku, 9 years ago (diff)

Talletus.

Line 
1using System;
2using System.Collections.Generic;
3using System.Linq;
4using System.Text;
5using Jypeli;
6using Jypeli.Assets;
7using Jypeli.Controls;
8using Jypeli.Effects;
9using Jypeli.Widgets;
10
11
12class Natsi : PhysicsObject
13{
14    public int Elamat = 3;
15
16    public Natsi(double leveys, double korkeus)
17        : base(leveys, korkeus)
18    {
19    }
20}
21
22
23class Ase : AssaultRifle
24{
25    public int tuhovoima;
26
27    public Ase(double leveys, double korkeus)
28        : base(leveys, korkeus)
29    {
30    }
31}
32
33class Pelaaja : PhysicsObject
34{
35
36    public int Elamat = 2;
37    public List<Ase> aseet;
38    public List<Animation> pelaajanAnimaatiot;
39    public int aktiivinenAseIndeksi;
40
41    public Pelaaja(double leveys, double korkeus)
42        : base(leveys, korkeus)
43    {
44        aseet = new List<Ase>();
45        pelaajanAnimaatiot = new List<Animation>();
46    }
47}
48
49public class Peli : PhysicsGame
50{
51    Vector nopeusYlos = new Vector(0, 200);
52    Vector nopeusAlas = new Vector(0, -200);
53    List<Label> valikonKohdat;
54
55
56    //GameObject crosshair;
57    Pelaaja pelaaja;
58    Pelaaja pelaaja2;
59
60    //AssaultRifle pulttilukkoKivaari;
61    //AssaultRifle rynkky;
62    //AssaultRifle aktiivinenAse;
63
64    //Label ammoNaytto;
65    SoundEffect aseAani2 = LoadSoundEffect("SpringfieldFire1");
66    SoundEffect aseAani = LoadSoundEffect("ThompsonFire1");
67    ExplosionSystem explosionSystem2;
68    ExplosionSystem explosionSystem;
69    SoundEffect osumisAani = LoadSoundEffect("den_damage_32");
70    Image jenkkiveri = LoadImage("jenkkiveri");
71    Image muurikakka = LoadImage("Muuri");
72    Image punainenlaiska = LoadImage("HITLERNATSI");
73    IntMeter kenttaLaskuri;
74    IntMeter Pistelaskuri;
75    ScoreList topLista = new ScoreList(10, false, 0);
76    Image ammusKuva = LoadImage("luodi");
77    Image[] natsikuvat = LoadImages("NATSI", "NATSI");
78
79
80    public override void Begin()
81    {
82        Valikko();
83        topLista = DataStorage.TryLoad<ScoreList>(topLista, "pisteet.xml");
84    }
85
86    void LuoNatsi(Vector paikka, double x, double y)
87    {
88        Natsi natsi = new Natsi(40, 40);
89        natsi.Shape = Shape.Circle;
90        natsi.Position = new Vector(x, y);
91        natsi.Tag = "natsi";
92
93        Image natsinKuva = LoadImage("NATSI");
94        natsi.Image = natsinKuva;
95        natsi.Animation = new Animation(natsikuvat);
96        natsi.Animation.Start();
97        natsi.Width = 175;
98        natsi.Height = 130;
99
100        FollowerBrain natsinAivot = new FollowerBrain(pelaaja, pelaaja2);
101        //natsinAivot.FollowDistance = 1;
102        natsinAivot.TurnWhileMoving = true;
103        natsinAivot.Speed = 160;
104
105        //natsinAivot.TargetClose += mitaTapahtuuKunOllaanLahella;
106        //natsinAivot.FollowAlways = true;
107        natsinAivot.Active = true;
108        natsi.Brain = natsinAivot;
109        Add(natsi);
110        natsi.Angle = pelaaja.Angle;
111
112        //Timer ajastin = new Timer();
113        //ajastin.Interval = 300000000.0;
114        //ajastin.Timeout += KäännyPelaajaan;
115        //ajastin.Start();
116        //ajastin.Tag = natsi;
117    }
118
119
120
121    void LiikutaPelaajaa(Vector suunta)
122    {
123        pelaaja.Push(suunta);
124    }
125
126    void LuoKentta()
127    {
128        TileMap ruudut = TileMap.FromFile("Round.txt");
129
130        ruudut.SetTileMethod('Z', LuoNatsi);
131        ruudut.SetTileMethod('P', LuoPelaajat);
132        ruudut.SetTileMethod('M', LuoMuuri);
133        ruudut.Execute(500, 100);
134
135        Timer ajastin = new Timer();
136        ajastin.Interval = 2.0;
137        ajastin.Timeout += lisaaNatseja;
138        ajastin.Start();
139
140        //crosshair = new GameObject(5.0, 5.0, Shape.Circle);
141        //crosshair.Image = crosshairkuva;
142        //Add(crosshair);
143
144        explosionSystem2 = new ExplosionSystem(LoadImage("jenkkiveri"), 100);
145        //MediaPlayer.Play("mus_17a_mystery");
146
147        Level.BackgroundColor = Color.DarkGreen;
148
149        Camera.Follow(pelaaja, pelaaja2);
150        Add(explosionSystem);
151        explosionSystem.MinScale = 50;
152        explosionSystem.MaxScale = 50;
153        explosionSystem.MinLifetime = 0.1;
154        explosionSystem.MaxLifetime = 1;
155        Timer ajastin2 = new Timer();
156        ajastin2.Interval = 214;
157        ajastin2.Timeout += pistelaskuri;
158        ajastin2.Start();
159        LuoLaskurit();
160    }
161
162    void LuoPelaajat(Vector paikka, double x, double y)
163    {
164        Image[] p1pulttilukkoKuvat = LoadImages("jenkki2", "jenkki2lataus1", "jenkki2lataus1", "jenkki2lataus1", "jenkki2lataus2", "jenkki2lataus2", "jenkki2lataus2", "jenkki2lataus3", "jenkki2lataus3", "jenkki2lataus3", "jenkki2lataus2", "jenkki2lataus2", "jenkki2lataus2", "jenkki2lataus1", "jenkki2lataus1", "jenkki2lataus1", "jenkki2", "jenkki2", "jenkki2", "jenkki2", "jenkki2", "jenkki2", "jenkki2", "jenkki2"); 
165        Image[] p1rynkkyKuvat = LoadImages("jenkki", "jenkki lataus1", "jenkki lataus2", "jenkki lataus3", "jenkki lataus4", "jenkki lataus3", "jenkki lataus2", "jenkki lataus5", "jenkki lataus6", "jenkki lataus5", "jenkki lataus1");
166        Animation p1pulttilukkoAnimaatio = new Animation(p1pulttilukkoKuvat);
167        Animation p1rynkkyAnimaatio = new Animation(p1rynkkyKuvat);
168
169        Image[] p2pulttilukkoKuvat = LoadImages("jenkki2", "jenkki2lataus1", "jenkki2lataus1", "jenkki2lataus1", "jenkki2lataus2", "jenkki2lataus2", "jenkki2lataus2", "jenkki2lataus3", "jenkki2lataus3", "jenkki2lataus3", "jenkki2lataus2", "jenkki2lataus2", "jenkki2lataus2", "jenkki2lataus1", "jenkki2lataus1", "jenkki2lataus1", "jenkki2", "jenkki2", "jenkki2", "jenkki2", "jenkki2", "jenkki2", "jenkki2", "jenkki2"); 
170        Image[] p2rynkkyKuvat = LoadImages("jenkki", "jenkki lataus1", "jenkki lataus2", "jenkki lataus3", "jenkki lataus4", "jenkki lataus3", "jenkki lataus2", "jenkki lataus5", "jenkki lataus6", "jenkki lataus5", "jenkki lataus1");
171        Animation p2pulttilukkoAnimaatio = new Animation(p2pulttilukkoKuvat);
172        Animation p2rynkkyAnimaatio = new Animation(p2rynkkyKuvat);
173        //pelaaja.Animation = pulttilukkoAnimaatio;
174
175
176        pelaaja = LuoPelaaja(paikka, x, y);
177        // tämä laittaa listaan ensin rynkyn sitten pulttilukon
178        AlustaPelaajanAseet(pelaaja);
179        pelaaja.pelaajanAnimaatiot.Add(p1rynkkyAnimaatio);
180        pelaaja.pelaajanAnimaatiot.Add(p1pulttilukkoAnimaatio);
181        pelaaja.Animation = pelaaja.pelaajanAnimaatiot[pelaaja.aktiivinenAseIndeksi];
182        pelaaja.Animation.FPS = 10;
183
184        pelaaja2 = LuoPelaaja(paikka, x, y);
185        AlustaPelaajanAseet(pelaaja2);
186        pelaaja2.pelaajanAnimaatiot.Add(p2rynkkyAnimaatio);
187        pelaaja2.pelaajanAnimaatiot.Add(p2pulttilukkoAnimaatio);
188        pelaaja2.Animation = pelaaja2.pelaajanAnimaatiot[pelaaja2.aktiivinenAseIndeksi];
189        pelaaja2.Animation.FPS = 10;
190
191    }
192
193    Pelaaja LuoPelaaja(Vector paikka, double x, double y)
194    {
195        Pelaaja pelaaja = new Pelaaja(200.0, 115.0);
196        pelaaja.Shape = Shape.Circle;
197        pelaaja.Image = LoadImage("jenkki");
198        pelaaja.X = -200.0;
199        pelaaja.Y = 0.0;
200        pelaaja.Restitution = 0.7;
201        pelaaja.AngularDamping = 0.7;
202        pelaaja.LinearDamping = 0.9;
203        pelaaja.KineticFriction = 0.0;
204        Add(pelaaja);
205        AddCollisionHandler(pelaaja, KasittelePelaajanTormays);
206        return pelaaja;
207    }
208
209    void AlustaPelaajanAseet(Pelaaja pelaaja)
210    {
211        // rynkky
212        Ase rynkky = new Ase(20, 0);
213        rynkky.tuhovoima = 1;
214        rynkky.Ammo.Value = 30;
215        rynkky.Ammo.MinValue = 0;
216        rynkky.FireRate = 10;
217        rynkky.AttackSound = aseAani;
218        rynkky.Ammo.LowerLimit += delegate
219        {
220            pelaaja.Animation.Start();
221            Timer.SingleShot(1, delegate
222            {
223                rynkky.Ammo.Value += 30;
224                pelaaja.Animation.Stop();
225            });
226        };
227        rynkky.ProjectileCollision = delegate(PhysicsObject tormaaja, PhysicsObject kohde) { AmmusOsui(tormaaja, kohde, rynkky); };
228        pelaaja.Add(rynkky);
229        pelaaja.aseet.Add(rynkky);
230        pelaaja.aktiivinenAseIndeksi = 0;
231
232        // pulttilukko
233        Ase pulttilukkoKivaari = new Ase(20, 1);
234        pulttilukkoKivaari.tuhovoima = 10;
235        pulttilukkoKivaari.TimeBetweenUse = TimeSpan.FromSeconds(1.0);
236        pulttilukkoKivaari.AttackSound = aseAani2;
237
238        pulttilukkoKivaari.Ammo.Value = 1;
239        pulttilukkoKivaari.Ammo.MinValue = 0;
240        pulttilukkoKivaari.Ammo.LowerLimit += delegate
241        {
242            pelaaja.Animation.Start();
243            Timer.SingleShot(1, delegate
244            {
245                pulttilukkoKivaari.Ammo.Value += 1;
246                pelaaja.Animation.Stop();
247            });
248        };
249        pulttilukkoKivaari.ProjectileCollision = delegate(PhysicsObject tormaaja, PhysicsObject kohde) { AmmusOsui(tormaaja, kohde, pulttilukkoKivaari); };
250        pelaaja.aseet.Add(pulttilukkoKivaari);
251        pelaaja.Add(pulttilukkoKivaari);
252    }
253
254    /*void LataaAse(int arvo)
255    {
256        Timer.SingleShot(1, LisaaAmmuksia);
257        pelaaja.Animation.Start();
258    }
259
260    void LisaaAmmuksia()
261    {
262        pelaajanAse.Ammo.Value += 30;
263        pelaaja.Animation.Stop();
264    }*/
265
266    Label LuoNaytto(double x, double y, IntMeter sidottavaLaskuri)
267    {
268        Label naytto = new Label();
269        naytto.BindTo(sidottavaLaskuri);
270        naytto.X = x;
271        naytto.Y = y;
272        naytto.TextColor = Color.White;
273        naytto.BorderColor = Level.BackgroundColor;
274        naytto.Color = Level.BackgroundColor;
275        Add(naytto);
276        return naytto;
277    }
278
279
280    void AsetaOhjaimet()
281    {
282        //Keyboard.Listen(Key.A, ButtonState.Down, LiikutaPelaajaa, "Liikuta pelaajaa vasemmalle", new Vector(-1500, 0));
283        //Keyboard.Listen(Key.D, ButtonState.Down, LiikutaPelaajaa, null, new Vector(1500, 0));
284        //Keyboard.Listen(Key.W, ButtonState.Down, LiikutaPelaajaa, null, new Vector(0, 1500));
285        //Keyboard.Listen(Key.S, ButtonState.Down, LiikutaPelaajaa, null, new Vector(0, -1500));
286
287        //Mouse.Listen(MouseButton.Left, ButtonState.Down, AmmuAseella, "Ammu", pelaaja, pelaajanAse);
288        //Keyboard.Listen(Key.F, ButtonState.Down, VaihdaAse, "VaihdaAse", pelaaja, pelaajanAse1);     
289
290        //Pelaaja 1 liikkuminen
291
292        ControllerOne.ListenAnalog(AnalogControl.LeftStick, 0.1, LiikutaPelaajaa, "sticks move against rotation.", pelaaja);
293        ControllerOne.ListenAnalog(AnalogControl.RightStick, 0.1, KäännäPelaajaa, "sticks move against rotation.", pelaaja);
294
295        ControllerOne.ListenAnalog(AnalogControl.RightTrigger, 0.1, AmmuAseella, "Use the right trigger, like the accelerator.", pelaaja);
296        ControllerOne.Listen(Button.Y, ButtonState.Pressed, VaihdaAse, "", pelaaja);
297
298        //Pelaaja 2 liikkuminen
299
300        ControllerTwo.ListenAnalog(AnalogControl.LeftStick, 0.1, LiikutaPelaajaa, "sticks move against rotation.", pelaaja2);
301        ControllerTwo.ListenAnalog(AnalogControl.RightStick, 0.1, KäännäPelaajaa, "sticks move against rotation.", pelaaja2);
302
303        ControllerTwo.ListenAnalog(AnalogControl.RightTrigger, 0.1, AmmuAseella, "Use the right trigger, like the accelerator.", pelaaja2);
304        ControllerTwo.Listen(Button.Y, ButtonState.Pressed, VaihdaAse, "", pelaaja2);
305
306
307    }
308
309    void AmmuAseella(AnalogState liipasimenTila, Pelaaja pelaaja)
310    {
311        Ase ase = pelaaja.aseet[pelaaja.aktiivinenAseIndeksi];
312        ase.Power.Value = 800;
313        double liipasimenAsento = liipasimenTila.State;
314
315
316        PhysicsObject ammus = ase.Shoot();
317
318        if (ammus != null)
319        {
320            ammus.Size = new Vector(ammus.Width * 1.5, ammus.Height * 0.2);
321            ammus.Color = Color.Yellow;
322        }
323    }
324
325
326    void KäännäPelaajaa(AnalogState tatinTila, PhysicsObject Kapitalisti)
327    {
328        Kapitalisti.Angle = tatinTila.StateVector.Angle;
329    }
330
331    void LiikutaPelaajaa(AnalogState tatinTila, PhysicsObject Kapitalisti)
332    {
333        Vector tatinSuunta = tatinTila.StateVector;
334        Kapitalisti.Push(tatinSuunta * 1500);
335    }
336
337
338    void KuunteleLiiketta(AnalogState hiirenTila)
339    {
340        Vector suunta = (pelaaja.Position - Mouse.PositionOnWorld).Normalize();
341        Mouse.IsCursorVisible = true;
342        Vector hiirenLiike = hiirenTila.MouseMovement;
343        pelaaja.Angle = suunta.Angle + Angle.FromDegrees(180);
344
345        //crosshair.X  = Mouse.PositionOnWorld.X;
346        //crosshair.Y = Mouse.PositionOnWorld.Y;
347        Mouse.IsCursorVisible = false;
348    }
349
350    //void AmmuAseella(PhysicsObject pelaaja, Weapon pelaajanAse)
351    //{
352    //    PhysicsObject ammus = pelaajanAse.Shoot();
353
354    //    if (ammus != null)
355    //    {
356    //        ammus.Size = new Vector(ammus.Width * 2.0, ammus.Height * 0.2);
357
358    //        ammus.Image = ammusKuva;
359    //    }
360
361    //}
362
363    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde, Ase ase)
364    {
365        ammus.Destroy();
366
367        if (kohde is Natsi)
368        {
369            Natsi natsi = (Natsi)kohde;
370            natsi.Elamat -= ase.tuhovoima;
371            Explosion rajahdys = new Explosion(50);
372            rajahdys.Position = ammus.Position;
373            rajahdys.Force = 5;
374            rajahdys.ShockwaveColor = Color.Red;
375            rajahdys.Sound = osumisAani;
376            Add(rajahdys);
377
378            if (natsi.Elamat < 1)
379            {
380                explosionSystem.AddEffect(natsi.Position, 100);
381                natsi.Destroy();
382                Pistelaskuri.Value += 50;
383            }
384        }
385    }
386
387
388
389    void VaihdaAse(Pelaaja pelaaja)
390    {
391        pelaaja.aktiivinenAseIndeksi = ++pelaaja.aktiivinenAseIndeksi % pelaaja.aseet.Count;
392        //ammoNaytto.Unbind();
393        //ammoNaytto.BindTo(pelaaja.aseet[pelaaja.aktiivinenAseIndeksi].Ammo);
394        pelaaja.Animation = pelaaja.pelaajanAnimaatiot[pelaaja.aktiivinenAseIndeksi];
395    }
396
397    void KasittelePelaajanTormays(PhysicsObject pelaaja, PhysicsObject kohde)
398    {
399        if (kohde.Tag.ToString() == "natsi")
400        {
401            pelaaja.Destroy();
402            explosionSystem.AddEffect(pelaaja.Position, 100);
403
404            HighScoreWindow topIkkuna = new HighScoreWindow("Zombie Survival BETA Local Highscores",
405                             "You Got  %p! Enter Your Name:",
406                             topLista, Pistelaskuri.Value);
407            topIkkuna.Closed += TallennaPisteet;
408            Add(topIkkuna);
409
410        }
411    }
412
413    void Valikko()
414    {
415        ClearAll();
416        valikonKohdat = new List<Label>();
417
418        Label kohta1 = new Label("Start zombie survival");
419        kohta1.Position = new Vector(0, 40);
420        valikonKohdat.Add(kohta1);
421
422        Label kohta2 = new Label("Exit Game and be coward");
423        kohta2.Position = new Vector(0, -40);
424        valikonKohdat.Add(kohta2);
425
426        foreach (Label valikonKohta in valikonKohdat)
427        {
428            Add(valikonKohta);
429        }
430
431        Mouse.ListenOn(kohta1, MouseButton.Left, ButtonState.Pressed, AloitaPeli, null);
432        Mouse.ListenOn(kohta2, MouseButton.Left, ButtonState.Pressed, Poistu, null);
433
434        Mouse.IsCursorVisible = true;
435        Mouse.ListenMovement(1.0, ValikossaLiikkuminen, null);
436        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Poistu, "");
437    }
438    void ValikossaLiikkuminen(AnalogState hiirenTila)
439    {
440        foreach (Label kohta in valikonKohdat)
441        {
442            if (Mouse.IsCursorOn(kohta))
443            {
444                kohta.TextColor = Color.Red;
445            }
446            else
447            {
448                kohta.TextColor = Color.Black;
449            }
450
451        }
452    }
453
454    void AloitaPeli()
455    {
456        ClearAll();
457        explosionSystem = new ExplosionSystem(LoadImage("natsiveri"), 100);
458        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Valikko, "Palaa valikkoon");
459        LuoKentta();
460        AsetaOhjaimet();
461
462        //Muista ottaa pois kommentista:
463         //ammoNaytto = LuoNaytto(Screen.Left + 60, Screen.Top - 60, aktiivinenAse.Ammo);
464
465        Mouse.IsCursorVisible = true;
466        Mouse.ListenMovement(0.1, KuunteleLiiketta, null);
467    }
468
469    void Poistu()
470    {
471        Exit();
472    }
473
474    void KäännyPelaajaan(Timer sender)
475    {
476        Natsi natsi = (Natsi)sender.Tag;
477        Vector suunta = (pelaaja.Position - natsi.Position).Normalize();
478        natsi.Angle = suunta.Angle;
479    }
480
481
482    void LuoMuuri(Vector paikka, double leveys, double korkeus)
483    {
484        PhysicsObject muuri = PhysicsObject.CreateStaticObject(leveys, korkeus);
485        muuri.Position = paikka;
486        muuri.Shape = Shape.Rectangle;
487        muuri.Color = Color.Gray;
488        Add(muuri);
489        muuri.Image = muurikakka;
490    }
491
492    void lisaaNatseja()
493    {
494        LuoNatsi(new Vector(100, 50), 100, 50);
495    }
496
497    void LuoLaskurit()
498    {
499        kenttaLaskuri = new IntMeter(1);
500
501      //Label KenttäNäyttö = new Label();
502      //KenttäNäyttö.X = Screen.Left + 100;
503      //KenttäNäyttö.Y = Screen.Bottom + 100;
504      //KenttäNäyttö.TextColor = Color.Red;
505      //KenttäNäyttö.SizeMode = TextSizeMode.StretchText;
506      //KenttäNäyttö.Size *= 5;
507      //KenttäNäyttö.BindTo(kenttaLaskuri);
508      //Add(KenttäNäyttö);
509
510        Pistelaskuri = new IntMeter(0);
511
512        PhysicsObject punainenLaiska = new PhysicsObject(150, 200);
513        punainenLaiska.Image = punainenlaiska;
514        punainenLaiska.Position = new Vector(Screen.Right - 100, Screen.Bottom + 100);
515        Add(punainenLaiska);
516
517        Label PisteNäyttö = new Label();
518        PisteNäyttö.BindTo(Pistelaskuri);
519        Add(PisteNäyttö);
520        PisteNäyttö.TextColor = Color.White;
521        PisteNäyttö.X = Screen.Right - 100;
522        PisteNäyttö.Y = Screen.Bottom + 100;
523
524    }
525    void pistelaskuri()
526    {
527        //LaskuriAani.Play();
528        kenttaLaskuri.Value++;
529    }
530
531
532    void TallennaPisteet(Window sender)
533    {
534        DataStorage.Save<ScoreList>(topLista, "pisteet.xml");
535    }
536}
Note: See TracBrowser for help on using the repository browser.