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

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