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

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