source: 2014/26/JimiR/RunAway/RunAway/RunAway/RunAway/RunAway.cs @ 5126

Revision 5126, 13.3 KB checked in by jijaolri, 7 years ago (diff)

Peli melkein valmis.!!!!

Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9public class RunAway : PhysicsGame
10{
11    Image taustaKuva = LoadImage("energydrink");
12
13    Image pelaajanKuva = LoadImage("ukkeli");
14    Image pelaajan2Kuva = LoadImage("energydrink");
15    Image vihun2Kuva = LoadImage("Boss");
16
17    Hahmo pelaaja;
18    PhysicsObject yksinpeliVihu;
19
20    Hahmo coopVihu;
21   
22    Hahmo pelaaja2;
23
24    Image vihollisenKuva = LoadImage("slenderman");
25
26    Image asekuva = LoadImage("Rifle");
27
28    bool moninpeli = false;
29    bool coop = false;
30
31    bool vihuAmmuttu = false;
32    int kenttaNro;
33    int maxKenttaNro = 3;
34    int panoksetmoninpelissa = 1000000;
35    int panoksetyksinpelissa = 10;
36
37    public override void Begin()
38    {
39        kenttaNro = 1;
40        LuoAlkuValikko();
41    }
42
43
44    void LuoAlkuValikko()
45    {
46        moninpeli = false;
47        coop = false;
48
49        MultiSelectWindow alkuValikko = new MultiSelectWindow("RunAway", "Start", "MultiPlayer", "COOP", "Quit");
50        Add(alkuValikko);
51
52        alkuValikko.AddItemHandler(0, AloitaPeli);
53        alkuValikko.AddItemHandler(1, delegate { AloitaMoninPeli("Areena");});
54        alkuValikko.AddItemHandler(2, COOP);
55        alkuValikko.AddItemHandler(3, Exit);
56    }
57
58    void AloitaPeli()
59    {
60        moninpeli = false;
61        SmoothTextures = false;
62        vihuAmmuttu = false;
63        LuoKentta("Map" + kenttaNro);
64        LisaaOhjaimet();
65        Camera.FollowedObject = pelaaja;
66        Camera.StayInLevel = true;
67
68
69    }
70
71    void LuoKentta(String kentanNimi)
72    {
73
74        Camera.Follow(pelaaja);
75
76        TileMap ruudut = TileMap.FromLevelAsset(kentanNimi);
77        ruudut.SetTileMethod('#', LuoPalikka);
78        ruudut.SetTileMethod('P', LuoPelaaja);
79        ruudut.SetTileMethod('Y', LuoPelaaja2);
80        ruudut.SetTileMethod('S', LuoYksinpeliVihu);
81        ruudut.SetTileMethod('A', LuoKerattavaAse);
82        ruudut.SetTileMethod('O', LuoOvi);
83        ruudut.SetTileMethod('R', LuoPallo);
84        ruudut.SetTileMethod('V', LuoCOOPVihu);
85        ruudut.Execute(40,40);
86
87       
88       
89
90
91    }
92
93    void LisaaOhjaimet()
94    {
95        Keyboard.Listen(Key.A, ButtonState.Down, LiikutaPelaajaa, null, pelaaja, new Vector(-500, 0));
96        Keyboard.Listen(Key.A, ButtonState.Released, LiikutaPelaajaa, null, pelaaja, Vector.Zero);
97
98        Keyboard.Listen(Key.D, ButtonState.Down, LiikutaPelaajaa, null, pelaaja, new Vector(500, 0));
99        Keyboard.Listen(Key.D, ButtonState.Released, LiikutaPelaajaa, null, pelaaja, Vector.Zero);
100
101        Keyboard.Listen(Key.W, ButtonState.Down, LiikutaPelaajaa, null, pelaaja, new Vector(0, 500));
102        Keyboard.Listen(Key.W, ButtonState.Released, LiikutaPelaajaa, null, pelaaja, Vector.Zero);
103
104        Keyboard.Listen(Key.S, ButtonState.Down, LiikutaPelaajaa, null, pelaaja, new Vector(0, -500));
105        Keyboard.Listen(Key.S, ButtonState.Released, LiikutaPelaajaa, null, pelaaja, Vector.Zero);
106
107
108        Keyboard.Listen(Key.O, ButtonState.Pressed, Pause, "Pysäyttää pelin");
109        Keyboard.Listen(Key.U, ButtonState.Pressed, delegate { AloitaMoninPeli("Areena"); }, "Aloittaa moninpelin alusta");
110        Keyboard.Listen(Key.Space, ButtonState.Down, AmmuAseella, "Ammu", pelaaja);
111        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
112        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
113
114    }
115
116
117    void LiikutaPelaajaa(Hahmo pelaaja, Vector vektori)
118    {
119        if (vektori == Vector.Zero) pelaaja.Velocity = Vector.Zero;
120        pelaaja.Push(vektori);
121
122        if (pelaaja.Ase != null)
123        {
124            if (pelaaja.Velocity == Vector.Zero) return;
125            Vector suunta = (pelaaja.Velocity.Normalize());
126            pelaaja.Ase.Angle = suunta.Angle;
127        }
128    }
129
130
131    void LuoPelaaja(Vector paikka, double leveys, double korkeus)
132    {
133         pelaaja = new Hahmo(30, 30);
134         pelaaja.Image = pelaajanKuva;
135         pelaaja.Position = paikka;
136         pelaaja.Restitution = 0.1;
137         pelaaja.Tag = "pelaaja"; 
138         pelaaja.CanRotate = false;
139         Add(pelaaja);
140         AddCollisionHandler(pelaaja, "vihu", PelaajaTormasi);
141         AddCollisionHandler<Hahmo, PhysicsObject>(pelaaja, "Ase", PelaajaSaaAseen);
142         AddCollisionHandler(pelaaja, "ovi", TormaaOveen);
143         pelaaja.MaximiElama = 5;
144         pelaaja.Elama = 5;
145
146
147
148         AddCollisionHandler(pelaaja, "pallo", PelaajaTormasi); 
149    }
150
151
152    void LuoPelaaja2(Vector paikka, double leveys, double korkeus)
153    {
154        pelaaja2 = new Hahmo(30, 30);
155        pelaaja2.Image = pelaajan2Kuva;
156        pelaaja2.Position = paikka;
157        pelaaja2.Restitution = 0.1;
158        pelaaja2.Tag = "pelaaja2";
159        pelaaja2.CanRotate = false;
160        Add(pelaaja2);
161        AddCollisionHandler<Hahmo, PhysicsObject>(pelaaja2, "Ase", PelaajaSaaAseen);
162    }
163
164
165    void LuoPalikka(Vector paikka, double leveys, double korkeus)
166    {
167        PhysicsObject palikka = PhysicsObject.CreateStaticObject(leveys, korkeus);
168        palikka.Position = paikka;
169        palikka.Color = Color.BrownGreen;
170        Add(palikka);
171
172    }
173
174    void LuoOvi(Vector paikka, double leveys, double korkeus)
175    {
176        PhysicsObject ovi = PhysicsObject.CreateStaticObject(leveys, korkeus);
177        ovi.Position = paikka;
178        ovi.Image = LoadImage("ovi");
179        ovi.Tag = "ovi";
180        Add(ovi);
181
182    }
183
184    void LuoYksinpeliVihu(Vector paikka, double leveys, double korkeus)
185    {
186        yksinpeliVihu = new PhysicsObject(50, 100);
187        yksinpeliVihu.Position = paikka;
188        yksinpeliVihu.Image = vihollisenKuva;
189        yksinpeliVihu.Tag = "vihu";
190        Add(yksinpeliVihu);
191
192        FollowerBrain seuraajanAivot = new FollowerBrain("pelaaja");
193        seuraajanAivot.Speed = 200;           
194        seuraajanAivot.DistanceClose = 900;         
195        seuraajanAivot.StopWhenTargetClose = false;
196
197        yksinpeliVihu.Brain = seuraajanAivot;
198        yksinpeliVihu.Brain.Active = true;
199
200        yksinpeliVihu.IgnoresPhysicsLogics = true;
201
202
203    }
204
205    void LuoPallo(Vector paikka, double leveys, double korkeus)
206    {
207        PhysicsObject pallo = new PhysicsObject(15, 15);
208        pallo.Position = paikka;
209        pallo.Shape = Shape.Circle;
210        pallo.Color = Color.Blue;
211        pallo.Tag = "pallo";
212        Add(pallo);
213
214        RandomMoverBrain satunnaisAivot = new RandomMoverBrain(200);
215        satunnaisAivot.ChangeMovementSeconds = 3;
216        satunnaisAivot.WanderRadius = 200;
217        pallo.Brain = satunnaisAivot;
218    }     
219
220
221    void PelaajaTormasi(PhysicsObject pelaaja, PhysicsObject kohde)
222    {
223        if (kohde.Tag.Equals("vihu") || kohde.Tag.Equals("pallo"))
224        {
225            pelaaja.Destroy();
226            ClearAll();
227            AloitaPeli();
228        }
229
230    }
231
232    void LuoKerattavaAse(Vector paikka, double leveys, double korkeus)
233    {
234        PhysicsObject kerattavaAse = new PhysicsObject(leveys, korkeus);
235        kerattavaAse.Position = paikka;
236        kerattavaAse.Image = asekuva;
237        Add(kerattavaAse);
238        kerattavaAse.Tag = "Ase";
239 
240    }
241
242    void PelaajaSaaAseen(Hahmo pelaaja, PhysicsObject kohde)
243    {
244        //Hahmo pelaaja = (Hahmo)tormaaja;
245        kohde.Destroy();
246        pelaaja.Ase = new AssaultRifle(70, 20);
247        pelaaja.Add(pelaaja.Ase);
248        if (pelaaja.Ase != null)
249        {
250            if (moninpeli)
251            {
252                pelaaja.Ase.Ammo.Value = panoksetmoninpelissa;
253            }
254            else if (coop)
255            {
256                pelaaja.Ase.Ammo.Value = panoksetmoninpelissa;
257            }
258            else
259            {
260                pelaaja.Ase.Ammo.Value = panoksetyksinpelissa;
261            }
262            pelaaja.Ase.ProjectileCollision = AmmusOsui;
263        }
264       
265       
266    }
267
268    void AmmuAseella(Hahmo pelaaja)
269    {
270        if (pelaaja.Ase != null)
271        { 
272            PhysicsObject ammus = pelaaja.Ase.Shoot();
273
274            if (ammus != null)
275            {
276                ammus.Size *= 0.9;
277           
278                //ammus.Image = ...
279                //ammus.MaximumLifetime = TimeSpan.FromSeconds(2.0);
280            }
281        }
282       
283    }
284
285    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
286    {
287        ammus.Destroy();
288        if (kohde.Tag.Equals("vihu"))
289        {
290            kohde.Destroy();
291            vihuAmmuttu = true;
292        }
293
294        if (kohde.Tag.Equals("pelaaja")||kohde.Tag.Equals("pelaaja2")||kohde.Tag.Equals("coopVihu"))
295        {
296            ((Hahmo)kohde).Elama -= 1;
297            if (((Hahmo)kohde).Elama <= 0)
298            {
299                kohde.Destroy();
300
301                if (moninpeli)
302                {
303                    PeliLoppui();
304                }
305               
306                else if(coop)
307                {
308                    if (pelaaja.IsDestroyed && pelaaja2.IsDestroyed) PeliLoppui();
309                    else if(kohde.Tag.Equals("coopVihu")) PeliLoppuiVoittoon();
310                }
311
312            }
313        }
314    }
315
316    void TormaaOveen(PhysicsObject pelaaja, PhysicsObject kohde)
317    {
318        if (kohde.Tag.Equals("ovi"))
319        {
320            if (!vihuAmmuttu) return;
321
322            kenttaNro++;
323            if (kenttaNro > maxKenttaNro) PeliLoppui();
324            else
325            {
326                ClearAll();
327                AloitaPeli();
328            }
329        }
330    }
331
332    void PeliLoppui()
333    {
334        ClearAll();
335        LuoAlkuValikko();
336    }
337
338
339    void PeliLoppuiVoittoon()
340    {
341        MessageDisplay.Add("Players Win!");
342    }
343
344    void AloitaMoninPeli(String kentanNimi)
345    {
346        ClearAll();
347        moninpeli = true;
348        SmoothTextures = false;
349       
350        LuoKentta(kentanNimi);
351
352        LisaaOhjaimet();
353        LisaaOhjaimetPelaajalle2();
354        Camera.Follow(pelaaja, pelaaja2);
355        LuoPistelaskuri(pelaaja, Screen.Left + 150, Screen.Top - 20);
356        LuoPistelaskuri(pelaaja2, Screen.Right - 150, Screen.Top - 20);
357       
358        //Camera.StayInLevel = true;
359        Gravity = new Vector(0, -400);
360    }
361
362    void LisaaOhjaimetPelaajalle2()
363    {
364        Keyboard.Listen(Key.Left, ButtonState.Down, LiikutaPelaajaa, null, pelaaja2, new Vector(-500, 0));
365        Keyboard.Listen(Key.Left, ButtonState.Released, LiikutaPelaajaa, null, pelaaja2, Vector.Zero);
366        Keyboard.Listen(Key.Right, ButtonState.Down, LiikutaPelaajaa, null, pelaaja2, new Vector(500, 0));
367        Keyboard.Listen(Key.Right, ButtonState.Released, LiikutaPelaajaa, null, pelaaja2, Vector.Zero);
368
369        Keyboard.Listen(Key.Up, ButtonState.Down, LiikutaPelaajaa, null, pelaaja2, new Vector(0, 500));
370        Keyboard.Listen(Key.Up, ButtonState.Released, LiikutaPelaajaa, null, pelaaja2, Vector.Zero);
371        Keyboard.Listen(Key.Down, ButtonState.Down, LiikutaPelaajaa, null, pelaaja2, new Vector(0, -500));
372        Keyboard.Listen(Key.Down, ButtonState.Released, LiikutaPelaajaa, null, pelaaja2, Vector.Zero);
373        Keyboard.Listen(Key.RightControl , ButtonState.Down, AmmuAseella, "Ammu", pelaaja2);
374        Keyboard.Listen(Key.N, ButtonState.Pressed, SeuraavaKentta, "vaihtaakenttaa");
375
376    }
377
378    void SeuraavaKentta()
379    {
380        AloitaMoninPeli("Areena2");
381       
382    }
383
384    void LuoPistelaskuri(Hahmo pelaaja,double x, double y)
385    {
386
387        ProgressBar elamaPalkki = new ProgressBar(150, 20);
388        elamaPalkki.X =  x;
389        elamaPalkki.Y = y;
390        elamaPalkki.BindTo(pelaaja.ElamaLaskuri);
391        Add(elamaPalkki);
392
393       
394       
395
396     
397    }
398
399    void COOP()
400    {
401        coop = true;
402        LuoKentta("COOPmap");
403        LisaaOhjaimet();
404        LisaaOhjaimetPelaajalle2();
405
406        Camera.Follow(pelaaja, pelaaja2, coopVihu);
407       
408       
409    }
410
411    void LuoCOOPVihu(Vector paikka, double leveys, double korkeus)
412    {
413        coopVihu = new Hahmo(60, 60);
414        coopVihu.Image = vihun2Kuva;
415        coopVihu.MaximiElama = 100;
416        coopVihu.Elama = 100;
417        coopVihu.Tag = "coopVihu";
418        coopVihu.CanRotate = false;
419        Add(coopVihu);
420
421        FollowerBrain seuraajanAivot = new FollowerBrain(pelaaja, pelaaja2);
422        seuraajanAivot.Speed = 300;
423        seuraajanAivot.DistanceClose = 200; 
424        seuraajanAivot.StopWhenTargetClose = true;
425        coopVihu.Brain = seuraajanAivot;
426
427        coopVihu.Ase = new Cannon(20, 10);
428        coopVihu.Ase.Ammo.Value = int.MaxValue;
429        coopVihu.Ase.ProjectileCollision = AmmusOsui;
430        coopVihu.Add(coopVihu.Ase);
431
432       
433        Timer ampumisAjastin = new Timer();
434        ampumisAjastin.Interval = 0.5;
435        ampumisAjastin.Timeout += CoopVihuAmmu;
436        ampumisAjastin.Start();
437    }
438
439
440    void CoopVihuAmmu()
441    {
442        if (coopVihu.IsDestroyed) return;
443        if (coopVihu.Ase != null)
444        {
445            if (coopVihu.Velocity == Vector.Zero) return;
446            Vector suunta = (coopVihu.Velocity.Normalize());
447            coopVihu.Ase.Angle = suunta.Angle;
448        }
449
450        PhysicsObject ammus = coopVihu.Ase.Shoot();
451
452        if (ammus != null)
453        {
454            ammus.Size *= 0.9;
455            //ammus.Image = ...
456            //ammus.MaximumLifetime = TimeSpan.FromSeconds(2.0);
457        }
458    }
459 
460}
461
462
463
464
Note: See TracBrowser for help on using the repository browser.