source: 2014/27/ArttuR/Peli_1/Peli_1/Peli_1/Peli_1/Peli_1.cs @ 10337

Revision 5423, 13.8 KB checked in by arosrinn, 7 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
9public class Peli_1 : PhysicsGame
10{
11    PeliHahmo pelaaja;
12    PeliVihu hirvio;
13    List<PeliVihu> vihut = new List<PeliVihu>();
14    PhysicsObject ammus;
15    PhysicsObject avain;
16    PhysicsObject paketti;
17    PhysicsObject luukku;
18    GameObject tahtain;
19    GameObject valo;
20    //Vector vektori;
21    Vector suunta;
22
23    int pMaxMaara = 200;
24
25    AssaultRifle pelaajanAse;
26
27    Image rahadysKuva = LoadImage("rajahdysKuva");
28    Image luukunKuva = LoadImage("Lattialuukku");
29    Image valoKuva = LoadImage("ValoKuva");
30    Image paketinKuva = LoadImage("paketti");
31    Image taustaKuva = LoadImage("AlkuTausta");
32    Image avaimenKuva = LoadImage("Avain");
33    Image aseenKuva = LoadImage("ase_1");
34    Image hirvionKuva = LoadImage("Hirvio");
35    Image tahtainKuva = LoadImage("Tahtain");
36    Image seinaKuva = LoadImage("Seina_1");
37    Image pelaajanKuva = LoadImage("Pelaaja");
38    Image lattiaKuva = LoadImage("Lattia_1");
39
40    ProgressBar elamaPalkki;
41    IntMeter ammusMittari;
42    DoubleMeter elamaLaskuri;
43
44    public override void Begin()
45    {
46        LuoAlkuvalikko();
47        IsFullScreen = true;
48    }
49
50    void AloitaPeli()
51    {
52        ClearAll();
53        LuoKentta();
54    }
55
56    void LuoKentta()
57    {
58
59        LuoPelaaja(-1550, 150);
60        LuoPaketti(0, 1000);
61        LuoPaketti(-1400, 175);
62        LuoPaketti(0, -600);
63        LuoHirvio(500, 0);
64        LuoHirvio(-1000, 150);
65        LuoHirvio(-500, 500);
66        LuoHirvio(0, 750);
67        LuoHirvio (-300, 1000);
68        LuoHirvio(0, -800);
69        LuoHirvio(-500, -1200);
70        LuoHirvio(900, -1000);
71        LuoHirvio(1350, -1300);
72        LuoHirvio(-1000, -500);
73        LuoHirvio(-900, -1500);
74        LuoHirvio(1500, -1300);
75        LuoHirvio(900, -1300);
76        LuoAvain(1500, -1200);
77        //LuoAvain(-1500, 150);
78        LuoAmmusMittari();
79        LuoElamaLaskuri();
80        LuoValo();
81        LisaaOhjaimet();
82        Camera.Follow(pelaaja);
83        Camera.Zoom(2.3);
84        LuoElamaLaskuri();
85        ColorTileMap ruudut = ColorTileMap.FromLevelAsset("Taso_1");
86
87        Mouse.IsCursorVisible = false;
88
89        Level.Background.Color = Color.Black;
90       
91        //ruudut.SetTileMethod(Color.FromHexCode("00FF00"), LuoPelaaja);
92        ruudut.SetTileMethod(Color.Black, LuoSeina);
93        //ruudut.SetTileMethod(Color.Yellow, LuoAvain);
94        //ruudut.SetTileMethod(Color.Red, LuoVihu);
95        //ruudut.SetTileMethod(Color.Brown, LuoOvi);
96        ruudut.SetTileMethod(Color.White, LuoLattia);
97        ruudut.Execute(40, 40);
98        MessageDisplay.Add("Etsi avain!");
99    }
100
101    void LuoAmmusMittari()
102    {
103        ammusMittari = new IntMeter(pelaajanAse.Ammo.Value);
104
105        Label ammusNaytto = new Label();
106        ammusNaytto.X = Screen.Right - 100;
107        ammusNaytto.Y = Screen.Top - 100;
108        ammusNaytto.Title = "Ammuksia";
109        ammusNaytto.TextColor = Color.White;
110        ammusNaytto.Color = Color.Black;
111
112        ammusNaytto.BindTo(ammusMittari);
113        Add(ammusNaytto);
114    }
115
116    void LuoElamaLaskuri()
117    {
118        elamaLaskuri = new DoubleMeter(3);
119        elamaLaskuri.MaxValue = 3;
120        elamaLaskuri.LowerLimit += ElamaLoppui;
121
122        elamaPalkki = new ProgressBar(pelaaja.Width * 1.7, pelaaja.Height / 5);
123        elamaPalkki.X = 0;
124        elamaPalkki.Y = pelaaja.Height * 1.5;
125        elamaPalkki.Color = Color.Black;
126        elamaPalkki.BindTo(elamaLaskuri);
127        //Timer ajastin = new Timer();
128        //ajastin.Interval = 0.1;
129        //ajastin.Timeout += SiirraElamaPalkki;
130        //ajastin.Start();
131        Add(elamaPalkki);
132    }
133
134    void SiirraElamaPalkki()
135    {
136        // elamaPalkki.Position = pelaaja.Position + new Vector(pelaaja.Height/2);
137    }
138
139    void ElamaLoppui()
140    {
141        MessageDisplay.Add("Elämät loppuivat.");
142        Kuolema();
143    }
144
145    void Kuolema()
146    {
147        Timer kuolemaAjastin = new Timer();
148        kuolemaAjastin.Interval = 2.5;
149        kuolemaAjastin.Timeout += LuoKuolemaValikko;
150        kuolemaAjastin.Start();
151
152        ExplosionSystem rajahdys = new ExplosionSystem(LoadImage("rajahdysKuva"), pMaxMaara);
153        Add(rajahdys);
154
155        double x = pelaaja.X;
156        double y = pelaaja.Y;
157        int pMaara = 50;
158
159        rajahdys.AddEffect(x, y, pMaara);
160    }
161
162    void AmmusOsui(PhysicsObject ammus, PhysicsObject seina)
163    {
164        if(seina.Tag.Equals("seina")) ammus.Destroy();
165    } 
166
167    void HirvioAmmuttiin(PhysicsObject hirvio, PhysicsObject ammus)
168    {
169        if (ammus.Tag.Equals("ammus"))
170        {
171            //MessageDisplay.Add("Hirviota ammuttiin!");
172            ((PeliVihu)hirvio).j.Value -= 1;
173            ammus.Destroy();
174        }
175    }
176
177    void PelaajaTormasi(PhysicsObject pelaaja, PhysicsObject hirvio)
178    {
179        elamaLaskuri.Value -= 1;
180
181        Explosion rajahdys = new Explosion(50);
182        rajahdys.Position = pelaaja.Position;
183        rajahdys.Speed = 500.0;
184        rajahdys.Force = 15;
185        rajahdys.IsVisible = false;
186        Add(rajahdys);
187       
188        //MessageDisplay.Add("Pelaaja törmäsi!");
189        ((PeliHahmo)pelaaja).Elamat--;
190        if (((PeliHahmo)pelaaja).Elamat <= 0)
191        {
192            pelaaja.Destroy();
193            MessageDisplay.Add("Kuolit!");
194        }
195    }
196
197    void PoimiPaketti(PhysicsObject pelaaja, PhysicsObject paketti)
198    {
199        if (paketti.Tag.Equals("paketti"))
200        {
201            pelaajanAse.Ammo.Value += 15;
202            ammusMittari.Value += 15;
203            paketti.Destroy();
204        }
205    }
206
207    void PoimiAvain(PhysicsObject pelaaja, PhysicsObject avain)
208    {
209        if (avain.Tag.Equals("avain"))
210        {
211            MessageDisplay.Add("Löydä vielä lattialuukku päästäksesi pelin läpi!");
212            luukku = new PhysicsObject(40, 40);
213            luukku.Image = luukunKuva;
214            luukku.Tag = "luukku";
215            luukku.X = 1350;
216            luukku.Y = 1200;
217            Add(luukku);
218            avain.Destroy();
219        }
220    }
221
222    void PelaajaTormaaLuukkuun(PhysicsObject pelaaja, PhysicsObject luukku)
223    {
224        if (luukku.Tag.Equals("luukku"))
225        {
226            LoppuValikko();
227        }
228    }
229
230
231    void LisaaOhjaimet()
232    {
233        Keyboard.Listen(Key.Escape, ButtonState.Pressed, LuoPauseValikko, null);
234        Keyboard.Listen(Key.A, ButtonState.Down, LiikutaPelaajaa, null, new Vector(-4000, 0));
235        Keyboard.Listen(Key.D, ButtonState.Down, LiikutaPelaajaa, null, new Vector(4000, 0));
236        Keyboard.Listen(Key.W, ButtonState.Down, LiikutaPelaajaa, null, new Vector(0, 4000));
237        Keyboard.Listen(Key.S, ButtonState.Down, LiikutaPelaajaa, null, new Vector(0, -4000));
238        Mouse.Listen(MouseButton.Left, ButtonState.Down , AmmuAseella, "Ammu", pelaajanAse);
239    }
240
241    void LuoPauseValikko()
242    {
243        MultiSelectWindow pauseValikko = new MultiSelectWindow("Pause", "Jatka", "Palaa päävalikkoon", "Lopeta peli");
244        pauseValikko.Color = Color.Black;
245        pauseValikko.AddItemHandler(1, PalaaPaavalikkoon);
246        pauseValikko.AddItemHandler(2, Exit);
247        Add(pauseValikko);
248    }
249
250    void LiikutaPelaajaa(Vector vektori)
251    {
252        pelaaja.Push(vektori);
253    }
254
255    void LuoPelaaja(double x, double y)
256    {
257        pelaaja = new PeliHahmo(20, 20, 3);
258        pelaaja.Shape = Shape.Circle;
259
260        //pelaaja.Position = paikka;
261        pelaaja.X = x;
262        pelaaja.Y = y;
263        pelaaja.CollisionIgnoreGroup = 1;
264        pelaaja.LinearDamping = 0.5;
265        pelaaja.Image = pelaajanKuva;
266        pelaaja.CanRotate = false;
267        pelaaja.RotateImage = true;
268       
269        Add(pelaaja);
270
271        pelaajanAse = new AssaultRifle(30, 10);
272        pelaajanAse.Ammo.Value = 15;
273        pelaajanAse.FireRate = 3;
274        pelaajanAse.Image = aseenKuva;
275        pelaajanAse.X = 5;
276        pelaajanAse.Y = 10;
277        pelaaja.Add(pelaajanAse);
278        pelaajanAse.Layer = pelaaja.Layer;
279
280        LuoTahtain();
281
282        //Mouse.ListenMovement(1.0, HiiriLiikkui, "");
283        Timer hiiriAjastin = new Timer();
284        hiiriAjastin.Interval = 0.02;
285        hiiriAjastin.Timeout += HiiriLiikkui;
286        hiiriAjastin.Start();
287
288        AddCollisionHandler(pelaaja, "luukku", PelaajaTormaaLuukkuun);
289        AddCollisionHandler(pelaaja, "paketti", PoimiPaketti);
290        AddCollisionHandler(pelaaja, "hirvio", PelaajaTormasi);
291    }
292
293    void LuoPaketti(double x, double y)
294    {
295        paketti = new PhysicsObject(40, 20);
296        paketti.X = x;
297        paketti.Y = y;
298
299        paketti.Image = paketinKuva;
300
301        paketti.Tag = "paketti";
302       
303        Add(paketti, 2);
304    }
305
306
307    void HiiriLiikkui()
308    {
309        suunta = (Mouse.PositionOnWorld - pelaaja.AbsolutePosition).Normalize();
310        pelaaja.Angle = suunta.Angle;
311        tahtain.AbsolutePosition = Mouse.PositionOnWorld;
312    }
313
314
315    void LuoAvain(double x, double y)
316    {
317        avain = new PhysicsObject(20, 20);
318        avain.Image = avaimenKuva;
319        AddCollisionHandler(pelaaja, "avain", PoimiAvain);
320        avain.X = x;
321        avain.Y = y;
322        avain.Tag = "avain";
323        Add(avain);
324    }
325
326
327    void LuoSeina(Vector paikka, double leveys, double korkeus)
328    {
329        PhysicsObject seina = PhysicsObject.CreateStaticObject(leveys, korkeus);
330        seina.Position = paikka;
331        seina.Color = Color.Black;
332        //seina.Image = seinaKuva;
333        seina.CollisionIgnoreGroup = 2;
334        seina.Tag = "seina";
335        Add(seina);
336    }
337
338
339    void LuoLattia(Vector paikka, double leveys, double korkeus)
340    {
341        GameObject lattia = new GameObject(40, 40);
342        lattia.Position = paikka;
343        lattia.Image = lattiaKuva;
344        Add(lattia,-3);
345    }
346
347    void LuoTahtain()
348    {
349        tahtain = new GameObject (20, 20);
350        tahtain.Image = tahtainKuva;
351        //tahtain.IgnoresPhysicsLogics = true;
352        Add(tahtain, 3);
353    }
354
355    void LuoHirvio(double x, double y)
356    {
357        hirvio = new PeliVihu(20, 20);
358        hirvio.LinearDamping = 0.5;
359        hirvio.Image = hirvionKuva;
360        hirvio.CanRotate = false;
361        hirvio.X = x;
362        hirvio.Y = y;
363        hirvio.Tag = "hirvio";
364        Add(hirvio, 2);
365
366        vihut.Add(hirvio);
367
368        LabyrinthWandererBrain labyrinttiAivot = new LabyrinthWandererBrain(40);
369        labyrinttiAivot.Speed = 100.0;
370        labyrinttiAivot.LabyrinthWallTag = "seina";
371
372        FollowerBrain seuraajanAivot = new FollowerBrain(pelaaja);
373        seuraajanAivot.Speed = 350;
374        seuraajanAivot.DistanceFar = 400;
375        seuraajanAivot.FarBrain = labyrinttiAivot;
376        seuraajanAivot.TurnWhileMoving = true;
377        hirvio.Brain = seuraajanAivot;
378
379        AddCollisionHandler(hirvio, "ammus", HirvioAmmuttiin);
380    }
381
382    void AmmuAseella(AssaultRifle ase)
383    {
384        ammus = ase.Shoot();
385       
386        if (ammus != null)
387        {
388            ammusMittari.Value--;
389            ammus.Tag = "ammus";
390            AddCollisionHandler(ammus, "seina", AmmusOsui);
391        }
392    }
393
394    void LuoAlkuvalikko()
395    {
396        ClearAll();
397
398        MultiSelectWindow alkuValikko = new MultiSelectWindow("Peli_1", "Aloita peli", "Lopeta");
399        Add(alkuValikko);
400
401        Level.Background.Image = taustaKuva;
402        Level.Background.Color = Color.Black;
403
404        alkuValikko.AddItemHandler(0, ValitseOminaisuus);
405        alkuValikko.AddItemHandler(1, Exit);
406        alkuValikko.Color = Color.Black;
407    }
408
409
410    void LoppuValikko()
411    {
412        MultiSelectWindow loppuValikko = new MultiSelectWindow("LÄPÄISIT PELIN", "Palaa päävalikkoon", "Lopeta");
413        Add(loppuValikko);
414
415        loppuValikko.AddItemHandler(0, PalaaPaavalikkoon);
416        loppuValikko.AddItemHandler(1, Exit);
417        loppuValikko.Color = Color.Black;
418    }
419
420    void PalaaPaavalikkoon()
421    {
422        LuoAlkuvalikko();
423    }
424
425
426    void ValitseOminaisuus()
427    {
428        MultiSelectWindow ominaisuusValinta = new MultiSelectWindow("Valitse ominaisuus", "+ tulinopeus", "+ damage", "+ health", "Ei mitään");
429        Add(ominaisuusValinta);
430
431        //Level.Background.Image = taustaKuva;
432        //Level.Background.FitToLevel();
433
434        ominaisuusValinta.Color = Color.Black;
435
436        ominaisuusValinta.AddItemHandler(0, LisaaTulinopeus);
437        ominaisuusValinta.AddItemHandler(1, LisaaDamage);
438        ominaisuusValinta.AddItemHandler(2, LisaaHealth);
439        ominaisuusValinta.AddItemHandler(3, EiMitaan);
440    }
441
442    void EiMitaan()
443    {
444        AloitaPeli();
445    }
446
447    void LisaaHealth()
448    {
449        AloitaPeli();
450        pelaaja.Elamat = 6;
451        elamaLaskuri.MaxValue = 6;
452        elamaLaskuri.Value = 6;
453    }
454
455    void LisaaDamage()
456    {
457        AloitaPeli();
458
459        foreach (PeliVihu vihu in vihut)
460        {
461            vihu.MuutaElamia(4);
462        }
463    }
464
465    void LisaaTulinopeus()
466    {
467        AloitaPeli();
468        pelaajanAse.FireRate = 8;
469    }
470
471    void LuoKuolemaValikko()
472    {
473        MultiSelectWindow kuolemaValikko = new MultiSelectWindow ("Kuolit...", "Palaa alkuvalikkoon", "Lopeta");
474        Add(kuolemaValikko);
475
476        kuolemaValikko.Color = Color.Black;
477
478        kuolemaValikko.AddItemHandler(0, LuoAlkuvalikko);
479        kuolemaValikko.AddItemHandler(1, Exit);
480    }
481
482    void LuoValo()
483    {
484        valo = new GameObject(Screen.Width, Screen.Height);
485        valo.Image = valoKuva;
486        Add(valo, 2);
487    }
488
489    protected override void Update(Time time)
490    {
491        if (valo != null && pelaaja != null)
492        {
493            valo.Position = pelaaja.Position;
494        }
495        base.Update(time);
496    }
497}
498
Note: See TracBrowser for help on using the repository browser.