source: 2012/26/MikaL/Zombie Survival/Zombie Survival/Zombie Survival/Zombie_Survival.cs @ 3397

Revision 3397, 18.9 KB checked in by mitokalu, 9 years ago (diff)

Talletus.

Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9
10class Zombi : PhysicsObject
11{
12    public DoubleMeter zhp = new DoubleMeter(15,0,15);
13
14    public Zombi(double leveys, double korkeus)
15        : base(leveys, korkeus)
16    {
17        zhp.LowerLimit += delegate { Tuhoa(); };
18    }
19
20    public void Tuhoa()
21    {
22        Zombie_Survival peli = (Zombie_Survival)PhysicsGame.Instance;
23        peli.killLaskuri.Value++;
24        peli.rahaLaskuri.Value += 50;
25        this.Destroy();
26        peli.SpawnAjastin();
27    }
28
29    public override void Update(Time time)
30    {
31        base.Update(time);
32        Angle = Velocity.Angle;
33    }
34}
35
36public class Zombie_Survival : PhysicsGame
37{
38    ScoreList topLista = new ScoreList(10, false, 0);
39
40    PhysicsObject p1;
41    PhysicsObject p2;
42    IntMeter p1_ammo;
43    IntMeter p1_lipas;
44    IntMeter p2_ammo;
45    IntMeter p2_lipas;
46
47    Label lataa;
48    Label lataa2;
49
50        public IntMeter killLaskuri;
51        public IntMeter rahaLaskuri;
52    IntMeter multiplayer;
53
54
55    AssaultRifle ak1;
56    AssaultRifle ak2;
57
58    DoubleMeter p1_hp;
59    DoubleMeter p2_hp;
60
61
62    Vector nopeusVasen = new Vector(-300, 0);
63    Vector nopeusOikea = new Vector(300, 0);
64    Vector nopeusYlos = new Vector(0, 200);
65    Vector nopeusAlas = new Vector(0, -200);
66    //Map
67    Image map = LoadImage("map");
68    Image bg = LoadImage("bg");
69    //Aseet
70    Image miniak = LoadImage("miniak47");
71    //player 1
72    Image p1_oikea = LoadImage("p1_oikea_new");
73    Image p1_vasen = LoadImage("p1_vasen");
74    Image p1_ylos = LoadImage("p1_ylos");
75    Image p1_alas = LoadImage("p1_alas");
76    //player 2
77    Image p2_oikea = LoadImage("p2_oikea");
78    Image zombie_skin = LoadImage("zombie_skin");
79
80    List<Vector> zombipaikat;
81
82    public override void Begin()
83    {
84        zombipaikat = new List<Vector>();
85
86        SetWindowSize(1024, 768, false);
87        if (DataStorage.Exists("scores.xml")) topLista = DataStorage.Load<ScoreList>(topLista, "scores.xml");
88
89        multiplayer = new IntMeter(0);
90        Valikko();
91        //player1();
92        //player2();
93       
94        //ZombieSpawn();
95
96        //PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
97    }
98    void StartGame()
99    {
100        //multiplayer.Value = 0;
101        zombipaikat.Clear();
102        ui();
103        LuoMap();
104        controls();
105                LuoKillLaskuri();
106                LuoRahalaskuri();
107    }
108    void Start2Game()
109    {
110        multiplayer = new IntMeter(1);
111        ui();
112        LuoMap();
113        controls();
114        LuoKillLaskuri();
115        LuoRahalaskuri();
116    }
117    void Valikko()
118    {
119        MultiSelectWindow alkuValikko = new MultiSelectWindow("Zombie Survival","Singleplayer", "2-player", "Scores", "Exit");
120        Add(alkuValikko);
121        alkuValikko.ItemSelected += PainettiinValikonNappia;
122    }
123    void PainettiinValikonNappia(int valinta)
124    {
125        switch (valinta)
126        {
127            case 0:
128                StartGame();
129                break;
130            case 1:
131                Start2Game();
132                break;
133            case 2:
134                HighScores();
135                break;
136            case 3:
137                Exit();
138                break;
139        }
140    } 
141
142    void LuoMap()
143    {
144        ColorTileMap ruudut = ColorTileMap.FromLevelAsset("map");
145        ruudut.SetTileMethod(Color.Black, TeeSeina);
146        ruudut.SetTileMethod(Color.Red, TeeOvi);
147        ruudut.SetTileMethod(Color.Blue, TeeP1);
148        if(multiplayer == 1) ruudut.SetTileMethod(Color.Yellow, TeeP2);
149        ruudut.SetTileMethod(Color.Green, TeeZombiPaikka);
150        ruudut.Execute(20, 20);
151        Level.CreateBorders(false);
152        Image lol = Image.FromGradient(2048, 2048, Color.DarkGray, Color.DarkGray);
153        Level.Background.Image = lol;
154        Camera.ZoomToLevel();
155        LuoZombi();
156        LuoZombi();
157        LuoZombi();
158
159       
160       
161    }
162    void TeeSeina(Vector paikka, double leveys, double korkeus)
163    {
164        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
165        taso.Position = paikka;
166        taso.Shape = Shape.Rectangle;
167        taso.Color = Color.Black;
168        Add(taso);
169
170    }
171    void TeeOvi(Vector paikka, double leveys, double korkeus)
172    {
173        PhysicsObject ovi = PhysicsObject.CreateStaticObject(leveys, korkeus);
174        ovi.Position = paikka;
175        ovi.Shape = Shape.Rectangle;
176        ovi.Color = Color.Red;
177        ovi.Tag = "ovi";
178        Add(ovi);
179    }
180    void TeeP1(Vector paikka, double leveys, double korkeus)
181    {
182        p1 = new PhysicsObject(45, 45);
183        p1.Shape = Shape.Circle;
184        p1.Image = p1_oikea;
185        p1.CanRotate = false;
186        p1.Restitution = 0;
187        p1.Position = paikka;
188        p1.Tag = "living";
189        Add(p1);
190        ak1 = new AssaultRifle(20, 20);
191        ak1.Image = null;
192        ak1.Color = Color.Transparent;
193        ak1.ProjectileCollision = AmmusOsui;
194        ak1.Ammo.Value = p1_lipas.Value;
195        p1.Add(ak1);
196    }
197    void TeeP2(Vector paikka, double leveys, double korkeus)
198    {
199        p2 = new PhysicsObject(45, 45);
200        p2.Shape = Shape.Circle;
201        p2.Image = p2_oikea;
202        p2.CanRotate = false;
203        p2.Position = paikka;
204        p2.Tag = "living";
205        p2.Restitution = 0;
206        Add(p2);
207        ak2 = new AssaultRifle(20, 20);
208        ak2.Image = null;
209        ak2.Color = Color.Transparent;
210        ak2.ProjectileCollision = AmmusOsui;
211        ak2.Ammo.Value = p1_lipas.Value;
212        p2.Add(ak2);
213    }
214    public void SpawnAjastin()
215    {
216        Timer ajastin = new Timer();
217        ajastin.Interval = 6.5;
218        ajastin.Timeout += LuoZombi;
219        ajastin.Start();
220
221        Timer ajastin2 = new Timer();
222        ajastin2.Interval = 30;
223        ajastin2.Timeout += LuoZombi;
224        ajastin2.Start();
225
226    }
227    void TeeZombiPaikka(Vector paikka, double leveys, double korkeus)
228    {
229        zombipaikat.Add(paikka);
230    }
231
232    void LuoZombi()
233    {
234        Zombi z1 = new Zombi(45, 38);
235        z1.Position = RandomGen.SelectOne<Vector>(zombipaikat);
236        FollowerBrain zombinAivot = new FollowerBrain("living");
237        z1.Shape = Shape.Circle;
238        z1.Image = zombie_skin;
239        z1.CanRotate = false;
240        z1.Restitution = 0;
241        z1.Brain = zombinAivot;
242        AddCollisionHandler(z1, ZombieHit);
243        z1.Tag = "zombitag";
244        Add(z1);
245    }
246    //void player1()
247    //{
248    //    p1 = new PhysicsObject(45, 45);
249    //    p1.Shape = Shape.Circle;
250    //    p1.Image = p1_oikea;
251    //    p1.CanRotate = false;
252    //    p1.Restitution = 0;
253
254    //}
255    //void player2()
256    //{
257    //    p2 = new PhysicsObject(45, 45);
258    //    p2.Shape = Shape.Circle;
259    //    p2.Image = p2_oikea;
260    //    p2.CanRotate = false;
261    //    p2.X = -50;
262    //    p2.Restitution = 0;
263    //}
264    //void Zombie()
265    //{
266    //    z1 = new PhysicsObject(45, 38);
267    //    z1.X = 150;
268    //    z1.Shape = Shape.Circle;
269    //    z1.Image = zombie_skin;
270    //    z1.CanRotate = false;
271    //    z1.Restitution = 0;
272    //    Add(z1);
273 
274    //}
275    void controls()
276    {
277        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
278
279        Keyboard.Listen(Key.W, ButtonState.Down, AsetaNopeus, null, p1, nopeusYlos);
280        Keyboard.Listen(Key.W, ButtonState.Released, AsetaNopeus, null, p1, Vector.Zero);
281
282        Keyboard.Listen(Key.A, ButtonState.Down, AsetaNopeus, null, p1, nopeusVasen);
283        Keyboard.Listen(Key.A, ButtonState.Released, AsetaNopeus, null, p1, Vector.Zero);
284
285        Keyboard.Listen(Key.S, ButtonState.Down, AsetaNopeus, null, p1, nopeusAlas);
286        Keyboard.Listen(Key.S, ButtonState.Released, AsetaNopeus, null, p1, Vector.Zero);
287
288        Keyboard.Listen(Key.D, ButtonState.Down, AsetaNopeus, null, p1, nopeusOikea);
289        Keyboard.Listen(Key.D, ButtonState.Released, AsetaNopeus, null, p1, Vector.Zero);
290
291        Keyboard.Listen(Key.Space, ButtonState.Pressed, Use, null, p1);
292        Mouse.Listen(MouseButton.Left, ButtonState.Down, Shoot, null, p1);
293       
294        Keyboard.Listen(Key.R, ButtonState.Pressed, Reload, null, p1);
295       
296
297        ControllerOne.Listen(Button.Start, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
298
299        ControllerOne.Listen(Button.DPadUp, ButtonState.Down, AsetaNopeus, null, p2, nopeusYlos);
300        ControllerOne.Listen(Button.DPadUp, ButtonState.Released, AsetaNopeus, null, p2, Vector.Zero);
301
302        ControllerOne.Listen(Button.DPadDown, ButtonState.Down, AsetaNopeus, null, p2, nopeusAlas);
303        ControllerOne.Listen(Button.DPadDown, ButtonState.Released, AsetaNopeus, null, p2, Vector.Zero);
304
305        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, AsetaNopeus, null, p2, nopeusVasen);
306        ControllerOne.Listen(Button.DPadLeft, ButtonState.Released, AsetaNopeus, null, p2, Vector.Zero);
307
308        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, AsetaNopeus, null, p2, nopeusOikea);
309        ControllerOne.Listen(Button.DPadRight, ButtonState.Released, AsetaNopeus, null, p2, Vector.Zero);
310
311        ControllerOne.Listen(Button.Y, ButtonState.Pressed, Use, null, p2);
312        ControllerOne.Listen(Button.RightShoulder, ButtonState.Down, Shoot, null, p2);
313        ControllerOne.Listen(Button.X, ButtonState.Pressed, Reload, null, p2);
314
315    }
316    void ui()
317    {
318
319        //p1_hp
320        p1_hp = new DoubleMeter(5);
321        Label player1 = new Label("Player 1");
322        player1.X = Screen.Left + 40;
323        player1.Y = Screen.Top - 15;
324        p1_hp.MaxValue = 5;
325        ProgressBar p1_hpPalkki = new ProgressBar(170, 20);
326        p1_hpPalkki.BindTo(p1_hp);
327        p1_hpPalkki.X = Screen.Left + 180;
328        p1_hpPalkki.Y = Screen.Top - 15;
329        p1_hpPalkki.BarImage = LoadImage("fullbar");
330        Add(player1);
331        Add(p1_hpPalkki);
332
333        //p1_ammo
334        p1_ammo = new IntMeter(280);
335        p1_lipas = new IntMeter(30);
336        Label p1_ammo_label = new Label();
337        Label vali = new Label("/");
338        Label p1_ammo_lipas = new Label();
339        p1_ammo_lipas.BindTo(p1_lipas);
340        p1_ammo_label.BindTo(p1_ammo);
341        p1_ammo_lipas.Y = Screen.Top - 50;
342        p1_ammo_lipas.X = - 100;
343        vali.Y = Screen.Top - 50;
344        vali.X = -85;
345        p1_ammo_label.Y = Screen.Top - 50;
346        p1_ammo_label.X = -60;
347        Add(p1_ammo_lipas);
348        Add(vali);
349        Add(p1_ammo_label);
350
351
352        //Ase
353        LuoAse(-100, Level.Top + 70);
354        LuoAse(-505, Level.Bottom + 100);
355        if(multiplayer == 1) LuoAse(+100, Level.Top + 70);
356       
357        //GameObject aseenkuva = new GameObject(90,27);
358        //aseenkuva.Image = miniak;
359        //aseenkuva.Y = Level.Top +50;
360        //aseenkuva.X = -17;
361        //Add(aseenkuva);
362
363
364        if (multiplayer == 0) return;
365
366        //p2_hp
367        p2_hp = new DoubleMeter(5);
368        Label player2 = new Label("Player 2");
369        player2.X = Screen.Left + 40;
370        player2.Y = Screen.Top - 40;
371        p2_hp.MaxValue = 5;
372        ProgressBar p2_hpPalkki = new ProgressBar(170, 20);
373        p2_hpPalkki.BindTo(p2_hp);
374        p2_hpPalkki.X = Screen.Left + 180;
375        p2_hpPalkki.Y = Screen.Top - 40;
376        p2_hpPalkki.BarImage = LoadImage("fullbar");
377        p2_hpPalkki.Image = LoadImage("emptybar");
378        Add(p2_hpPalkki);
379        Add(player2);   
380
381        //p2_ammo
382        p2_ammo = new IntMeter(280);
383        p2_lipas = new IntMeter(30);
384        Label p2_ammo_label = new Label();
385        vali = new Label("/");
386        Label p2_ammo_lipas = new Label();
387        p2_ammo_lipas.BindTo(p2_lipas);
388        p2_ammo_label.BindTo(p2_ammo);
389        p2_ammo_lipas.Y = Screen.Top - 50;
390        p2_ammo_lipas.X = +60;
391        vali.Y = Screen.Top - 50;
392        vali.X = +75;
393        p2_ammo_label.Y = Screen.Top - 50;
394        p2_ammo_label.X = +100;
395        Add(p2_ammo_lipas);
396        Add(vali);
397        Add(p2_ammo_label);
398
399    }
400    void LuoAse(double X, double Y)
401    {
402        GameObject aseenkuva = new GameObject(90, 27);
403        aseenkuva.Image = miniak;
404        aseenkuva.Y = Y;
405        aseenkuva.X = X;
406        aseenkuva.Tag = "ase";
407        Add(aseenkuva, -3);
408    }
409       
410        void LuoKillLaskuri()
411        {
412        killLaskuri = new IntMeter(0);
413        Label killNaytto = new Label();
414        Label Kills = new Label("Kills:");
415        Kills.X = Screen.Right - 190;
416        Kills.Y = Screen.Top - 15;
417        killNaytto.X = Screen.Right - 100;
418        killNaytto.Y = Screen.Top - 15;
419        killNaytto.TextColor = Color.Black;
420        killNaytto.BindTo(killLaskuri);
421        Add(Kills);
422        Add(killNaytto);
423        }
424
425    void LuoRahalaskuri()
426    {
427        rahaLaskuri = new IntMeter(1000);
428        Label rahaNaytto = new Label();
429        Label Money = new Label("Money:");
430        Money.X = Screen.Right - 201;
431        Money.Y = Screen.Top - 39;
432        rahaNaytto.X = Screen.Right - 100;
433        rahaNaytto.Y = Screen.Top - 40;
434        rahaNaytto.TextColor = Color.Black;
435        rahaNaytto.BindTo(rahaLaskuri);
436        Add(Money);
437        Add(rahaNaytto);
438    }
439    void AsetaNopeus(PhysicsObject player, Vector nopeus)
440    {
441        player.Velocity = nopeus;
442        if (nopeus.Magnitude == 0)
443        {
444            return;
445        }
446        player.Angle = nopeus.Angle;
447        OvenLahella(player);
448        AseenLahella(player);
449    }
450    void Shoot(PhysicsObject pelaaja)
451    {
452        if (pelaaja == p1)
453        {
454           PhysicsObject ammus = ak1.Shoot();
455            if(ammus != null) p1_lipas.Value--;
456        }
457        if (pelaaja == p2)
458        {
459            PhysicsObject ammus = ak2.Shoot();
460            if (ammus != null) p2_lipas.Value--;
461        }
462        if (p1_lipas == 0)
463        {
464            lataa = new Label("Reload");
465            lataa.MaximumLifetime = TimeSpan.FromSeconds(1);
466            Add(lataa);
467        }
468        if (multiplayer == 0) return;
469        if (p2_lipas == 0)
470        {
471            lataa2 = new Label("Reload (X)");
472            lataa2.X = -50;
473            lataa2.MaximumLifetime = TimeSpan.FromSeconds(1);
474            Add(lataa2);
475        }
476    }
477    void ZombieHit(PhysicsObject zombi, PhysicsObject kohde)
478    {
479        if (kohde.Tag == "living") p1_hp.Value--;
480        if (p1_hp == 0) GameOver();
481        if (multiplayer == 1 && p2_hp == 0) GameOver();
482    }
483    void LuoAikaLaskuri()
484    {
485        Timer aikaLaskuri = new Timer();
486        aikaLaskuri.Start();
487
488        Label aikaNaytto = new Label();
489        aikaNaytto.TextColor = Color.Red;
490        aikaNaytto.DecimalPlaces = 1;
491        aikaNaytto.BindTo(aikaLaskuri.SecondCounter);
492        Add(aikaNaytto);
493    }
494    void AvaaOvi(PhysicsObject pelaaja)
495    {
496        GameObject ovi = GetObjectAt(pelaaja.Position, "ovi", 35);
497        if (ovi == null) return;
498        else if (rahaLaskuri > 149) 
499        {
500            ovi.Destroy();
501            rahaLaskuri.Value -= 150;
502        }
503        else return;
504    }
505    void OvenLahella(PhysicsObject pelaaja)
506    {
507        GameObject ovi = GetObjectAt(pelaaja.Position, "ovi", 35);
508        Label hinta;
509        Label hinta2;
510        if (ovi == null) return;
511        if (multiplayer == 0)
512        {
513            hinta = new Label("Press Space to open one block of the door.");
514            hinta2 = new Label("$150 per block");
515            hinta.X = -20;
516            hinta2.Y = -20;
517            Add(hinta);
518            Add(hinta2);
519        }
520        else
521        {
522            hinta = new Label("Press Space or (Y) to open one block of the door.");
523            hinta2 = new Label("$150 per block");
524            hinta.X = -20;
525            hinta2.Y = -20;
526            Add(hinta);
527            Add(hinta2);
528        }
529        hinta.MaximumLifetime = TimeSpan.FromSeconds(1);
530        hinta2.MaximumLifetime = TimeSpan.FromSeconds(1);
531    }
532    void HighScores()
533    {
534        HighScoreWindow topIkkuna = new HighScoreWindow("Parhaat pisteet", topLista);
535        topIkkuna.Closed += MeneValikkoon;
536        Add(topIkkuna);
537
538    }
539    void MeneValikkoon(Window sender)
540    {
541        Valikko();
542    }
543    void Reload(PhysicsObject pelaaja)
544    {
545        if (p1_ammo > 29 && p1_lipas == 0)
546        {
547            p1_ammo.Value -= 30;
548            p1_lipas.Value += 30;
549            ak1.Ammo.Value = p1_lipas.Value;
550        }
551
552        if (multiplayer == 1 && p2_ammo > 29 && p2_lipas == 0)
553        {
554            p2_ammo.Value -= 30;
555            p2_lipas.Value += 30;
556            ak2.Ammo.Value = p2_lipas.Value;
557        }
558
559        //if (p1_lipas == 0)
560        //{
561        //    lataa = new Label("Reload");
562        //    lataa.MaximumLifetime = TimeSpan.FromSeconds(1);
563        //    Add(lataa);
564        //
565        //}
566    }
567    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
568    {
569        ammus.Destroy();
570        Explosion rajahdys = new Explosion(10);
571        rajahdys.Position = ammus.Position;
572        Add(rajahdys);
573        if (kohde.Tag == "zombitag")
574        {
575            Zombi z1 = kohde as Zombi;
576            z1.zhp.Value -= 7.5;
577        }
578    }
579    void OstaAmmo(PhysicsObject pelaaja)
580    {
581        GameObject ase = GetObjectAt(pelaaja.Position, "ase", 35);
582        if (ase == null) return;
583        else if (rahaLaskuri > 499)
584        {
585            p1_lipas.SetValue(30);
586            p1_ammo.SetValue(280);
587            rahaLaskuri.SetValue(rahaLaskuri.Value - 500);
588        }
589        else return;
590    }
591    void GameOver()
592    {
593        ClearAll();
594        Mouse.IsCursorVisible = true;
595        HighScoreWindow topIkkuna = new HighScoreWindow("Parhaat pisteet", "Onneksi olkoon, pääsit listalle lahtaamalla %p zombia! Syötä nimesi:", topLista, killLaskuri);
596        topIkkuna.Closed += TallennaPisteet;
597        Add(topIkkuna);
598    }
599    void TallennaPisteet(Window sender)
600    {
601        DataStorage.Save<ScoreList>(topLista, "scores.xml");
602        Valikko();
603    }
604    void Use(PhysicsObject pelaaja)
605    {
606        OstaAmmo(pelaaja);
607        AvaaOvi(pelaaja);
608    }
609    void AseenLahella(PhysicsObject pelaaja)
610    {
611        GameObject ase = GetObjectAt(pelaaja.Position, "ase", 35);
612        Label hinta;
613        Label hinta2;
614        if (ase == null) return;
615        if (multiplayer == 0)
616        {
617            hinta = new Label("Press Space to buy AK-47 ammo.");
618            hinta2 = new Label("$500");
619            hinta.X = -20;
620            hinta2.Y = -20;
621            Add(hinta);
622            Add(hinta2);
623        }
624        else
625        {
626            hinta = new Label("Press Space or (Y) to buy AK-47 ammo.");
627            hinta2 = new Label("$500");
628            hinta.X = -20;
629            hinta2.Y = -20;
630            Add(hinta);
631            Add(hinta2);
632        }
633        hinta.MaximumLifetime = TimeSpan.FromSeconds(1);
634        hinta2.MaximumLifetime = TimeSpan.FromSeconds(1);
635    }
636
637}
Note: See TracBrowser for help on using the repository browser.