diff --git a/Escape/Escape/Escape.cs b/Escape/Escape/Escape.cs index 398b1aa6b012616099b9bf2c4e0bedd66be97f21..f6f8f1d7e4c58f90b72fd7dca8ca7f985d9d938b 100644 --- a/Escape/Escape/Escape.cs +++ b/Escape/Escape/Escape.cs @@ -8,7 +8,7 @@ using Jypeli.Widgets; namespace Escape; /// @author annilehtinen -/// @version 28.03.2025 / 2 +/// @version 29.03.2025 /// <summary> /// Peli, jossa pelaajaan tavoitteena on vältellä vastustajaa (Barkov) ja kerätä kiekkoja saadakseen pisteitä. /// </summary> @@ -16,67 +16,109 @@ public class Escape : PhysicsGame { public override void Begin() { - Surfaces borders = Level.CreateBorders(0.5, true, Color.White); Camera.ZoomToLevel(); + CreateLevel(); - PhysicsObject player = new PhysicsObject(40, 40); - player.Image = LoadImage("player.png"); - player.CanRotate = false; - player.LinearDamping = 0.95; - - this.Add(player); - - SetControls(); - + PhysicsObject player = AddPlayer(this); + SetControls(player); + PhysicsObject barkov = new PhysicsObject(50, 50); barkov.Image = LoadImage("Barkov.png"); barkov.X = 60; barkov.Y = -60; this.Add(barkov); - SpawnPuck(); - Timer.CreateAndStart(4.0, SpawnPuck); + Timer.CreateAndStart(4.0, SpawnPucks); + } + + + /// <summary> + /// Peliohjainten asettaminen pelaajalle + /// </summary> + void SetControls(PhysicsObject player) + { + Keyboard.Listen(Key.Up, ButtonState.Down, MovePlayer, "Liikuta pelaajaa eteenpäin", player); + Keyboard.Listen(Key.Left, ButtonState.Down, TurnPlayer, "Käännä pelaajaa vasemmalle", player, 2.0); + Keyboard.Listen(Key.Left, ButtonState.Released, TurnPlayer, null, player, 0.0); + Keyboard.Listen(Key.Right, ButtonState.Down, TurnPlayer, "Käännä pelaajaa oikealle", player,-2.0); + Keyboard.Listen(Key.Right, ButtonState.Released, TurnPlayer, null, player,0.0); - /// <summary> - /// Peliohjainten asettaminen - /// </summary> - void SetControls() - { - Keyboard.Listen(Key.Up, ButtonState.Down, MovePlayer, "Liikuta pelaajaa eteenpäin"); - Keyboard.Listen(Key.Left, ButtonState.Down, TurnPlayer, "Käännä pelaajaa vasemmalle", 2.0); - Keyboard.Listen(Key.Left, ButtonState.Released, TurnPlayer, null, 0.0); - Keyboard.Listen(Key.Right, ButtonState.Down, TurnPlayer, "Käännä pelaajaa oikealle", -2.0); - Keyboard.Listen(Key.Right, ButtonState.Released, TurnPlayer, null, 0.0); + Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli"); + } + + + /// <summary> + /// Lisää pelaajan hahmon pelikentälle ja määrittää sen ominaisuudet + /// </summary> + /// <param name="game">Peli, johon hahmo lisätään</param> + /// <returns>Pelaaja</returns> + static PhysicsObject AddPlayer(PhysicsGame game) + { + PhysicsObject player = new PhysicsObject(40, 40); + player.Image = LoadImage("player.png"); + player.CanRotate = false; + player.LinearDamping = 0.95; - Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli"); - } - - /// <summary> - /// Pelaajan liikuttaminen eteenpäin (myöhemmin animaation kanssa) - /// </summary> - void MovePlayer() - { - int playerSpeed = 10; - Vector playerDirection = Vector.FromLengthAndAngle(50.0, player.Angle); - player.Push(playerDirection * playerSpeed); - } + game.Add(player); + return player; + } + + + /// <summary> + /// Pelaajan liikuttaminen eteenpäin (myöhemmin animaation kanssa) + /// </summary> + void MovePlayer(PhysicsObject player) + { + int playerSpeed = 10; + Vector playerDirection = Vector.FromLengthAndAngle(50.0, player.Angle); + player.Push(playerDirection * playerSpeed); + } + + + /// <summary> + /// Pelaajan kääntäminen nuolinäppäinten avulla + /// </summary> + /// <param name="player">Pelaaja, jonka hahmoa käännetään</param> + /// <param name="angle">Kulma, jossa hahmoa käännetään</param> + void TurnPlayer(PhysicsObject player, double angle) + { + player.Angle += Angle.FromDegrees(angle); + } + + + /// <summary> + /// Kiekon lisääminen kentälle satunnaiseen kohtaan + /// </summary> + /// <param name="amount">Kuinka monta kiekkoa luodaan kentälle</param> + /// <param name="lifetime">Aika, jonka kiekko on kentällä ennen kuin se katoaa</param> + void SpawnPucks(int amount, double lifetime) + { + GameObject puck = new GameObject(18, 18); + puck.Shape = Shape.Circle; + puck.Color = Color.Black; + puck.LifetimeLeft = TimeSpan.FromSeconds(lifetime); + puck.Position = Level.GetRandomPosition(); - /// <summary> - /// Pelaajan kääntäminen nuolinäppäinten avulla - /// </summary> - void TurnPlayer(double angle) - { - player.Angle += Angle.FromDegrees(angle); - } - - void SpawnPuck() - { - GameObject puck = new GameObject(18, 18); - puck.Shape = Shape.Circle; - puck.Color = Color.Black; - puck.LifetimeLeft = TimeSpan.FromSeconds(5.0); - puck.Position = Level.GetRandomPosition(); - this.Add(puck); - } + for (int i = 1; i <= amount; i++) this.Add(puck); + } + + + /// <summary> + /// Yhden kiekon lisääminen kentälle satunnaiseen kohtaan viiden sekunnin ajaksi, + /// jos kutsussa ei anneta parametrinä määrää ja aikaa erikseen + /// </summary> + void SpawnPucks() + { + SpawnPucks(1, 5.0); + } + + + /// <summary> + /// Lisätään kentälle haluttu määrä kiekkoja (pelin alkaessa) + /// </summary> + void CreateLevel() //TODO: Kiekkojen lisääminen ei toimi + { + Surfaces borders = Level.CreateBorders(0.5, true, Color.White); + SpawnPucks(5, 10.0); } } \ No newline at end of file