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

Revision 3974, 11.3 KB checked in by niisala, 6 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 pelaaja1Elama;
14    public DoubleMeter PelaajaElama { get { return pelaaja1Elama; } }
15 public Pelaaja(double leveys, double korkeus)
16     : base(leveys, korkeus)
17 {
18     pelaaja1Elama = new DoubleMeter(100, 0, 100);
19 }
20}
21
22
23
24class Vihu : PhysicsObject
25{
26    private IntMeter elamaLaskuri = new IntMeter(30, 0, 30);
27    public IntMeter ElamaLaskuri { get { return elamaLaskuri; } }
28
29
30    public Vihu(double leveys, double korkeus)
31        : base(leveys, korkeus)
32    {
33       
34    }
35}
36
37
38
39public class peli1 : PhysicsGame
40{
41    Image pelaajankuva = LoadImage("pelaaja");
42    Image talokuva = LoadImage("talo");
43    Image taustakuva = LoadImage("maa");
44    Image kolikkokuva = LoadImage("kolikko");
45    Image palikkakuva = LoadImage("palikka");
46    Image miekkakuva = LoadImage("miekka");
47    Image ympyrakuva= LoadImage("ympyra");
48
49    private Image[] palikanliikkuminen = LoadImages("palikka", "palikka2", "palikka3");
50
51    Pelaaja pelaaja1;
52    GameObject talo;
53    PhysicsObject kolikko;
54    PhysicsObject ympyra;
55    Inventory esineet;
56    DoubleMeter pelaaja1Elama;
57    AssaultRifle pelaajan1miekka;
58
59    public override void Begin()
60    {
61
62        LuoKentta();
63
64        Camera.Follow(pelaaja1);
65        Camera.StayInLevel = true;
66
67        IsMouseVisible = true;
68
69        Keyboard.Listen(Key.Left, ButtonState.Down, LiikutaPelaajaa, null, new Vector(-50, 0));
70        Keyboard.Listen(Key.Right, ButtonState.Down, LiikutaPelaajaa, null, new Vector(50, 0));
71        Keyboard.Listen(Key.Up, ButtonState.Down, LiikutaPelaajaa, null, new Vector(0, 50));
72        Keyboard.Listen(Key.Down, ButtonState.Down, LiikutaPelaajaa, null, new Vector(0, -50));
73
74        Keyboard.Listen(Key.Left, ButtonState.Released, PysaytaPelaajaa, null, new Vector(0, 0));
75        Keyboard.Listen(Key.Right, ButtonState.Released, PysaytaPelaajaa, null, new Vector(0, 0));
76        Keyboard.Listen(Key.Up, ButtonState.Released, PysaytaPelaajaa, null, new Vector(0, 0));
77        Keyboard.Listen(Key.Down, ButtonState.Released, PysaytaPelaajaa, null, new Vector(0, 0));
78
79        Keyboard.Listen(Key.Left, ButtonState.Down, pelaajatahtaa, "", pelaajan1miekka, Angle.FromDegrees(180));
80        Keyboard.Listen(Key.Right, ButtonState.Down, pelaajatahtaa, "", pelaajan1miekka, Angle.FromDegrees(0));
81        Keyboard.Listen(Key.Up, ButtonState.Down, pelaajatahtaa, "", pelaajan1miekka, Angle.FromDegrees(90));
82        Keyboard.Listen(Key.Down, ButtonState.Down, pelaajatahtaa, "", pelaajan1miekka, Angle.FromDegrees(270));
83
84        Keyboard.Listen(Key.Space, ButtonState.Released, iskemiekalla, "iske", pelaajan1miekka);
85
86        Keyboard.Listen(Key.X, ButtonState.Pressed, ValikkoPause, "Pysäyttää pelin");
87
88         Level.CreateBorders();
89
90
91        pelaaja1Elama = new DoubleMeter(100);
92        pelaaja1Elama.MaxValue = 100;
93
94        BarGauge pelaaja1ElamaPalkki = new BarGauge(20, Screen.Width / 3);
95        pelaaja1ElamaPalkki.X = Screen.Left + Screen.Width / 4;
96        pelaaja1ElamaPalkki.Y = Screen.Top - 40;
97        pelaaja1ElamaPalkki.Angle = Angle.FromDegrees(90);
98        pelaaja1ElamaPalkki.BindTo(pelaaja1.PelaajaElama);
99        pelaaja1ElamaPalkki.Color = Color.Red;
100        pelaaja1ElamaPalkki.BarColor = Color.Green;
101        Add(pelaaja1ElamaPalkki);
102
103       
104
105
106
107
108        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
109        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
110
111    }
112    void PainettiinValikonNappia(int valinta)
113    {
114        switch (valinta)
115        {
116            case 0:
117                Pause();
118                break;
119            case 1:
120                AvaaInventory();
121                break;
122            case 2:
123                Exit();
124                break;
125
126        }
127    }
128
129    void AvaaInventory()
130    {
131
132        esineet.IsVisible = true;
133    }
134
135    void ValikkoPause()
136    {
137        Pause();
138        MultiSelectWindow valikko = new MultiSelectWindow("Valikko", "jatka peliä", "Tavarat", "Lopeta peli");
139        valikko.ItemSelected += PainettiinValikonNappia;
140        valikko.Color = Color.Blue;
141        Add(valikko);
142
143    }
144
145    void LiikutaPelaajaa(Vector vectori)
146    {
147        pelaaja1.Hit(vectori);
148    }
149
150    void PysaytaPelaajaa(Vector vectori)
151    {
152        pelaaja1.Velocity = vectori;
153    }
154
155    void pelaajatahtaa(AssaultRifle rifle, Angle angle)
156    {
157        rifle.Angle = angle;
158    }
159
160
161    void LuoKentta()
162    {
163        TileMap kentta = TileMap.FromLevelAsset("Taso1");
164
165        kentta.SetTileMethod('P', LisaaPelaaja);
166        kentta.SetTileMethod('T', LisaaTalo);
167        kentta.SetTileMethod('K', LisaaKolikko);
168        kentta.SetTileMethod('S', LisaaVihollinen);
169        kentta.SetTileMethod('Y', LisaaYmpyra);
170
171        kentta.Execute(25, 25);
172        //Level.CreateBorders();
173        Level.Background.Image = taustakuva;
174        Level.Background.TileToLevel();
175        Add(esineet);
176        esineet.IsVisible = false;
177        PushButton button = new PushButton("Close");
178        button.Clicked += SuljeInventory;
179        esineet.Add(button);
180        //Level.Background.CreateGradient(Color.Green, Color.SkyBlue);
181    }
182
183
184    void SuljeInventory()
185    {
186        esineet.IsVisible = false;
187        Pause();
188    }
189
190    void LisaaPelaaja(Vector paikka, double x, double y)
191    {
192        pelaaja1 = new Pelaaja(75, 75);
193        pelaaja1.Image = pelaajankuva;
194        pelaaja1.Shape = Shape.FromImage(pelaajankuva);
195        pelaaja1.CanRotate = false;
196        pelaaja1.Position = paikka;
197        pelaaja1.LinearDamping = 0.95;
198
199        AddCollisionHandler(pelaaja1, "kolikko", TormaaKolikkoon);
200        AddCollisionHandler(pelaaja1, "ympyra", TormaaYmpyraan);
201
202        Add(pelaaja1);
203
204        //pelaajan1miekka = new PhysicsObject(100, 20);
205        //pelaajan1miekka.Angle = Angle.FromDegrees(0);
206        //pelaajan1miekka.Position = pelaaja1.Position;
207        //pelaajan1miekka.Shape = Shape.Diamond;
208        //pelaajan1miekka.CollisionIgnoreGroup = 2;
209        //pelaajan1miekka.Tag = "miekka";
210        //pelaajan1miekka.AngularDamping = 0.5;
211        //pelaaja1.CollisionIgnoreGroup = 2;
212        //AxleJoint liitos = new AxleJoint(pelaajan1miekka, pelaaja1);
213        //Add(liitos);
214        //Add(pelaajan1miekka);
215
216        pelaajan1miekka = new AssaultRifle(60, 5);
217        pelaajan1miekka.Image = miekkakuva;
218        pelaaja1.Add(pelaajan1miekka);
219        Add(pelaajan1miekka);
220        AddCollisionHandler<IPhysicsObject, IPhysicsObject>(pelaaja1, "vihollinen", vihollinentormaa);
221
222        esineet = new Inventory();
223        //esineet.AddItem(new PhysicsObject(50, 50, Shape.Circle), pelaajankuva);
224        esineet.ItemSelected += EsineValittu;
225
226       
227
228    }
229
230    void miekkaosui(IPhysicsObject kohde, IPhysicsObject miekka)
231    {
232        if (!(kohde is Vihu)) return;
233        Vihu vihu = (Vihu)kohde;
234        vihu.ElamaLaskuri.Value -= 5;
235        MessageDisplay.Add("au");
236        miekka.Angle = Angle.FromDegrees(0); miekka.AngularVelocity = 0;
237    }
238    //void IskuOsui(PhysicsObject isku, PhysicsObject kohde)
239    //{
240    //    isku.Destroy();
241    //   
242    //}
243
244
245    void iskemiekalla(AssaultRifle miekka)
246       {
247        //miekka.AngularVelocity = 500;
248        //Timer ajastin = new Timer();
249 
250        //ajastin.Interval = 0.5;
251        //ajastin.Timeout += delegate { miekka.Angle = Angle.FromDegrees(0); miekka.AngularVelocity = 0;};
252        //ajastin.Start(1);
253        PhysicsObject ammus = miekka.Shoot();
254        if (ammus == null) return;
255        ammus.Tag = "miekka";
256        ammus.IsVisible = false;
257        ammus.LifetimeLeft = TimeSpan.FromMilliseconds(100);
258    }
259
260    void LisaaVihollinen(Vector paikka, double x, double y)
261    {
262        Vihu vihollinen = new Vihu(60, 60);
263        vihollinen.Position = paikka;
264        vihollinen.Tag = "vihollinen";
265        vihollinen.Image = palikkakuva;
266
267        vihollinen.Mass = 1000;
268        Add(vihollinen);
269        vihollinen.CanRotate = false;
270        vihollinen.Animation = new Animation(palikanliikkuminen);
271        vihollinen.Animation.Start();
272        vihollinen.Animation.FPS = 7;
273        vihollinen.ElamaLaskuri.LowerLimit += delegate { vihollinen.Destroy(); };
274
275        AddCollisionHandler<IPhysicsObject, IPhysicsObject>(vihollinen, "miekka", miekkaosui);
276        RandomMoverBrain aivot = new RandomMoverBrain(100);
277        aivot.ChangeMovementSeconds = 2;
278        aivot.WanderRadius = 100;
279        vihollinen.Brain = aivot;
280
281       
282    }
283
284    void vihollinentormaa(IPhysicsObject pelaaja1, IPhysicsObject vihollinen)
285    {
286        if (!(vihollinen is Vihu))
287            return;
288        Vihu vihu = (Vihu)vihollinen;
289
290        MessageDisplay.Add("Bump!");
291    }
292
293
294    void EsineValittu(PhysicsObject esine)
295    {
296        esineet.RemoveItem(esine);
297        esine.Destroy();
298        esineet.IsVisible = false;
299        Pause();
300    }
301
302    void LisaaTalo(Vector paikka, double x, double y)
303    {
304        talo = new GameObject(200, 200);
305        talo.Position = paikka;
306        talo.Image = talokuva;
307        Add(talo);
308
309    }
310
311    void LisaaKolikko(Vector paikka, double x, double y)
312    {
313        kolikko = PhysicsObject.CreateStaticObject(50, 50);
314        kolikko.IgnoresCollisionResponse = true;
315        kolikko.Position = paikka;
316        kolikko.Image = kolikkokuva;
317        Add(kolikko);
318        kolikko.Shape = Shape.FromImage(kolikkokuva);
319
320    }
321
322    void TormaaKolikkoon(PhysicsObject hahmo, PhysicsObject kolikko)
323    {
324        kolikko.Destroy();
325    }
326
327    void LisaaYmpyra(Vector paikka, double x, double y)
328    {
329        ympyra = PhysicsObject.CreateStaticObject(90, 70);
330        ympyra.IgnoresCollisionResponse = true;
331        ympyra.Position = paikka;
332        ympyra.Image = ympyrakuva;
333        Add(ympyra);
334        ympyra.Shape = Shape.FromImage(kolikkokuva);
335
336    }
337
338    void TormaaYmpyraan(PhysicsObject hahmo, PhysicsObject ympyra)
339    {
340       
341    }
342   
343
344
345
346}
347
348class Inventory : Widget
349{
350    /// <summary>
351    /// Tapahtuma, kun esine on valittu.
352    /// </summary>
353    public event Action<PhysicsObject> ItemSelected;
354    public Dictionary<PhysicsObject, PushButton> items = new Dictionary<PhysicsObject, PushButton>();
355
356
357    /// <summary>
358    /// Luo uuden esinevalikon.
359    /// </summary>
360    public Inventory()
361        : base(new HorizontalLayout())
362    {
363    }
364
365    public void RemoveItem(PhysicsObject obj)
366    {
367        foreach (var item in items)
368        {
369            if (item.Key.Equals(obj))
370                base.Remove(item.Value);
371        }
372    }
373
374
375    /// <summary>
376    /// Lisää esineen.
377    /// </summary>
378    /// <param name="item">Lisättävä esine.</param>
379    /// <param name="kuva">Esineen ikoni, joka näkyy valikossa.</param>
380    public void AddItem(PhysicsObject item, Image kuva)
381    {
382        PushButton icon = new PushButton(kuva);
383        items.Add(item, icon);
384        Add(icon);
385        icon.Clicked += delegate() { SelectItem(item); };
386    }
387
388    void SelectItem(PhysicsObject item)
389    {
390        if (ItemSelected != null)
391        {
392            ItemSelected(item);
393        }
394    }
395}
396
397
398
Note: See TracBrowser for help on using the repository browser.