source: 2014/24/PietuR/Ukkelipeli/Ukkelipeli/Ukkelipeli/Ukkelipeli.cs @ 5020

Revision 5020, 12.4 KB checked in by pimaeeru, 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 Ukkelipeli : PhysicsGame
10{
11    bool voikoHypata = true;
12    PhysicsObject Pallo = new PhysicsObject(30, 30);
13
14    PhysicsObject Ukkeli;
15
16    PhysicsObject Miekka;
17
18    Image Tikarinkuva = LoadImage("Tikari");
19    Image Tikarin2kuva = LoadImage("Tikari2");
20    Image Magickuva = LoadImage("Magic");
21
22    FollowerBrain seuraajanAivot;
23    RandomMoverBrain satunnaisAivot;
24
25    AxleJoint liitos;
26
27    IntMeter pisteLaskuri;
28
29    SoundEffect Aani;
30
31    public override void Begin()
32    {
33
34        Image Ukkelinkuva = LoadImage("Ukkeli");
35        Image Miekankuva = LoadImage("Miekka");
36        Image Tahtaimenkuva = LoadImage("Tahtain");
37        Image Luodinkuva = LoadImage("Luoti");
38        Image Paa1 = LoadImage("Paa1");
39        Image Paa2 = LoadImage("Paa2");
40        Image Keho1 = LoadImage("Keho1");
41        Image Keho2 = LoadImage("Keho2");
42
43
44       
45
46        TileMap ruudut = TileMap.FromLevelAsset("Kentta");
47        ruudut.SetTileMethod('P', LuoUkkeli);
48        ruudut.SetTileMethod('A', LuoPalikka, "");
49        ruudut.SetTileMethod('L', LuoPalikka, "lattia");
50        ruudut.Execute();
51
52        //MediaPlayer.PlayFromFile("Hakunetsu.mp3");
53        MediaPlayer.Play("Hakunetsu");
54
55        Camera.ZoomToLevel();
56
57        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
58        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
59        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
60
61        LuoPistelaskuri();
62
63        Level.Background.CreateGradient(RandomGen.NextColor(), RandomGen.NextColor());
64
65        AddCollisionHandler(Ukkeli, "lattia", delegate(PhysicsObject tormaaja, PhysicsObject kohde) { voikoHypata = true; });
66
67
68
69        Gravity = new Vector(0, -2000);
70
71        Keyboard.Listen(Key.A, ButtonState.Down,
72        LiikutaKohdetta, null, new Vector(-10000, 0), Ukkeli);
73        Keyboard.Listen(Key.D, ButtonState.Down,
74        LiikutaKohdetta, null, new Vector(10000, 0), Ukkeli);
75        Keyboard.Listen(Key.S, ButtonState.Down,
76        LiikutaKohdetta, null, new Vector(0, -10000), Ukkeli);
77
78        Keyboard.Listen(Key.W, ButtonState.Pressed,
79        Hyppää, null, new Vector(0, 7500), Ukkeli);
80
81        Keyboard.Listen(Key.Enter, ButtonState.Pressed, AloitaAlusta, null);
82
83        Mouse.Listen(MouseButton.Left, ButtonState.Pressed, delegate { 
84            seuraajanAivot.Active = false;
85            Miekka.AngularVelocity = -100;
86        }, null);
87
88        Mouse.Listen(MouseButton.Right, ButtonState.Pressed, delegate
89        {
90            seuraajanAivot.Active = false;
91            Miekka.AngularVelocity = 100;
92        }, null);
93        Mouse.Listen(MouseButton.Right, ButtonState.Released, delegate
94        {
95            seuraajanAivot.Active = true;
96        }, null);
97        Mouse.Listen(MouseButton.Left, ButtonState.Released, delegate { seuraajanAivot.Active = true; }, null);
98
99        Timer ajastin = new Timer();
100        ajastin.Interval = 0.5;
101        ajastin.Timeout += delegate { LuoAse(Tikarinkuva, 91, 15, 500, 1); };
102        ajastin.Start();
103
104
105        Timer ajastin2 = new Timer();
106        ajastin2.Interval = 5;
107        ajastin2.Timeout += delegate { LuoAse(Luodinkuva, 30, 20, 600, 0.5); Aani = LoadSoundEffect("Ase"); Aani.Play(); };
108        //ajastin2.Start();
109
110        Timer ajastin3 = new Timer();
111        ajastin3.Interval = 2;
112        ajastin3.Timeout += delegate { LuoAse(Tikarin2kuva, 91, 15, 800, 1); };
113        ajastin3.Start();
114
115        Timer ajastin4 = new Timer();
116        ajastin4.Interval = 2;
117        ajastin4.Timeout += delegate { LuoAse(Magickuva, 100, 100, 2000, 5); Aani = LoadSoundEffect("Magicaani"); Aani.Play(); };
118        ajastin4.Start();
119    }
120
121        void Osuma(PhysicsObject tormaaja, PhysicsObject ase)
122        {
123            if (ase.Tag.ToString() == "Ase")
124            {
125
126                Image Paa1 = LoadImage("Paa1");
127                Image Paa2 = LoadImage("Paa2");
128                Image Keho1 = LoadImage("Keho1");
129                Image Keho2 = LoadImage("Keho2");
130                Image Veri = LoadImage("Veri");
131
132                tormaaja.Destroy();
133                Aani = LoadSoundEffect("Splash");
134                Aani.Play();
135                seuraajanAivot.Active = false;
136                Vector uusivektori0 = new Vector(tormaaja.AbsolutePosition.X - 10, tormaaja.AbsolutePosition.Y);
137                Lisaaosa(uusivektori0, Keho1, 35, 48);
138                Vector uusivektori = new Vector(tormaaja.AbsolutePosition.X + 35, tormaaja.AbsolutePosition.Y);
139                Lisaaosa(uusivektori, Keho2, 38, 52);
140                Vector uusivektori2 = new Vector(tormaaja.AbsolutePosition.X, tormaaja.AbsolutePosition.Y + 52);
141                Lisaaosa(uusivektori2, Paa1, 50, 50);
142                Vector uusivektori3 = new Vector(tormaaja.AbsolutePosition.X + 38, tormaaja.AbsolutePosition.Y + 52);
143                Lisaaosa(uusivektori3, Paa2, 50, 50);
144
145                int pMax = 200;
146                ExplosionSystem rajahdys = new ExplosionSystem(LoadImage("Veri"), pMax);
147                rajahdys.MaxScale = 2;
148                Add(rajahdys);
149                int pMaara = 100;
150                rajahdys.AddEffect(tormaaja.AbsolutePosition.X, tormaaja.AbsolutePosition.Y, pMaara);
151
152                Explosion rajahdys2 = new Explosion(50);
153                rajahdys2.Position = tormaaja.Position;
154                rajahdys2.Image = null;
155                rajahdys2.Sound = null;
156                rajahdys2.Speed = 500.0;
157                rajahdys2.Force = 2000;
158                Add(rajahdys2);
159            }
160        }
161        void Lisaaosa(Vector paikka, Image kuva, double korkeus, double leveys)
162        {
163            PhysicsObject Osa = new PhysicsObject(korkeus, leveys);
164            Osa.Mass = 4;
165            Osa.Position = paikka;
166            Osa.Shape = Shape.FromImage(kuva);
167            Osa.Image = kuva;
168            Add(Osa);
169        }
170
171
172    void LiikutaKohdetta(Vector vektori, PhysicsObject Kohde)
173    {
174        Kohde.Push(vektori);
175    }
176
177    void Hyppää(Vector vektori, PhysicsObject Ukkeli)
178    {
179        if (voikoHypata)
180        {
181            Ukkeli.Hit(vektori);
182            voikoHypata = false;
183        }
184    }
185    AxleJoint LiitaYhteen(PhysicsObject ens, PhysicsObject toin, Vector sidosKohta)
186    {
187        liitos = new AxleJoint(ens, toin, ens.Position + new Vector(0.0, 5.0));
188        liitos.Softness = 0.5;
189        Add(liitos);
190        return liitos;
191    }
192    void KuunteleLiiketta(AnalogState hiirenTila)
193    {
194
195        Pallo.X = Mouse.PositionOnWorld.X;
196        Pallo.Y = Mouse.PositionOnWorld.Y;
197
198        Vector hiirenLiike = hiirenTila.MouseMovement;
199    }
200
201    void LuoPalikka(Vector paikka, double leveys, double korkeus, String tag)
202    {
203        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
204        taso.Position = paikka;
205        taso.Color = Color.Black;
206        taso.CollisionIgnoreGroup = 3;
207        taso.Tag = tag;
208        Add(taso);
209    }
210
211    void LuoUkkeli(Vector paikka, double leveys, double korkeus)
212    {
213        Image Ukkelinkuva = LoadImage("Ukkeli");
214        Image Miekankuva = LoadImage("Miekka");
215        Image Tahtaimenkuva = LoadImage("Tahtain");
216        Image Tikarinkuva = LoadImage("Tikari");
217        Ukkeli = new PhysicsObject(45, 80);
218        Ukkeli.Mass = 15;
219        Ukkeli.KineticFriction = 0.0;
220        Ukkeli.Position = new Vector(0, 0);
221        Ukkeli.Image = Ukkelinkuva;
222        Ukkeli.CanRotate = false;
223        Ukkeli.Shape = Shape.Rectangle;
224        Ukkeli.CollisionIgnoreGroup = 1;
225        Add(Ukkeli);
226
227        Miekka = new PhysicsObject(139.5, 15);
228        Miekka.Mass = 0.01;
229        Miekka.Shape = Shape.FromImage(Miekankuva);
230        Miekka.Image = Miekankuva;
231        Miekka.Position = new Vector(70, -20);
232        Miekka.IgnoresCollisionResponse = true;
233        Miekka.CollisionIgnoreGroup = 1;
234        Add(Miekka);
235        LiitaYhteen(Ukkeli, Miekka, Vector.Zero);
236
237        AddCollisionHandler(Ukkeli, Osuma);
238
239        AddCollisionHandler(Miekka, Torjunta);
240
241
242
243        Pallo.Mass = 0.1;
244        Pallo.Image = Tahtaimenkuva;
245        Pallo.Shape = Shape.FromImage(Tahtaimenkuva);
246        Pallo.Position = new Vector(140, -15);
247        Pallo.CollisionIgnoreGroup = 1;
248        Add(Pallo);
249        Pallo.IsVisible = true;
250        Pallo.CanRotate = false;
251        Pallo.IgnoresCollisionResponse = true;
252        Pallo.CollisionIgnoreGroup = 3;
253        Pallo.IgnoresGravity = true;
254        Mouse.IsCursorVisible = false;
255        Mouse.ListenMovement(0.1, KuunteleLiiketta, null);
256
257        seuraajanAivot = new FollowerBrain(Pallo);
258        Miekka.Brain = seuraajanAivot;
259        seuraajanAivot.Speed = 2000;
260        seuraajanAivot.StopWhenTargetClose = true;
261        seuraajanAivot.DistanceClose = 100;
262        seuraajanAivot.Active = true;
263       
264    }
265
266    void LuoAse(Image kuva, double korkeus, double leveys, double nopeus, double massa)
267    {
268        PhysicsObject Ase = new PhysicsObject(korkeus, leveys);
269        Ase.Image = kuva;
270        Ase.Mass = massa;
271        Ase.Shape = Shape.FromImage(kuva);
272        Ase.IgnoresGravity = true;
273        Ase.CollisionIgnoreGroup = 3;
274        Ase.Tag = "Ase";
275        Ase.MaximumLifetime = TimeSpan.FromSeconds(10);
276
277        Vector vektori1 = new Vector(RandomGen.NextDouble(Level.Right, Level.Right + 300), RandomGen.NextDouble(Level.Bottom, Level.Top));
278        Vector vektori2 = new Vector(RandomGen.NextDouble(Level.Left - 300, Level.Left), RandomGen.NextDouble(Level.Bottom, Level.Top));
279        Vector vektori3 = new Vector(RandomGen.NextDouble(Level.Left - 300, Level.Right + 300), RandomGen.NextDouble(Level.Top, Level.Top + 300));
280
281        int vektorinumero;
282        vektorinumero = RandomGen.NextInt(1,4);
283
284        if (vektorinumero == 1)
285        {
286            Ase.Position = vektori1;
287        }
288        else
289        {
290            if (vektorinumero == 2)
291            {
292                Ase.Position = vektori2;
293            }
294            else
295            {
296                Ase.Position = vektori3;
297            }
298        }
299       
300        //Ase.Position = new Vector(RandomGen.NextDouble(Level.Left - 200, Level.Right + 200), RandomGen.NextDouble(Level.Bottom, Level.Top + 200));
301        Add(Ase);
302        //Ase.Hit(new Vector(RandomGen.NextDouble(Level.Left - 200, Level.Right + 200), RandomGen.NextDouble(Level.Bottom - 200, Level.Top + 200)));
303
304        /*satunnaisAivot = new RandomMoverBrain(200);
305        satunnaisAivot.ChangeMovementSeconds = 100000000;
306        Ase.Brain = satunnaisAivot;
307        satunnaisAivot.TurnWhileMoving = true;*/
308
309        Ase.Hit((Ukkeli.AbsolutePosition - Ase.AbsolutePosition).Normalize() * nopeus);
310        Ase.Angle = Ase.Velocity.Angle;
311    }
312
313    void Torjunta(PhysicsObject miekka, PhysicsObject kohde)
314    {
315
316        if (kohde.Tag.ToString() == "Ase")
317        {
318            kohde.Hit((kohde.AbsolutePosition - Ukkeli.AbsolutePosition).Normalize() * 1000);
319            pisteLaskuri.Value += 1;
320            Aani = LoadSoundEffect("Miekka2");
321            Aani.Play();
322
323            if (kohde.Image.Name == "Tikari2")
324            {
325                pisteLaskuri.Value += 2;
326                Aani = LoadSoundEffect("Miekka2");
327                Aani.Play();
328            }
329
330            if (kohde.Image.Name == "Luoti")
331            {
332                pisteLaskuri.Value += 5;
333                Aani = LoadSoundEffect("Miekka2");
334                Aani.Play();
335            }
336            if (kohde.Image.Name == "Magic")
337            {
338                pisteLaskuri.Value += 1;
339                Aani = LoadSoundEffect("Miekka1");
340                Aani.Play();
341            }
342        }
343    }
344
345    void AloitaAlusta()
346    {
347        ClearAll();
348        Ukkeli.Destroy();
349        Ukkeli = null;
350        Begin();
351    }
352
353    void LuoPistelaskuri()
354    {
355        pisteLaskuri = new IntMeter(0);
356
357        Label pisteNaytto = new Label();
358        pisteNaytto.X = Screen.Left + 100;
359        pisteNaytto.Y = Screen.Top - 100;
360        pisteNaytto.TextColor = Color.Black;
361        pisteNaytto.Color = Color.White;
362
363        pisteNaytto.BindTo(pisteLaskuri);
364        pisteNaytto.Title = "Pisteet";
365        Add(pisteNaytto);
366    }
367}
Note: See TracBrowser for help on using the repository browser.