source: 2016/27/PaavoH/BeeHunterMono/BeeHunter/BeeHunter/BeeHunter.cs @ 10077

Revision 10077, 10.4 KB checked in by paharvol, 2 months 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 BeeHunter : PhysicsGame
10{
11    const double nopeus = 200;
12    const double hyppyNopeus = 750;
13    const int RUUDUN_KOKO = 40;
14
15    IntMeter lifes;
16
17    PlatformCharacter player;
18    AssaultRifle gun;
19
20    Image pelaajanKuva = LoadImage("norsu");
21    Image tahtiKuva = LoadImage("tahti");
22    Image MiniBeeImage = LoadImage("bee");
23    Image MiniBeeImageLeft = LoadImage("bee");
24    //Image MiniBeeImageFlipped;
25
26    //EggBreak = LoadAnimation("egg");
27
28    SoundEffect maaliAani = LoadSoundEffect("maali");
29
30    bool playerCanShoot = true;
31
32
33
34    public override void Begin()
35    {
36        Gravity = new Vector(0, -1100);
37
38        LuoKentta();
39        GameControls();
40        IsFullScreen = !true;
41
42        Camera.Follow(player);
43        Camera.ZoomFactor = 1.2;
44        Camera.StayInLevel = true;
45
46        MiniBeeImageLeft = Image.Mirror(MiniBeeImageLeft);
47
48    }
49
50    void LuoKentta()
51    {
52        TileMap kentta = TileMap.FromLevelAsset("kentta1");
53        kentta.SetTileMethod('#', NestWall);
54        kentta.SetTileMethod('*', HoneyComb);
55        kentta.SetTileMethod('e', EggPlace);
56        kentta.SetTileMethod('0', MiniBeeEgg);
57        kentta.SetTileMethod(',', MiniBee);
58        kentta.SetTileMethod('m', MotherBee);
59        kentta.SetTileMethod('N', Player);
60        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
61        Level.CreateBorders();
62        Level.Background.CreateGradient(Color.White, Color.SkyBlue);
63
64        LifeMeter();
65    }
66
67    protected override void Update(Time time)
68    {
69        base.Update(time);
70
71        List<GameObject> ampiaiset = GetObjectsWithTag("MiniBee");
72        foreach (PhysicsObject b in ampiaiset)
73        {
74            if (b.Velocity.X >= 0)
75            {
76                b.Image = MiniBeeImageLeft;
77            }
78            else b.Image = MiniBeeImage;
79        }
80    }
81
82    void NestWall(Vector pos, double leveys, double korkeus)
83    {
84        var nestwall = PhysicsObject.CreateStaticObject(leveys, korkeus);
85        nestwall.Position = pos;
86        nestwall.Color = Color.Green;
87        nestwall.Tag = "NestWall";
88        Add(nestwall);
89    }
90
91    void HoneyComb(Vector pos, double leveys, double korkeus)
92    {
93        var comb = PhysicsObject.CreateStaticObject(leveys, korkeus);
94        comb.IgnoresCollisionResponse = true;
95        comb.Position = pos;
96        comb.Image = tahtiKuva;
97        comb.Tag = "Comb";
98        Add(comb, -3);
99    }
100
101    void MiniBeeEgg(Vector pos, double leveys, double korkeus)
102    {
103        var egg = PhysicsObject.CreateStaticObject(leveys, korkeus);
104        egg.CollisionIgnoreGroup = 1;
105        egg.Position = pos;
106        //egg.Image = tahtiKuva;
107        egg.Tag = "Egg";
108        //AddCollisionHandler(egg, "Bullet", BulletHit);
109        Add(egg);
110
111        //Timer.SingleShot(5.0, delegate {egg.Destroy();});
112        Timer.SingleShot(5.0, delegate
113        {
114            EggBreaks(egg, pos);
115        }
116            );
117    }
118
119    void MiniBee(Vector pos, double leveys, double korkeus)
120    {
121        var minibee = new PhysicsObject(leveys / 4, korkeus / 4);
122        minibee.Position = pos;
123        minibee.Image = MiniBeeImage;
124        minibee.IgnoresGravity = true;
125        minibee.Tag = "MiniBee";
126        minibee.CanRotate = false;
127        minibee.CollisionIgnoreGroup = 1;
128        Add(minibee);
129
130        var minibeeAI2 = new LabyrinthWandererBrain(RUUDUN_KOKO);
131        minibeeAI2.Speed = 100.0;
132        minibeeAI2.LabyrinthWallTag = "NestWall";
133
134        var minibeeAI1 = new FollowerBrain("Player");
135        minibeeAI1.Speed = 150;
136        minibeeAI1.DistanceFar = 300;
137        //minibeeAI1.DistanceClose = 200;         
138        //minibeeAI1.StopWhenTargetClose = false;
139        //minibeeAI1.TurnWhileMoving = true;
140        minibeeAI1.FarBrain = minibeeAI2;
141
142        minibee.Brain = minibeeAI1;
143
144    }
145
146    void MotherBee(Vector pos, double leveys, double korkeus)
147    {
148        var motherbee = new PhysicsObject(leveys * 1.5, korkeus * 1.5);
149        motherbee.Position = pos;
150        motherbee.Color = Color.Emerald;
151        motherbee.IgnoresGravity = true;
152        motherbee.Tag = "MotherBee";
153        motherbee.CanRotate = false;
154        motherbee.CollisionIgnoreGroup = 1;
155        Add(motherbee);
156
157        var motherbeeAI2 = new LabyrinthWandererBrain(RUUDUN_KOKO);
158        motherbeeAI2.Speed = 80.0;
159        motherbeeAI2.LabyrinthWallTag = "NestWall";
160        //motherbeeAI2.LabyrinthWallTag = "MiniBee";
161
162        var motherbeeAI1 = new FollowerBrain("Player");
163        motherbeeAI1.Speed = 120;
164        motherbeeAI1.DistanceFar = 300;
165        motherbeeAI1.DistanceClose = 20;
166        motherbeeAI1.StopWhenTargetClose = true;
167        motherbeeAI1.FarBrain = motherbeeAI2;
168
169        motherbee.Brain = motherbeeAI1;
170    }
171
172    void Player(Vector pos, double leveys, double korkeus)
173    {
174        player = new PlatformCharacter(leveys, korkeus);
175        player.Position = pos;
176        player.Mass = 4.0;
177        player.Image = pelaajanKuva;
178        player.Tag = "Player";
179        AddCollisionHandler(player, "Comb", CollectComb);
180        AddCollisionHandler(player, "Egg", DestroyEgg);
181        AddCollisionHandler(player, "MiniBee", HitMiniBee);
182        Add(player);
183
184        gun = new AssaultRifle(10, 10);
185        gun.AmmoIgnoresGravity = true;
186        gun.FireRate = 100;
187        gun.Power.Value = 500;
188        gun.Power.DefaultValue = 500;
189        player.Add(gun);
190    }
191
192    void EggPlace(Vector pos, double leveys, double korkeus)
193    {
194        var eggplace = PhysicsObject.CreateStaticObject(leveys, korkeus);
195        eggplace.Position = pos;
196        eggplace.IgnoresPhysicsLogics = true;
197        eggplace.IgnoresCollisionResponse = true;
198        //eggplace.Mass = 4.0;
199        eggplace.Color = Color.Transparent;
200        AddCollisionHandler(eggplace, "MotherBee", AddEgg);
201        Add(eggplace);
202    }
203
204    void CollectComb(PhysicsObject player, PhysicsObject comb)
205    {
206        //maaliAani.Play();
207        //MessageDisplay.Add("Keräsit tähden!");
208        comb.Destroy();
209    }
210
211    void DestroyEgg(PhysicsObject player, PhysicsObject egg)
212    {
213        if (player.Bottom >= egg.Y)
214        {
215            player.Hit(new Vector(0.0, 2300.0));
216            //maaliAani.Play();
217            egg.Destroy();
218        }
219    }
220
221    void EggBreaks(PhysicsObject egg, Vector pos)
222    {
223        if (egg.IsDestroyed == false)
224        {
225            //egg.Animation.Start(1);
226            egg.Destroy();
227            MiniBee(egg.Position, 40, 40);
228            EggPlace(pos, 40, 40);
229        }
230    }
231
232    void AddEgg(PhysicsObject eggplace, PhysicsObject motherbee)
233    {
234        //egg.Animation.Start(1);
235        eggplace.Destroy();
236        MiniBeeEgg(eggplace.Position, 40, 40);
237    }
238
239    void HitMiniBee(PhysicsObject player, PhysicsObject bee)
240    {
241        bee.Destroy();
242        lifes.Value -= 2;
243
244    }
245
246    void LifeMeter()
247    {
248        lifes = new IntMeter(5);
249        lifes.MaxValue = 99;
250        lifes.MinValue = 0;
251
252        var lifemeter = new GameObject(80, 80);
253        lifemeter.Shape = Shape.Heart;
254        lifemeter.Y = Screen.Top - 100;
255        lifemeter.X = Screen.Left + 100;
256        lifemeter.Color = Color.Red;
257        //AddCollisionHandler(lifemeter, "Comb", TormaaTahteen);
258        Add(lifemeter, 4);
259
260        Label lifenumber = new Label();
261        lifenumber.X = Screen.Left + 100;
262        lifenumber.Y = Screen.Top - 100;
263        lifenumber.TextColor = Color.Black;
264        //lifenumber.Color = Color.White;
265
266        lifenumber.BindTo(lifes);
267        Add(lifenumber);
268    }
269
270    void GameControls()
271    {
272        //Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
273        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
274
275        Keyboard.Listen(Key.A, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", player, -nopeus);
276        Keyboard.Listen(Key.D, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", player, nopeus);
277        Keyboard.Listen(Key.W, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", player, hyppyNopeus);
278        Keyboard.Listen(Key.Space, ButtonState.Pressed, Shoot, "Ammu", gun);
279
280        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
281
282        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", player, -nopeus);
283        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", player, nopeus);
284        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", player, hyppyNopeus);
285    }
286
287    void Liikuta(PlatformCharacter hahmo, double nopeus)
288    {
289        hahmo.Walk(nopeus);
290
291        if (nopeus <= 0)
292        {
293            gun.Angle = Angle.FromDegrees(180);
294        }
295
296        if (nopeus >= 0)
297        {
298            gun.Angle = Angle.FromDegrees(0);
299        }
300    }
301
302    void Hyppaa(PlatformCharacter hahmo, double nopeus)
303    {
304        hahmo.Jump(nopeus);
305    }
306
307    void Shoot(AssaultRifle gun)
308    {
309        if (!playerCanShoot) return;
310
311        Angle aloitusAngle = gun.Angle;
312        gun.Angle = aloitusAngle + RandomGen.NextAngle(Angle.FromDegrees(-5), Angle.FromDegrees(5));
313        PhysicsObject bullet = gun.Shoot();
314        bullet.Tag = "Bullet";
315        AddCollisionHandler(bullet, BulletHit);
316
317        Timer.SingleShot(0.1, delegate
318        {
319            gun.Angle = aloitusAngle + RandomGen.NextAngle(Angle.FromDegrees(-15), Angle.FromDegrees(15));
320            var b = gun.Shoot();
321            if (b != null)
322                AddCollisionHandler(b, BulletHit);
323        });
324        Timer.SingleShot(0.2, delegate
325        {
326            gun.Angle = aloitusAngle + RandomGen.NextAngle(Angle.FromDegrees(-10), Angle.FromDegrees(10));
327            var b = gun.Shoot();
328            if (b != null)
329                AddCollisionHandler(b, BulletHit);
330        });
331
332        gun.Angle = aloitusAngle;
333
334        playerCanShoot = false;
335
336        Timer.SingleShot(1, delegate { playerCanShoot = true; });
337
338    }
339
340    void BulletHit(PhysicsObject bullet, PhysicsObject target)
341    {
342        //target.Destroy();
343        bullet.Destroy();
344
345        if (target.Tag == "MiniBee")
346        {
347            target.Destroy();
348        }
349    }
350}
Note: See TracBrowser for help on using the repository browser.