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

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