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

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