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

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