source: 2011/24/EeroP/ZOMBIE RUNNER/ZOMBIE RUNNER/ZOMBIE RUNNER/Peli.cs @ 2100

Revision 2100, 12.0 KB checked in by eejoprit, 8 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 Zombi : PhysicsObject
10{
11    public Timer liikeajastin = new Timer();
12    Vector vanhapaikka = Vector.Zero;
13    TagFollowerBrain seuraaja_aivot = new TagFollowerBrain("pelaaja", 5000);
14    public IntMeter zombinelamat = new IntMeter(1); 
15
16    RandomMoverBrain pakoaivot = new RandomMoverBrain(5000)
17        {
18            ChangeMovementSeconds = 4
19           
20        };
21
22    public Zombi(double leveys, double korkeus)
23        : base(leveys, korkeus)
24    {
25        zombinelamat.MaxValue = 20;
26        zombinelamat.LowerLimit += new Meter<int>.OnLimitHandler(zombinelamat_LowerLimit);
27
28        liikeajastin.Interval = 2;
29       
30        liikeajastin.Trigger += new Timer.TriggerHandler(liikeajastin_Trigger);
31        liikeajastin.Start();
32        Brain = seuraaja_aivot;
33    }
34
35   
36   
37    void zombinelamat_LowerLimit(int value)
38    {
39        Destroy();
40    }
41
42   
43   
44    void liikeajastin_Trigger(Timer sender)
45    {
46        Vector paikkojenetaisyys = vanhapaikka - Position;
47
48        if (paikkojenetaisyys.Magnitude == 0.0)
49        {
50            Brain = pakoaivot;
51        }
52        else
53        {
54            Brain = seuraaja_aivot;
55        }
56        vanhapaikka = Position;
57    }
58}
59
60public class Peli : PhysicsGame
61{
62    Double nopeus = 200;
63    Double katse = 100;
64   
65    Image seinakuva = LoadImage("seinä");
66    Image ikkunakuva = LoadImage("ikkuna");
67    Image mustakuva = LoadImage("mustakuva");
68    Image vaakaraput = LoadImage("rappuset_vaaka");
69    Image pystyraput = LoadImage("rappuset_pysty");
70
71    Image pelaaja1kuva = LoadImage("vihreäukko");
72    Image pelaaja2kuva = LoadImage("punainenukko");
73    Image pelaaja3kuva = LoadImage("sininenukko");
74    Image pelaaja4kuva = LoadImage("keltainenukko");
75    Image zombikuva = LoadImage("zombi");
76    Image sininen = LoadImage("sininen");
77
78    GameObject kamerapiste;
79   
80    PhysicsObject pelaaja;
81
82    PhysicsObject[] pelaajat = new PhysicsObject[4];
83    PhysicsObject pelaaja1;
84    PhysicsObject pelaaja2;
85    PhysicsObject pelaaja3;
86    PhysicsObject pelaaja4;
87
88    Weapon[] aseet = new Weapon[4];
89
90    List<Vector> teleportit = new List<Vector>();
91   
92
93
94    PhysicsObject zombi;
95
96
97    public override void Begin()
98    {
99        // TODO: Kirjoita ohjelmakoodisi tähän
100       
101        luokentta();
102       
103
104        ohjaimet();
105        Camera.Zoom(0.5);
106       
107        kamerapiste = new GameObject(1.0, 1.0);
108        Camera.Follow(kamerapiste);
109        kamerapiste.X = (pelaaja1.X + pelaaja2.X + pelaaja3.X + pelaaja4.X) / 4;
110        kamerapiste.Y = (pelaaja1.Y + pelaaja2.Y + pelaaja3.Y + pelaaja4.Y) / 4;
111        kamerapiste.Shape = Shape.Circle;
112
113        Timer zombiAjastin = new Timer();
114        zombiAjastin.Interval = 5;
115        zombiAjastin.Trigger += new Timer.TriggerHandler(uusizombi);
116        zombiAjastin.Start();
117    }
118
119    void uusizombi(Timer sender)
120    {
121        int paikkaIndeksi = RandomGen.NextInt(0, teleportit.Count - 1);
122        Vector paikka = teleportit[paikkaIndeksi];
123
124        PhysicsObject zombi = luozombit();
125        zombi.Position = paikka;
126    }
127
128    protected override void Update(Time time)
129    {
130        kamerapiste.X = (pelaaja1.X + pelaaja2.X + pelaaja3.X + pelaaja4.X) / 4;
131        kamerapiste.Y = (pelaaja1.Y + pelaaja2.Y + pelaaja3.Y + pelaaja4.Y) / 4;
132
133        Vector ehdokas = new Vector(0, 0);
134        for (int i = 0; i < pelaajat.Length; i++)
135        {
136            if (ehdokas.Magnitude < Vector.Distance(kamerapiste.Position, pelaajat[i].Position))
137                ehdokas = pelaajat[i].Position - kamerapiste.Position;
138        }
139
140        double zoomX = Screen.Width / (2 * Math.Abs(ehdokas.X) + 700);
141        double zoomY = Screen.Height / (2 * Math.Abs(ehdokas.Y) + 700);
142
143        Camera.ZoomFactor = Math.Min(zoomX, zoomY);
144
145        base.Update(time);
146    }
147   
148   
149
150    #region kenttä
151   
152    void luokentta()
153    {
154        Level.BackgroundColor = Color.Gray;
155
156        //kenttä 1
157        TileMap ruudut = TileMap.FromFile("eeron leveli2.txt");
158        ruudut.SetTileMethod('w', luoseinä);
159        ruudut.SetTileMethod('#', luoikkuna);
160        ruudut.SetTileMethod('m', luomustaa);
161        ruudut.SetTileMethod('=', luoraputpysty);
162        ruudut.SetTileMethod('i', luoraputvaaka);
163        ruudut.SetTileMethod('b', luosinista);
164        ruudut.SetTileMethod('@', luoteleportti);
165        ruudut.Execute(64, 64);
166       
167
168        // w = seinä
169        // m = musta, voi mennä läpi
170        // # = ikkuna
171        // = = rappuset
172        // i = rappuset
173        // 1 = pelaaja 1 aloituspaikka
174        // 2 = pelaaja 2 aloituspaikka
175        // 3 = pelaaja 3 aloituspaikka
176        // 4 = pelaaja 4 aloituspaikka
177        // v = voi kulkea vain "alaspäin"
178        // b = sinistä, ei voi mennä läpi
179        // @ = zombien ilmestymispaikka
180
181
182        pelaaja1 = luopelaajat(pelaaja1kuva, 0.0, -1000.0);
183        pelaaja2 = luopelaajat(pelaaja2kuva, 0.0, -1000.0);
184        pelaaja3 = luopelaajat(pelaaja3kuva, 0.0, -1000.0);
185        pelaaja4 = luopelaajat(pelaaja4kuva, 0.0, -1000.0);
186
187        pelaajat[0] = pelaaja1;
188        pelaajat[1] = pelaaja2;
189        pelaajat[2] = pelaaja3;
190        pelaajat[3] = pelaaja4;
191
192        luoaseet();
193
194        zombi = luozombit();
195    }
196
197
198    #region kentän oliot
199
200
201    void luoseinä(Vector paikka, double x, double y)
202    {
203        PhysicsObject seina = PhysicsObject.CreateStaticObject(64.0, 64.0);
204        seina.Position = paikka;
205        seina.Image = seinakuva;
206        Add(seina);
207    }
208
209
210    void luoikkuna(Vector paikka, double x, double y)
211    {
212        PhysicsObject ikkuna = PhysicsObject.CreateStaticObject(64.0, 64.0);
213        ikkuna.Position = paikka;
214        ikkuna.Image = ikkunakuva;
215        ikkuna.IgnoresCollisionResponse = true;
216        Add(ikkuna);
217    }
218
219    void luomustaa(Vector paikka, double x, double y)
220    {
221        PhysicsObject musta = PhysicsObject.CreateStaticObject(64.0, 64.0);
222        musta.Position = paikka;
223        musta.Image = mustakuva;
224        musta.IgnoresCollisionResponse = true;
225        Add(musta, 1);
226    }
227
228    void luoraputpysty(Vector paikka, double x, double y)
229    {
230        PhysicsObject raput_y = PhysicsObject.CreateStaticObject(64.0, 64.0);
231        raput_y.Position = paikka;
232        raput_y.Image = pystyraput;
233        raput_y.IgnoresCollisionResponse = true;
234        Add(raput_y, -1);
235    }
236
237
238    void luoraputvaaka(Vector paikka, double x, double y)
239    {
240        PhysicsObject raput_x = PhysicsObject.CreateStaticObject(64.0, 64.0);
241        raput_x.Position = paikka;
242        raput_x.Image = vaakaraput;
243        raput_x.IgnoresCollisionResponse = true;
244        Add(raput_x, -1);
245    }
246
247
248    void luosinista(Vector paikka, double x, double y)
249    {
250        PhysicsObject sinistä = PhysicsObject.CreateStaticObject(64.0, 64.0);
251        sinistä.Position = paikka;
252        sinistä.Image = sininen;
253        sinistä.IgnoresCollisionResponse = true;
254        Add(sinistä, -1);
255    }
256
257    void luoteleportti(Vector paikka, double x, double y)
258    {
259        PhysicsObject teleportti = PhysicsObject.CreateStaticObject(64.0, 64.0);
260        teleportti.Position = paikka;
261        teleportti.Image = mustakuva;
262        teleportti.IgnoresCollisionResponse = true;
263        Add(teleportti, 1);
264
265        teleportit.Add(paikka);
266    }
267
268
269
270    #endregion
271    #endregion
272
273
274
275
276
277    #region peliukot
278    PhysicsObject luopelaajat(Image kuva, double x, double y)
279    {
280        pelaaja = new PhysicsObject (55.0, 55.0);
281        pelaaja.Image = kuva;
282        pelaaja.Color = Level.BackgroundColor;
283        pelaaja.X = x;
284        pelaaja.Y = y;
285        pelaaja.Tag = ("pelaaja");
286        pelaaja.Shape = Shape.Circle;
287        pelaaja.CanRotate = false;
288        AddCollisionHandler(pelaaja, pelaajatormaa); 
289
290        Add(pelaaja);
291       
292        return pelaaja;
293       
294    }
295
296    void pelaajatormaa(PhysicsObject pelaaja, PhysicsObject kohde) 
297    {
298        if (kohde is Zombi)
299        {
300            pelaaja.Destroy();
301        }
302    }
303
304    PhysicsObject luozombit()
305    {
306
307        PhysicsObject zombi = new Zombi(55.0, 55.0);
308        zombi.Image = zombikuva;
309        zombi.Shape = Shape.Circle;
310        zombi.Tag = ("vihollinen");
311        Add(zombi);
312        return zombi;
313    }
314
315    void luoaseet()
316    {
317
318        for (int i = 0; i < aseet.Length; i++)
319        {
320            aseet[i] = new AssaultRifle(15, 5);
321            aseet[i].Ammo.Value = 500;
322            aseet[i].ProjectileCollision = ase1osuu;
323            //aseet[i].X = pelaaja.Width / 2;
324            //aseet[i].Y = -pelaaja.Height / 2;
325            aseet[i].Image = null;
326            aseet[i].Color = Color.Transparent;
327
328            pelaajat[i].Add(aseet[i]);
329        }
330    }
331
332
333#endregion
334
335    void ase1osuu(PhysicsObject ammus, PhysicsObject kohde)
336    {
337        if (kohde is Zombi)
338        {
339            Zombi zombi = (Zombi)kohde;
340            zombi.zombinelamat.Value -= 1;
341        }
342        ammus.Destroy();
343    }
344
345
346    #region liikuttelu
347
348    void ohjaimet()
349    {
350        ControllerOne.ListenAnalog(AnalogControl.LeftStick, -1, pelaaja0liike, ("liikutelaan pelaajaa numero 1"), pelaaja1);
351        ControllerOne.ListenAnalog(AnalogControl.RightStick, 0.01, pelaaja0katse, "katsotaan pelaajalla numero 1",pelaaja1);
352        ControllerOne.ListenAnalog(AnalogControl.RightTrigger, 0.001, ammuaseella, "pelaaja1 ampuu aseella", aseet[0]);       
353        ControllerOne.Listen(Button.Back, ButtonState.Down, Exit, ("poistu pelistä"));
354
355        ControllerTwo.ListenAnalog(AnalogControl.LeftStick, -1, pelaaja0liike, ("liikutelaan pelaajaa numero 2"), pelaaja2);
356        ControllerTwo.ListenAnalog(AnalogControl.RightStick, 0.01, pelaaja0katse, "katsotaan pelaajalla numero 2", pelaaja2);
357        ControllerTwo.ListenAnalog(AnalogControl.RightTrigger, 0.001, ammuaseella, "pelaaja2 ampuu aseella", aseet[1]); 
358        ControllerTwo.Listen(Button.Back, ButtonState.Down, Exit, ("poistu pelistä"));
359
360        ControllerThree.ListenAnalog(AnalogControl.LeftStick, -1, pelaaja0liike, ("liikutelaan pelaajaa numero 3"), pelaaja3);
361        ControllerThree.ListenAnalog(AnalogControl.RightStick, 0.01, pelaaja0katse, "katsotaan pelaajalla numero 3", pelaaja3);
362        ControllerThree.ListenAnalog(AnalogControl.RightTrigger, 0.001, ammuaseella, "pelaaja3 ampuu aseella", aseet[2]);
363        ControllerThree.Listen(Button.Back, ButtonState.Down, Exit, ("poistu pelistä"));
364
365        ControllerFour.ListenAnalog(AnalogControl.LeftStick, -1, pelaaja0liike, ("liikutelaan pelaajaa numero 4"), pelaaja4);
366        ControllerFour.ListenAnalog(AnalogControl.RightStick, 0.01, pelaaja0katse, "katsotaan pelaajalla numero 4", pelaaja4);
367        ControllerFour.ListenAnalog(AnalogControl.RightTrigger, 0.001, ammuaseella, "pelaaja4 ampuu aseella", aseet[3]);
368        ControllerFour.Listen(Button.Back, ButtonState.Down, Exit, ("poistu pelistä"));
369    }
370   
371   
372    void pelaaja0liike(AnalogState vasen_tatintila, PhysicsObject pelaaja0)
373    {
374        if (vasen_tatintila.StateVector.Magnitude < 0.1)
375        {
376            pelaaja0.Stop();
377        }
378        else
379        {
380            Vector tatinasento = vasen_tatintila.StateVector;
381            Vector pelaaja1nopeus = nopeus * tatinasento;
382            pelaaja0.Velocity = pelaaja1nopeus;
383
384        }
385
386
387    }
388
389    void pelaaja0katse(AnalogState oikea_tatintila, PhysicsObject pelaaja0)
390    { 
391        Vector tatin2asento = oikea_tatintila.StateVector;
392        Vector pelaaja1katse = katse * tatin2asento ;
393        pelaaja0.Angle = pelaaja1katse.Angle;
394    }
395
396    void ammuaseella(AnalogState s, Weapon ase)
397    {
398        PhysicsObject ammus = ase.Shoot();
399
400        if (ammus != null)
401        {
402            ammus.Size = new Vector(6.0, 3.0);
403            ammus.Image = null;
404            ammus.Color = Color.Black;
405        }
406    }
407
408    #endregion
409
410}
Note: See TracBrowser for help on using the repository browser.