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

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