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

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