source: 2015/27/PietuR/Ukkelipeli/Ukkelipeli/Ukkelipeli/Ukkelipeli.cs @ 6604

Revision 6604, 12.7 KB checked in by pimaeeru, 4 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 = 1;
101        ajastin.Timeout += delegate { LuoAse(Tikarinkuva, 91, 15, 500, 1, "Tikari2"); };
102        ajastin.Start();
103
104
105        Timer ajastin2 = new Timer();
106        ajastin2.Interval = 10;
107        ajastin2.Timeout += delegate { LuoAse(Luodinkuva, 30, 20, 600, 0.5, "Luoti"); Aani = LoadSoundEffect("Ase"); Aani.Play(); };
108        ajastin2.Start();
109
110        Timer ajastin3 = new Timer();
111        ajastin3.Interval = 4;
112        ajastin3.Timeout += delegate { LuoAse(Tikarin2kuva, 91, 15, 800, 1, "Tikari2"); };
113        ajastin3.Start();
114
115        Timer ajastin4 = new Timer();
116        ajastin4.Interval = 4;
117        ajastin4.Timeout += delegate { LuoAse(Magickuva, 100, 100, 2000, 5, "Magic"); Aani = LoadSoundEffect("Magicaani"); Aani.Play(); };
118        ajastin4.Start();
119    }
120
121        void Osuma(PhysicsObject tormaaja, PhysicsObject ase)
122        {
123            string[] tags = ase.Tag as String[];
124            if (tags == null) return;
125           
126
127            if (tags[0] == "Ase")
128            {
129
130                Image Paa1 = LoadImage("Paa1");
131                Image Paa2 = LoadImage("Paa2");
132                Image Keho1 = LoadImage("Keho1");
133                Image Keho2 = LoadImage("Keho2");
134                Image Veri = LoadImage("Veri");
135
136                tormaaja.Destroy();
137                Miekka.Destroy();
138                Aani = LoadSoundEffect("Splash");
139                Aani.Play();
140                seuraajanAivot.Active = false;
141                Vector uusivektori0 = new Vector(tormaaja.AbsolutePosition.X - 10, tormaaja.AbsolutePosition.Y);
142                Lisaaosa(uusivektori0, Keho1, 35, 48);
143                Vector uusivektori = new Vector(tormaaja.AbsolutePosition.X + 35, tormaaja.AbsolutePosition.Y);
144                Lisaaosa(uusivektori, Keho2, 38, 52);
145                Vector uusivektori2 = new Vector(tormaaja.AbsolutePosition.X, tormaaja.AbsolutePosition.Y + 52);
146                Lisaaosa(uusivektori2, Paa1, 50, 50);
147                Vector uusivektori3 = new Vector(tormaaja.AbsolutePosition.X + 38, tormaaja.AbsolutePosition.Y + 52);
148                Lisaaosa(uusivektori3, Paa2, 50, 50);
149
150                int pMax = 200;
151                ExplosionSystem rajahdys = new ExplosionSystem(LoadImage("Veri"), pMax);
152                rajahdys.MaxScale = 2;
153                Add(rajahdys);
154                int pMaara = 100;
155                rajahdys.AddEffect(tormaaja.AbsolutePosition.X, tormaaja.AbsolutePosition.Y, pMaara);
156
157                Explosion rajahdys2 = new Explosion(50);
158                rajahdys2.Position = tormaaja.Position;
159                rajahdys2.Image = null;
160                rajahdys2.Sound = null;
161                rajahdys2.Speed = 500.0;
162                rajahdys2.Force = 2000;
163                Add(rajahdys2);
164            }
165        }
166        void Lisaaosa(Vector paikka, Image kuva, double korkeus, double leveys)
167        {
168            PhysicsObject Osa = new PhysicsObject(korkeus, leveys);
169            Osa.Mass = 4;
170            Osa.Position = paikka;
171            Osa.Shape = Shape.FromImage(kuva);
172            Osa.Image = kuva;
173            Add(Osa);
174        }
175
176
177    void LiikutaKohdetta(Vector vektori, PhysicsObject Kohde)
178    {
179        Kohde.Push(vektori);
180    }
181
182    void Hyppää(Vector vektori, PhysicsObject Ukkeli)
183    {
184        if (voikoHypata)
185        {
186            Ukkeli.Hit(vektori);
187            voikoHypata = false;
188        }
189    }
190    AxleJoint LiitaYhteen(PhysicsObject ens, PhysicsObject toin, Vector sidosKohta)
191    {
192        liitos = new AxleJoint(ens, toin, ens.Position + new Vector(0.0, 5.0));
193        liitos.Softness = 0.5;
194        Add(liitos);
195        return liitos;
196    }
197    void KuunteleLiiketta(AnalogState hiirenTila)
198    {
199
200        Pallo.X = Mouse.PositionOnWorld.X;
201        Pallo.Y = Mouse.PositionOnWorld.Y;
202
203        Vector hiirenLiike = hiirenTila.MouseMovement;
204    }
205
206    void LuoPalikka(Vector paikka, double leveys, double korkeus, String tag)
207    {
208        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
209        taso.Position = paikka;
210        taso.Color = Color.Black;
211        taso.CollisionIgnoreGroup = 3;
212        taso.Tag = tag;
213        Add(taso);
214    }
215
216    void LuoUkkeli(Vector paikka, double leveys, double korkeus)
217    {
218        Image Ukkelinkuva = LoadImage("Ukkeli");
219        Image Miekankuva = LoadImage("Miekka");
220        Image Tahtaimenkuva = LoadImage("Tahtain");
221        Image Tikarinkuva = LoadImage("Tikari");
222        Ukkeli = new PhysicsObject(45, 80);
223        Ukkeli.Mass = 15;
224        Ukkeli.KineticFriction = 0.0;
225        Ukkeli.Position = new Vector(0, 0);
226        Ukkeli.Image = Ukkelinkuva;
227        Ukkeli.CanRotate = false;
228        Ukkeli.Shape = Shape.Rectangle;
229        Ukkeli.CollisionIgnoreGroup = 1;
230        Add(Ukkeli);
231
232        Miekka = new PhysicsObject(139.5, 15);
233        Miekka.Mass = 0.01;
234        Miekka.Shape = Shape.FromImage(Miekankuva);
235        Miekka.Image = Miekankuva;
236        Miekka.Position = new Vector(70, -20);
237        Miekka.IgnoresCollisionResponse = true;
238        Miekka.CollisionIgnoreGroup = 1;
239        Add(Miekka);
240        LiitaYhteen(Ukkeli, Miekka, Vector.Zero);
241
242        AddCollisionHandler(Ukkeli, Osuma);
243
244        AddCollisionHandler(Miekka, Torjunta);
245
246
247
248        Pallo.Mass = 0.1;
249        Pallo.Image = Tahtaimenkuva;
250        Pallo.Shape = Shape.FromImage(Tahtaimenkuva);
251        Pallo.Position = new Vector(140, -15);
252        Pallo.CollisionIgnoreGroup = 1;
253        Add(Pallo);
254        Pallo.IsVisible = true;
255        Pallo.CanRotate = false;
256        Pallo.IgnoresCollisionResponse = true;
257        Pallo.CollisionIgnoreGroup = 3;
258        Pallo.IgnoresGravity = true;
259        Mouse.IsCursorVisible = false;
260        Mouse.ListenMovement(0.1, KuunteleLiiketta, null);
261
262        seuraajanAivot = new FollowerBrain(Pallo);
263        Miekka.Brain = seuraajanAivot;
264        seuraajanAivot.Speed = 2000;
265        seuraajanAivot.StopWhenTargetClose = true;
266        seuraajanAivot.DistanceClose = 100;
267        seuraajanAivot.Active = true;
268       
269    }
270
271    void LuoAse(Image kuva, double korkeus, double leveys, double nopeus, double massa, string aseenNimi)
272    {
273        PhysicsObject Ase = new PhysicsObject(korkeus, leveys);
274        Ase.Image = kuva;
275        Ase.Mass = massa;
276        Ase.Shape = Shape.FromImage(kuva);
277        Ase.IgnoresGravity = true;
278        Ase.CollisionIgnoreGroup = 3;
279        string[] tags = new string[2];
280        tags[0] = "Ase";
281        tags[1] = aseenNimi;
282        Ase.Tag = tags;
283        Ase.MaximumLifetime = TimeSpan.FromSeconds(10);
284
285        Vector vektori1 = new Vector(RandomGen.NextDouble(Level.Right, Level.Right + 300), RandomGen.NextDouble(Level.Bottom, Level.Top));
286        Vector vektori2 = new Vector(RandomGen.NextDouble(Level.Left - 300, Level.Left), RandomGen.NextDouble(Level.Bottom, Level.Top));
287        Vector vektori3 = new Vector(RandomGen.NextDouble(Level.Left - 300, Level.Right + 300), RandomGen.NextDouble(Level.Top, Level.Top + 300));
288
289        int vektorinumero;
290        vektorinumero = RandomGen.NextInt(1,4);
291
292        if (vektorinumero == 1)
293        {
294            Ase.Position = vektori1;
295        }
296        else
297        {
298            if (vektorinumero == 2)
299            {
300                Ase.Position = vektori2;
301            }
302            else
303            {
304                Ase.Position = vektori3;
305            }
306        }
307       
308        //Ase.Position = new Vector(RandomGen.NextDouble(Level.Left - 200, Level.Right + 200), RandomGen.NextDouble(Level.Bottom, Level.Top + 200));
309        Add(Ase);
310        //Ase.Hit(new Vector(RandomGen.NextDouble(Level.Left - 200, Level.Right + 200), RandomGen.NextDouble(Level.Bottom - 200, Level.Top + 200)));
311
312        /*satunnaisAivot = new RandomMoverBrain(200);
313        satunnaisAivot.ChangeMovementSeconds = 100000000;
314        Ase.Brain = satunnaisAivot;
315        satunnaisAivot.TurnWhileMoving = true;*/
316
317        Ase.Hit((Ukkeli.AbsolutePosition - Ase.AbsolutePosition).Normalize() * nopeus);
318        Ase.Angle = Ase.Velocity.Angle;
319    }
320
321    void Torjunta(PhysicsObject miekka, PhysicsObject kohde)
322    {
323        string[] tags = kohde.Tag as string[];
324        if (tags == null) return;
325
326        if (tags[0] == "Ase")
327        {
328            kohde.Hit((kohde.AbsolutePosition - Ukkeli.AbsolutePosition).Normalize() * 1000);
329            pisteLaskuri.Value += 1;
330            Aani = LoadSoundEffect("Miekka2");
331            Aani.Play();
332
333            if (tags[1] == "Tikari2")
334            {
335                pisteLaskuri.Value += 2;
336                Aani = LoadSoundEffect("Miekka2");
337                Aani.Play();
338            }
339
340            if (tags[1] == "Luoti")
341            {
342                pisteLaskuri.Value += 5;
343                Aani = LoadSoundEffect("Miekka2");
344                Aani.Play();
345            }
346            if (tags[1] == "Magic")
347            {
348                pisteLaskuri.Value += 1;
349                Aani = LoadSoundEffect("Miekka1");
350                Aani.Play();
351            }
352        }
353    }
354
355    void AloitaAlusta()
356    {
357        ClearAll();
358        Ukkeli.Destroy();
359        Ukkeli = null;
360        Begin();
361    }
362
363    void LuoPistelaskuri()
364    {
365        pisteLaskuri = new IntMeter(0);
366
367        Label pisteNaytto = new Label();
368        pisteNaytto.X = Screen.Left + 100;
369        pisteNaytto.Y = Screen.Top - 100;
370        pisteNaytto.TextColor = Color.Black;
371        pisteNaytto.Color = Color.White;
372
373        pisteNaytto.BindTo(pisteLaskuri);
374        pisteNaytto.Title = "Pisteet";
375        Add(pisteNaytto);
376    }
377}
Note: See TracBrowser for help on using the repository browser.