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

Revision 5305, 9.3 KB checked in by arosrinn, 6 years ago (diff)

d

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