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

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