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

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