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

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