source: 2016/26/RasmusL/ZombiSurvi/ZombiSurvi/ZombiSurvi/ZombiSurvi.cs @ 7592

Revision 7592, 8.2 KB checked in by karkaite, 4 years ago (diff)
Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9class Hahmo : PlatformCharacter
10{
11    private IntMeter elamaLaskuri;
12    public IntMeter ElamaLaskuri { get { return elamaLaskuri; } }
13
14    public Hahmo(double leveys, double korkeus, int elama)
15        : base(leveys, korkeus)
16    {
17        elamaLaskuri = new IntMeter(elama, 0, elama);
18        elamaLaskuri.LowerLimit += delegate { this.Destroy(); };
19    }
20}
21
22public class ZombiSurvi : PhysicsGame
23{
24    const double nopeus = 200;
25    const double hyppyNopeus = 950;
26    const int RUUDUN_KOKO = 40;
27
28    IntMeter round = new IntMeter(1);
29
30    Hahmo pelaaja1;
31    GameObject tahtain;
32
33    Image taskulamppu = LoadImage("lampu");
34    Image pelaajanKuva = LoadImage("hahmo1");
35    Image zombi = LoadImage("zombi");
36    Image asekuva = LoadImage("käsiase");
37    Image panos = LoadImage("panos");
38    Image tahtainkuva = LoadImage("crosshairs_144");
39    GameObject valo;
40    SoundEffect maaliAani = LoadSoundEffect("maali");
41    Image puukuva = LoadImage("dramaattinenmaa");
42    Image ruohokuva = LoadImage("ruoho");
43    Image kivikuva = LoadImage("maakivi");
44    Animation juoksuanimaatio;
45
46    public override void Begin()
47    {
48        juoksuanimaatio = LoadAnimation("juoksu");
49        Mouse.IsCursorVisible = false;
50        SmoothTextures = false;
51        Gravity = new Vector(0, -1000);
52
53        LuoKentta();
54        LisaaNappaimet();
55        LuoAikaLaskuri();
56        LuoroundLaskuri();
57
58        Camera.Follow(pelaaja1);
59        Camera.ZoomFactor = 1.2;
60        //Camera.StayInLevel = true;
61    }
62
63    void LuoKentta()
64    {
65        ColorTileMap ruudut = ColorTileMap.FromLevelAsset("kenttä1");
66        ruudut.SetTileMethod(Color.FromHexCode("FF0000"), LisaaPelaaja);
67        ruudut.SetTileMethod(Color.FromHexCode("4FFF51"), LisaaTaso, puukuva);
68        ruudut.SetTileMethod(Color.FromHexCode("F5FF49"), LisaaTaso, ruohokuva);
69        ruudut.SetTileMethod(Color.FromHexCode("FF388A"), LisaaTaso, kivikuva);
70        ruudut.SetTileMethod(Color.FromHexCode("4CFF00"), Lisaazombi);
71        ruudut.SetTileMethod(Color.FromHexCode("0037FF"), Lisaazombispawn);
72        ruudut.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
73        Level.CreateBorders();
74        Level.Background.CreateGradient(Color.White, Color.SkyBlue);
75
76        tahtain = new GameObject(100, 100);
77        tahtain.Image = tahtainkuva;
78        Add(tahtain, 3);
79    }
80
81    void LisaaTaso(Vector paikka, double leveys, double korkeus, Image kuva)
82    {
83        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
84        taso.Position = paikka;
85        taso.Image = kuva;
86        Add(taso);
87    }
88    void Lisaazombispawn(Vector paikka, double leveys, double korkeus)
89    {
90        Timer spawnAjastin = new Timer();
91        spawnAjastin.Interval = 7;
92        spawnAjastin.Timeout += delegate
93        {
94            if (Vector.Distance(pelaaja1.Position, paikka) > 600 && RandomGen.NextInt(0,100) < round.Value * 10)
95            {
96                Lisaazombi(paikka, leveys, korkeus);
97            }   
98        };
99        spawnAjastin.Start();
100    }
101    void Lisaazombi(Vector paikka, double leveys, double korkeus)
102    {
103        Hahmo zombi = new Hahmo(leveys, korkeus, round.Value);
104        zombi.Position = paikka;
105        zombi.Image = this.zombi;
106        zombi.Tag = "zombi";
107        Add(zombi);
108
109        PlatformWandererBrain tasoAivot = new PlatformWandererBrain();
110        tasoAivot.Speed = 100;
111        tasoAivot.TriesToJump = true;
112        tasoAivot.JumpSpeed = 1000;
113
114        FollowerBrain seuraajanAivot = new FollowerBrain("pelaaja");
115        seuraajanAivot.Speed = 300;
116        seuraajanAivot.DistanceFar = 800;
117        seuraajanAivot.FarBrain = tasoAivot;
118
119        zombi.Brain = seuraajanAivot;
120    }
121
122    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
123    {
124        pelaaja1 = new Hahmo(leveys*0.5, korkeus, 3);
125        pelaaja1.Position = paikka;
126        pelaaja1.Mass = 4.0;
127        pelaaja1.Image = pelaajanKuva;
128        pelaaja1.Tag = "pelaaja";
129        pelaaja1.AnimWalk = juoksuanimaatio;
130
131        Add(pelaaja1);
132        pelaaja1.Weapon = new AssaultRifle(50, 50);
133        pelaaja1.Weapon.Image = asekuva;
134        pelaaja1.Weapon.FireRate = 2;
135        pelaaja1.Weapon.Ammo.Value = 1000;
136        pelaaja1.Weapon.ProjectileCollision = AmmusOsui;
137        ProgressBar elamaPalkki = new ProgressBar(150, 20);
138        elamaPalkki.X = Screen.Left + 150;
139        elamaPalkki.Y = Screen.Top - 20;
140        elamaPalkki.BindTo(pelaaja1.ElamaLaskuri);
141        Add(elamaPalkki);
142
143        valo = new GameObject(taskulamppu);
144        valo.Position = pelaaja1.Position;
145        valo.IsVisible = true;
146        Add(valo, 3);
147    }
148    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
149    {
150        ammus.Destroy();
151
152        if (kohde is Hahmo)
153        {
154            ((Hahmo)kohde).ElamaLaskuri.Value -= 1;
155        }
156    }
157    void LisaaNappaimet()
158    {
159        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
160        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
161
162        Keyboard.Listen(Key.A, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
163        Keyboard.Listen(Key.D, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, nopeus);
164        Keyboard.Listen(Key.Space, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
165
166        Mouse.Listen(MouseButton.Left, ButtonState.Down, AmmuAseella, "Ammu", pelaaja1);
167
168        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
169
170        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
171        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
172        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
173
174
175        Mouse.ListenMovement(0.0, KuunteleLiiketta, null);
176
177        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
178    }
179
180    void KuunteleLiiketta(AnalogState hiirenTila)
181    {
182        pelaaja1.Weapon.AbsoluteAngle = (Mouse.PositionOnWorld - pelaaja1.Position).Angle;
183        valo.AbsoluteAngle = (Mouse.PositionOnWorld - pelaaja1.Position).Angle;
184
185        tahtain.Position = Mouse.PositionOnWorld;
186    }
187
188    protected override void Update(Time time)
189    {
190        valo.Position = pelaaja1.Position;
191        base.Update(time);
192    }
193
194    void AmmuAseella(PlatformCharacter pelaaja)
195    {
196        PhysicsObject ammus = pelaaja.Weapon.Shoot();
197
198        if (ammus != null)
199        {
200            ammus.Size = new Vector(5, 3) * 2;
201            ammus.Image = panos;
202            //ammus.MaximumLifetime = TimeSpan.FromSeconds(2.0);
203        }
204    }
205    void Liikuta(PlatformCharacter hahmo, double nopeus)
206    {
207        hahmo.Walk(nopeus);
208    }
209
210    void Hyppaa(PlatformCharacter hahmo, double nopeus)
211    {
212        hahmo.Jump(nopeus);
213    }
214
215    void LuoAikaLaskuri()
216    {
217        Timer aikaLaskuri = new Timer();
218        aikaLaskuri.Start();
219
220        Label aikaNaytto = new Label();
221        aikaNaytto.TextColor = Color.White;
222        aikaNaytto.DecimalPlaces = 1;
223        aikaNaytto.BindTo(aikaLaskuri.SecondCounter);
224        Add(aikaNaytto);
225        aikaNaytto.Position = new Vector(930, -470);
226    }
227
228    void LuoroundLaskuri()
229    {
230        Timer aikaLaskuri = new Timer();
231        aikaLaskuri.Interval = 30;
232        aikaLaskuri.Timeout += delegate { round.Value += 1; };
233        aikaLaskuri.Start();
234
235        Label roundNaytto = new Label();
236        roundNaytto.TextColor = Color.White;
237        roundNaytto.DecimalPlaces = 1;
238        roundNaytto.BindTo(round);
239        //roundNaytto.Position = new Vector(930, -470);
240        Add(roundNaytto);
241       
242    }
243
244    void LuoVihollinen(Vector paikka, double leveys, double korkeus)
245    {
246        PhysicsObject vihollinen = new PhysicsObject(leveys, korkeus);
247        vihollinen.Position = paikka;
248        vihollinen.Tag = "zombi";
249        Add(vihollinen);
250    }
251
252}
Note: See TracBrowser for help on using the repository browser.