source: 2013/23/NicoA/peli1/peli1/peli1/peli1.cs @ 4003

Revision 4003, 16.2 KB checked in by niisala, 8 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
9
10
11class Pelaaja : PhysicsObject
12{
13    DoubleMeter pelaajaElama;
14    public DoubleMeter PelaajaElama { get { return pelaajaElama; } }
15    public Pelaaja(double leveys, double korkeus)
16        : base(leveys, korkeus)
17    {
18        pelaajaElama = new DoubleMeter(100, 0, 100);
19        this.pelaajaXp = new IntMeter(0, 0, 100);
20    }
21
22    IntMeter pelaajaXp;
23    public IntMeter PelaajaXp { get { return this.pelaajaXp; } }
24}
25
26
27
28class Vihu : PhysicsObject
29{
30    private IntMeter elamaLaskuri = new IntMeter(30, 0, 30);
31    public IntMeter ElamaLaskuri { get { return elamaLaskuri; } }
32
33
34    public Vihu(double leveys, double korkeus)
35        : base(leveys, korkeus)
36    {
37
38    }
39}
40
41
42
43public class peli1 : PhysicsGame
44{
45    Image pelaajankuva = LoadImage("pelaaja1");
46    Image talokuva = LoadImage("talo");
47    Image taustakuva = LoadImage("maa");
48    Image kolikkokuva = LoadImage("kolikko");
49    Image palikkakuva = LoadImage("palikka");
50    Image miekkakuva = LoadImage("miekka");
51    Image ympyrakuva = LoadImage("ympyra");
52    Image elamakuva = LoadImage("elamat");
53    Image elamakuvat = LoadImage("elamat2");
54    Image metsakuva = LoadImage("metsä");
55    Image lattiakuva = LoadImage("lattia");
56    Image xpbar = LoadImage("xpbar");
57    Image xpbar1 = LoadImage("xpbar1");
58
59    private Image[] palikanliikkuminen = LoadImages("palikka", "palikka2", "palikka3");
60    private Image[] miekkaisku = LoadImages("miekka1", "miekka2", "miekka3", "miekka4", "miekka5", "miekka6", "miekka7", "miekka8", "miekka9", "miekka10");
61    private Image[] puuanim = LoadImages("puu1", "puu2", "puu3", "puu4", "puu5");
62
63    Vector aloituspaikka;
64    Pelaaja pelaaja1;
65    GameObject talo;
66    Inventory esineet;
67    DoubleMeter pelaaja1Elama;
68    DoubleMeter pelaaja1Xp;
69    AssaultRifle pelaajan1miekka;
70
71    public override void Begin()
72    {
73
74        LuoKentta2();
75
76        Camera.Follow(pelaaja1);
77        Camera.StayInLevel = true;
78
79        IsMouseVisible = true;
80
81        Keyboard.Listen(Key.Left, ButtonState.Down, LiikutaPelaajaa, null, new Vector(-50, 0));
82        Keyboard.Listen(Key.Right, ButtonState.Down, LiikutaPelaajaa, null, new Vector(50, 0));
83        Keyboard.Listen(Key.Up, ButtonState.Down, LiikutaPelaajaa, null, new Vector(0, 50));
84        Keyboard.Listen(Key.Down, ButtonState.Down, LiikutaPelaajaa, null, new Vector(0, -50));
85
86        Keyboard.Listen(Key.Left, ButtonState.Released, PysaytaPelaajaa, null, new Vector(0, 0));
87        Keyboard.Listen(Key.Right, ButtonState.Released, PysaytaPelaajaa, null, new Vector(0, 0));
88        Keyboard.Listen(Key.Up, ButtonState.Released, PysaytaPelaajaa, null, new Vector(0, 0));
89        Keyboard.Listen(Key.Down, ButtonState.Released, PysaytaPelaajaa, null, new Vector(0, 0));
90
91        Keyboard.Listen(Key.Left, ButtonState.Down, pelaajatahtaa, "", pelaajan1miekka, Angle.FromDegrees(180));
92        Keyboard.Listen(Key.Right, ButtonState.Down, pelaajatahtaa, "", pelaajan1miekka, Angle.FromDegrees(0));
93        Keyboard.Listen(Key.Up, ButtonState.Down, pelaajatahtaa, "", pelaajan1miekka, Angle.FromDegrees(90));
94        Keyboard.Listen(Key.Down, ButtonState.Down, pelaajatahtaa, "", pelaajan1miekka, Angle.FromDegrees(270));
95
96        Keyboard.Listen(Key.Space, ButtonState.Released, iskemiekalla, "iske", pelaajan1miekka);
97
98        Keyboard.Listen(Key.X, ButtonState.Pressed, ValikkoPause, "Pysäyttää pelin");
99
100        Level.CreateBorders();
101
102
103        pelaaja1Elama = new DoubleMeter(100);
104        pelaaja1Elama.MaxValue = 100;
105
106        ProgressBar pelaaja1ElamaPalkki = new ProgressBar(Screen.Width / 3, 20);
107        pelaaja1ElamaPalkki.X = Screen.Left + Screen.Width / 4;
108        pelaaja1ElamaPalkki.Y = Screen.Top - 40;
109        pelaaja1ElamaPalkki.BindTo(pelaaja1.PelaajaElama);
110        //pelaaja1ElamaPalkki.Color = Color.Red;
111        //pelaaja1ElamaPalkki.BarColor = Color.Green;
112        pelaaja1ElamaPalkki.Angle = Angle.FromDegrees(0);
113        pelaaja1ElamaPalkki.Image = LoadImage("elamat2");
114        pelaaja1ElamaPalkki.BarImage = LoadImage("elamat");
115        Add(pelaaja1ElamaPalkki);
116
117
118        ProgressBar pelaajaXp = new ProgressBar(Screen.Width / 3.5, 15);
119        pelaajaXp.X = Screen.Left + Screen.Width / 4;
120        pelaajaXp.Y = Screen.Top - 55;
121        pelaajaXp.BindTo(pelaaja1.PelaajaXp);
122        //pelaajaXp.Color = Color.Red;
123        //pelaajaXp.BarColor = Color.Green;
124        pelaajaXp.Angle = Angle.FromDegrees(0);
125        pelaajaXp.Image = LoadImage("xpbar1");
126        pelaajaXp.BarImage = LoadImage("xpbar");
127        Add(pelaajaXp);
128
129        Label pelaajaXpNaytto = new Label();
130        pelaajaXpNaytto.BindTo(pelaaja1.PelaajaXp);
131        pelaajaXpNaytto.Y = pelaajaXp.Y;
132        pelaajaXpNaytto.Right = pelaajaXp.Left - 10;
133        Add(pelaajaXpNaytto);
134
135        Widget kuva = new Widget(40, 40);
136        kuva.Color = Color.Red;
137        kuva.Image = LoadImage("ympyra");
138        kuva.X = Screen.Left + Screen.Width / 20;
139        kuva.Y = Screen.Top - 40;
140        Add(kuva);
141        Mouse.ListenOn(kuva, MouseButton.Left, ButtonState.Pressed,
142ValikkoPause, "Pysäyttää pelin");
143
144
145
146        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
147        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
148
149    }
150    void PainettiinValikonNappia(int valinta)
151    {
152        switch (valinta)
153        {
154            case 0:
155                Pause();
156                break;
157            case 1:
158                AvaaInventory();
159                break;
160            case 2:
161                Exit();
162                break;
163
164        }
165    }
166
167    void AvaaInventory()
168    {
169
170        esineet.IsVisible = true;
171    }
172
173    void ValikkoPause()
174    {
175        if (IsPaused)
176        {
177            SuljeInventory();
178        }
179        Pause();
180        MultiSelectWindow valikko = new MultiSelectWindow("Valikko", "jatka peliä", "Tavarat", "Lopeta peli");
181        valikko.ItemSelected += PainettiinValikonNappia;
182        valikko.Color = Color.Blue;
183        Add(valikko);
184
185    }
186
187    void LiikutaPelaajaa(Vector vectori)
188    {
189        pelaaja1.Hit(vectori);
190    }
191
192    void PysaytaPelaajaa(Vector vectori)
193    {
194        pelaaja1.Velocity = vectori;
195    }
196
197    void pelaajatahtaa(AssaultRifle rifle, Angle angle)
198    {
199        rifle.Angle = angle;
200    }
201
202
203    void LuoKentta()
204    {
205        TileMap kentta = TileMap.FromLevelAsset("Taso1");
206
207        kentta.SetTileMethod('P', LisaaPelaaja);
208        kentta.SetTileMethod('T', LisaaTalo);
209        kentta.SetTileMethod('K', LisaaKolikko);
210        kentta.SetTileMethod('S', LisaaVihollinen);
211        kentta.SetTileMethod('Y', LisaaYmpyra);
212        kentta.SetTileMethod('U', LisaaPuu);
213        kentta.SetTileMethod('M', LisaaMetsa);
214
215        kentta.Execute(25, 25);
216        //Level.CreateBorders();
217        Level.Background.Image = taustakuva;
218        Level.Background.TileToLevel();
219        Add(esineet);
220        esineet.IsVisible = false;
221        PushButton button = new PushButton("Close");
222        button.Clicked += SuljeInventory;
223        esineet.Add(button);
224        //Level.Background.CreateGradient(Color.Green, Color.SkyBlue);
225    }
226
227    void LuoKentta2()
228    {
229        TileMap kentta2 = TileMap.FromLevelAsset("Taso2");
230
231        kentta2.SetTileMethod('P', LisaaPelaaja);
232        kentta2.SetTileMethod('T', LisaaTalo);
233        kentta2.SetTileMethod('K', LisaaKolikko);
234        kentta2.SetTileMethod('S', LisaaVihollinen);
235        kentta2.SetTileMethod('Y', LisaaYmpyra);
236        kentta2.SetTileMethod('U', LisaaPuu);
237        kentta2.SetTileMethod('M', LisaaMetsa);
238
239        kentta2.Execute(25, 25);
240        //Level.CreateBorders();
241        Level.Background.Image = lattiakuva;
242        Level.Background.TileToLevel();
243        Add(esineet);
244        esineet.IsVisible = false;
245        PushButton button = new PushButton("Close");
246        button.Clicked += SuljeInventory;
247        esineet.Add(button);
248        //Level.Background.CreateGradient(Color.Green, Color.SkyBlue);
249    }
250
251
252    void SuljeInventory()
253    {
254        esineet.IsVisible = false;
255        Pause();
256    }
257
258    void LisaaPelaaja(Vector paikka, double x, double y)
259    {
260        aloituspaikka = paikka;
261        pelaaja1 = new Pelaaja(50, 70);
262        pelaaja1.Image = pelaajankuva;
263        pelaaja1.Shape = Shape.FromImage(pelaajankuva);
264        pelaaja1.CanRotate = false;
265        pelaaja1.Position = paikka;
266        pelaaja1.LinearDamping = 0.95;
267
268        AddCollisionHandler(pelaaja1, "kolikko", TormaaKolikkoon);
269
270
271        Add(pelaaja1);
272
273
274
275        //pelaajan1miekka = new PhysicsObject(100, 20);
276        //pelaajan1miekka.Angle = Angle.FromDegrees(0);
277        //pelaajan1miekka.Position = pelaaja1.Position;
278        //pelaajan1miekka.Shape = Shape.Diamond;
279        //pelaajan1miekka.CollisionIgnoreGroup = 2;
280        //pelaajan1miekka.Tag = "miekka";
281        //pelaajan1miekka.AngularDamping = 0.5;
282        //pelaaja1.CollisionIgnoreGroup = 2;
283        //AxleJoint liitos = new AxleJoint(pelaajan1miekka, pelaaja1);
284        //Add(liitos);
285        //Add(pelaajan1miekka);
286
287        pelaajan1miekka = new AssaultRifle(50, 50);
288        //pelaajan1miekka.Image = miekkakuva;
289
290        pelaajan1miekka.Animation = new Animation(miekkaisku);
291        //miekka.Animation = new Animation(miekkaisku);
292        pelaajan1miekka.Animation.FPS = 70;
293        pelaajan1miekka.Animation.Played += delegate { pelaajan1miekka.IsVisible = false; };
294
295        pelaaja1.Add(pelaajan1miekka);
296        AddCollisionHandler<IPhysicsObject, IPhysicsObject>(pelaaja1, "vihollinen", vihollinentormaa);
297        //pelaajan1miekka.X = 20.0;
298        pelaajan1miekka.IsVisible = false;
299
300        pelaaja1.PelaajaElama.LowerLimit += AloitaAlusta;
301
302        esineet = new Inventory();
303        //esineet.AddItem(new PhysicsObject(50, 50, Shape.Circle), pelaajankuva);
304        esineet.ItemSelected += EsineValittu;
305
306    }
307
308
309    void AloitaAlusta()
310    {
311        pelaaja1.Position = aloituspaikka;
312        pelaaja1.PelaajaElama.Reset();
313
314    }
315
316
317    void miekkaosui(IPhysicsObject kohde, IPhysicsObject miekka)
318    {
319        if (!(kohde is Vihu)) return;
320        Vihu vihu = (Vihu)kohde;
321        vihu.ElamaLaskuri.Value -= 5;
322        MessageDisplay.Add("au");
323        miekka.Angle = Angle.FromDegrees(0); miekka.AngularVelocity = 0;
324
325    }
326    //void IskuOsui(PhysicsObject isku, PhysicsObject kohde)
327    //{
328    //    isku.Destroy();
329    //   
330    //}
331
332
333    void iskemiekalla(AssaultRifle miekka)
334    {
335        //miekka.AngularVelocity = 500;
336        //Timer ajastin = new Timer();
337
338        //ajastin.Interval = 0.5;
339        //ajastin.Timeout += delegate { miekka.Angle = Angle.FromDegrees(0); miekka.AngularVelocity = 0;};
340        //ajastin.Start(1);
341        miekka.IsVisible = true;
342
343        miekka.Animation.Start(1);
344
345        PhysicsObject ammus = miekka.Shoot();
346        if (ammus == null) return;
347        ammus.Tag = "miekka";
348        ammus.IsVisible = false;
349        ammus.LifetimeLeft = TimeSpan.FromMilliseconds(100);
350
351    }
352
353    void LisaaVihollinen(Vector paikka, double x, double y)
354    {
355        Vihu vihollinen = new Vihu(40, 40);
356        vihollinen.Position = paikka;
357        vihollinen.Tag = "vihollinen";
358        vihollinen.Image = palikkakuva;
359
360        vihollinen.Mass = 1000;
361        Add(vihollinen);
362        vihollinen.CanRotate = false;
363
364        vihollinen.Animation = new Animation(palikanliikkuminen);
365        vihollinen.Animation.Start();
366        vihollinen.Animation.FPS = 7;
367
368        vihollinen.ElamaLaskuri.LowerLimit += delegate { vihollinenkuolee(vihollinen); };
369
370        AddCollisionHandler<IPhysicsObject, IPhysicsObject>(vihollinen, "miekka", miekkaosui);
371        RandomMoverBrain aivot = new RandomMoverBrain(100);
372        aivot.ChangeMovementSeconds = 2;
373        aivot.WanderRadius = 280;
374        vihollinen.Brain = aivot;
375    }
376
377    void vihollinenkuolee(Vihu vihollinen)
378    {
379        vihollinen.Destroy();
380        pelaaja1.PelaajaXp.Value += 5;
381        Timer.SingleShot(4, delegate { LisaaVihollinen(vihollinen.Position, vihollinen.Width, vihollinen.Height); });
382    }
383
384    void vihollinentormaa(IPhysicsObject pelaaja1, IPhysicsObject vihollinen)
385    {
386        if (!(vihollinen is Vihu))
387            return;
388        Vihu vihu = (Vihu)vihollinen;
389
390        //MessageDisplay.Add("Bump!");
391
392        if (!(pelaaja1 is Pelaaja))
393            return;
394        Pelaaja pelaaja = (Pelaaja)pelaaja1;
395        pelaaja.PelaajaElama.Value += -10;
396    }
397
398
399    void EsineValittu(PhysicsObject esine)
400    {
401        esineet.RemoveItem(esine);
402        esine.Destroy();
403        esineet.IsVisible = false;
404        Pause();
405    }
406
407    void LisaaTalo(Vector paikka, double x, double y)
408    {
409        talo = new GameObject(200, 200);
410        talo.Position = paikka;
411        talo.Image = talokuva;
412        Add(talo);
413
414    }
415
416    void LisaaKolikko(Vector paikka, double x, double y)
417    {
418        PhysicsObject kolikko = PhysicsObject.CreateStaticObject(50, 50);
419        kolikko.IgnoresCollisionResponse = true;
420        kolikko.Position = paikka;
421        kolikko.Image = kolikkokuva;
422        kolikko.Tag = "kolikko";
423        Add(kolikko);
424        kolikko.Shape = Shape.FromImage(kolikkokuva);
425
426    }
427
428    void LisaaPuu(Vector paikka, double x, double y)
429    {
430        GameObject puu = new GameObject(90, 150);
431        puu.Position = paikka;
432        //puu.Image = puukuva;
433        puu.Tag = "puu";
434        Add(puu, 1);
435        //puu.CollisionIgnoreGroup = 1;
436
437        PhysicsObject Puu = PhysicsObject.CreateStaticObject(20, 15);
438        Puu.Tag = "Puu";
439        Puu.X = puu.X;
440        Puu.Y = puu.Y - 70;
441        Puu.IsVisible = false;
442        Add(Puu);
443
444        puu.Animation = new Animation(puuanim);
445        puu.Animation.Start();
446        puu.Animation.FPS = 7;
447    }
448
449    void LisaaMetsa(Vector paikka, double x, double y)
450    {
451        PhysicsObject metsa = PhysicsObject.CreateStaticObject(50, 70);
452        metsa.Position = paikka;
453        metsa.Image = metsakuva;
454        metsa.Tag = "metsa";
455        Add(metsa);
456        metsa.CollisionIgnoreGroup = 1;
457
458    }
459
460    void TormaaKolikkoon(PhysicsObject pelaaja1, PhysicsObject kolikko)
461    {
462        kolikko.Destroy();
463    }
464
465    void LisaaYmpyra(Vector paikka, double x, double y)
466    {
467        PhysicsObject ympyra = PhysicsObject.CreateStaticObject(150, 70);
468        ympyra.IgnoresCollisionResponse = true;
469        ympyra.Position = paikka;
470        ympyra.Image = ympyrakuva;
471        Add(ympyra);
472        ympyra.Shape = Shape.FromImage(ympyrakuva);
473        Add(pelaaja1, 1);
474        Timer ajastin = new Timer();
475        ajastin.Start();
476        ajastin.Interval = 1;
477        ajastin.Timeout += delegate { HealaaJosYmpyrassa(ympyra); };
478    }
479
480    void HealaaJosYmpyrassa(PhysicsObject ympyra)
481    {
482        if (ympyra.IsInside(pelaaja1.Position))
483            pelaaja1.PelaajaElama.Value += 3;
484
485
486    }
487
488
489
490
491}
492
493class Inventory : Widget
494{
495    /// <summary>
496    /// Tapahtuma, kun esine on valittu.
497    /// </summary>
498    public event Action<PhysicsObject> ItemSelected;
499    public Dictionary<PhysicsObject, PushButton> items = new Dictionary<PhysicsObject, PushButton>();
500
501
502    /// <summary>
503    /// Luo uuden esinevalikon.
504    /// </summary>
505    public Inventory()
506        : base(new HorizontalLayout())
507    {
508    }
509
510    public void RemoveItem(PhysicsObject obj)
511    {
512        foreach (var item in items)
513        {
514            if (item.Key.Equals(obj))
515                base.Remove(item.Value);
516        }
517    }
518
519
520    /// <summary>
521    /// Lisää esineen.
522    /// </summary>
523    /// <param name="item">Lisättävä esine.</param>
524    /// <param name="kuva">Esineen ikoni, joka näkyy valikossa.</param>
525    public void AddItem(PhysicsObject item, Image kuva)
526    {
527        PushButton icon = new PushButton(kuva);
528        items.Add(item, icon);
529        Add(icon);
530        icon.Clicked += delegate() { SelectItem(item); };
531    }
532
533    void SelectItem(PhysicsObject item)
534    {
535        if (ItemSelected != null)
536        {
537            ItemSelected(item);
538        }
539    }
540}
541
542
543
Note: See TracBrowser for help on using the repository browser.