From 6a2348a89b092ffaf77b9db9ef95bf57bb69c86d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?N=C3=A4iv=C3=B6=20Jimi=20Sebastian?= <jiminaivo@gmail.com> Date: Tue, 29 Oct 2024 11:00:58 +0200 Subject: [PATCH] =?UTF-8?q?lis=C3=A4sin=20ping=20pong=20pelin=20pohjaksi?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../.idea.SimulaattoriPeli/.idea/.gitignore | 13 ++ .../.idea/encodings.xml | 4 + .../.idea/indexLayout.xml | 8 + .../.idea.SimulaattoriPeli/.idea/vcs.xml | 6 + SimulaattoriPeli/SimulaattoriPeli.sln | 16 ++ SimulaattoriPeli/SimulaattoriPeli/Ohjelma.cs | 26 +++ .../SimulaattoriPeli/SimulaattoriPeli.cs | 176 ++++++++++++++++++ .../SimulaattoriPeli/SimulaattoriPeli.csproj | 13 ++ 8 files changed, 262 insertions(+) create mode 100644 SimulaattoriPeli/.idea/.idea.SimulaattoriPeli/.idea/.gitignore create mode 100644 SimulaattoriPeli/.idea/.idea.SimulaattoriPeli/.idea/encodings.xml create mode 100644 SimulaattoriPeli/.idea/.idea.SimulaattoriPeli/.idea/indexLayout.xml create mode 100644 SimulaattoriPeli/.idea/.idea.SimulaattoriPeli/.idea/vcs.xml create mode 100644 SimulaattoriPeli/SimulaattoriPeli.sln create mode 100644 SimulaattoriPeli/SimulaattoriPeli/Ohjelma.cs create mode 100644 SimulaattoriPeli/SimulaattoriPeli/SimulaattoriPeli.cs create mode 100644 SimulaattoriPeli/SimulaattoriPeli/SimulaattoriPeli.csproj diff --git a/SimulaattoriPeli/.idea/.idea.SimulaattoriPeli/.idea/.gitignore b/SimulaattoriPeli/.idea/.idea.SimulaattoriPeli/.idea/.gitignore new file mode 100644 index 0000000..7e59246 --- /dev/null +++ b/SimulaattoriPeli/.idea/.idea.SimulaattoriPeli/.idea/.gitignore @@ -0,0 +1,13 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Rider ignored files +/contentModel.xml +/modules.xml +/.idea.SimulaattoriPeli.iml +/projectSettingsUpdater.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/SimulaattoriPeli/.idea/.idea.SimulaattoriPeli/.idea/encodings.xml b/SimulaattoriPeli/.idea/.idea.SimulaattoriPeli/.idea/encodings.xml new file mode 100644 index 0000000..df87cf9 --- /dev/null +++ b/SimulaattoriPeli/.idea/.idea.SimulaattoriPeli/.idea/encodings.xml @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="Encoding" addBOMForNewFiles="with BOM under Windows, with no BOM otherwise" /> +</project> \ No newline at end of file diff --git a/SimulaattoriPeli/.idea/.idea.SimulaattoriPeli/.idea/indexLayout.xml b/SimulaattoriPeli/.idea/.idea.SimulaattoriPeli/.idea/indexLayout.xml new file mode 100644 index 0000000..7b08163 --- /dev/null +++ b/SimulaattoriPeli/.idea/.idea.SimulaattoriPeli/.idea/indexLayout.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="UserContentModel"> + <attachedFolders /> + <explicitIncludes /> + <explicitExcludes /> + </component> +</project> \ No newline at end of file diff --git a/SimulaattoriPeli/.idea/.idea.SimulaattoriPeli/.idea/vcs.xml b/SimulaattoriPeli/.idea/.idea.SimulaattoriPeli/.idea/vcs.xml new file mode 100644 index 0000000..6c0b863 --- /dev/null +++ b/SimulaattoriPeli/.idea/.idea.SimulaattoriPeli/.idea/vcs.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="VcsDirectoryMappings"> + <mapping directory="$PROJECT_DIR$/.." vcs="Git" /> + </component> +</project> \ No newline at end of file diff --git a/SimulaattoriPeli/SimulaattoriPeli.sln b/SimulaattoriPeli/SimulaattoriPeli.sln new file mode 100644 index 0000000..425c978 --- /dev/null +++ b/SimulaattoriPeli/SimulaattoriPeli.sln @@ -0,0 +1,16 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SimulaattoriPeli", "SimulaattoriPeli\SimulaattoriPeli.csproj", "{135EA932-8407-4D6E-99AD-FB997D98CED3}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {135EA932-8407-4D6E-99AD-FB997D98CED3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {135EA932-8407-4D6E-99AD-FB997D98CED3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {135EA932-8407-4D6E-99AD-FB997D98CED3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {135EA932-8407-4D6E-99AD-FB997D98CED3}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection +EndGlobal diff --git a/SimulaattoriPeli/SimulaattoriPeli/Ohjelma.cs b/SimulaattoriPeli/SimulaattoriPeli/Ohjelma.cs new file mode 100644 index 0000000..934b03a --- /dev/null +++ b/SimulaattoriPeli/SimulaattoriPeli/Ohjelma.cs @@ -0,0 +1,26 @@ +#region Using Statements + +using System; +using System.Collections.Generic; +using System.Linq; + +#endregion + +namespace SimulaattoriPeli +{ + /// <summary> + /// The main class. + /// </summary> + public static class Program + { + /// <summary> + /// The main entry point for the application. + /// </summary> + [STAThread] + static void Main() + { + using var game = new SimulaattoriPeli(); + game.Run(); + } + } +} \ No newline at end of file diff --git a/SimulaattoriPeli/SimulaattoriPeli/SimulaattoriPeli.cs b/SimulaattoriPeli/SimulaattoriPeli/SimulaattoriPeli.cs new file mode 100644 index 0000000..4fc3b8b --- /dev/null +++ b/SimulaattoriPeli/SimulaattoriPeli/SimulaattoriPeli.cs @@ -0,0 +1,176 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Transactions; +using Jypeli; +using Jypeli.Assets; +using Jypeli.Controls; +using Jypeli.Widgets; + +namespace SimulaattoriPeli; + +/// @author Omanimi +/// @version 25.08.2024 +/// <summary> +/// +/// </summary> +public class SimulaattoriPeli : PhysicsGame +{ + Vector nopeusYlos = new Vector(0, 200); + Vector nopeusAlas = new Vector(0, -200); + + PhysicsObject pallo; + + PhysicsObject maila1; + PhysicsObject maila2; + + IntMeter pelaajan1Pisteet; + IntMeter pelaajan2Pisteet; + + PhysicsObject vasenReuna; + PhysicsObject oikeaReuna; + + public override void Begin() + { + LuoKentta(); + AloitaPeli(); + AsetaOhjaimet(); + LisaaLaskurit(); + } + + void LuoKentta() + { + vasenReuna = Level.CreateLeftBorder(); + vasenReuna.Restitution = 1.0; + vasenReuna.IsVisible = false; + + oikeaReuna = Level.CreateRightBorder(); + oikeaReuna.Restitution = 1.0; + oikeaReuna.IsVisible = false; + + PhysicsObject alaReuna = Level.CreateBottomBorder(); + alaReuna.Restitution = 1.0; + alaReuna.IsVisible = false; + + PhysicsObject yläReuna = Level.CreateTopBorder(); + yläReuna.Restitution = 1.0; + yläReuna.IsVisible = false; + Camera.ZoomToLevel(); + + + pallo = new PhysicsObject(40.0, 40.0); + pallo.Shape = Shape.Circle; + pallo.X = -200.0; + pallo.Y = 0.0; + pallo.Restitution = 1.0; + pallo.KineticFriction = 0.0; + pallo.MomentOfInertia = Double.PositiveInfinity; + Add(pallo); + AddCollisionHandler(pallo, KasittelePallonTormays); + + maila1 = LuoMaila(Level.Left + 20.0, 0.0); + maila2 = LuoMaila(Level.Right - 20.0, 0.0); + + + Level.BackgroundColor = Color.Black; + } + + void AloitaPeli() + { + Vector impulssi = new Vector(500.0, 0.0); + pallo.Hit(impulssi * pallo.Mass); + } + + PhysicsObject LuoMaila(double x, double y) + { + PhysicsObject maila = PhysicsObject.CreateStaticObject(20.0, 100.0); + maila.Shape = Shape.Rectangle; + maila.X = x; + maila.Y = y; + maila.Restitution = 1.0; + Add(maila); + return maila; + } + + void AsetaOhjaimet() + { + Keyboard.Listen(Key.A, ButtonState.Down, AsetaNopeus, "Pelaaja 1: Liikuta mailaa ylös", maila1, nopeusYlos); + Keyboard.Listen(Key.A, ButtonState.Released, AsetaNopeus, null, maila1, Vector.Zero); + Keyboard.Listen(Key.Z, ButtonState.Down, AsetaNopeus, "Pelaaja 1: Liikuta mailaa alas", maila1, nopeusAlas); + Keyboard.Listen(Key.Z, ButtonState.Released, AsetaNopeus, null, maila1, Vector.Zero); + + Keyboard.Listen(Key.Up, ButtonState.Down, AsetaNopeus, "Pelaaja 2: Liikuta mailaa ylös", maila2, nopeusYlos); + Keyboard.Listen(Key.Up, ButtonState.Released, AsetaNopeus, null, maila2, Vector.Zero); + Keyboard.Listen(Key.Down, ButtonState.Down, AsetaNopeus, "Pelaaja 2: Liikuta mailaa alas", maila2, nopeusAlas); + Keyboard.Listen(Key.Down, ButtonState.Released, AsetaNopeus, null, maila2, Vector.Zero); + + Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet"); + Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli"); + + ControllerOne.Listen( Button.DPadUp, ButtonState.Down, AsetaNopeus, "Liikuta mailaa ylös", maila1, nopeusYlos ); + ControllerOne.Listen( Button.DPadUp, ButtonState.Released, AsetaNopeus, null, maila1, Vector.Zero ); + ControllerOne.Listen( Button.DPadDown, ButtonState.Down, AsetaNopeus, "Liikuta mailaa alas", maila1, nopeusAlas ); + ControllerOne.Listen( Button.DPadDown, ButtonState.Released, AsetaNopeus, null, maila1, Vector.Zero ); + + ControllerTwo.Listen( Button.DPadUp, ButtonState.Down, AsetaNopeus, "Liikuta mailaa ylös", maila2, nopeusYlos ); + ControllerTwo.Listen( Button.DPadUp, ButtonState.Released, AsetaNopeus, null, maila2, Vector.Zero ); + ControllerTwo.Listen( Button.DPadDown, ButtonState.Down, AsetaNopeus, "Liikuta mailaa alas", maila2, nopeusAlas ); + ControllerTwo.Listen( Button.DPadDown, ButtonState.Released, AsetaNopeus, null, maila2, Vector.Zero ); + + ControllerOne.Listen( Button.Back, ButtonState.Pressed, ConfirmExit, "Lopeta peli" ); + ControllerTwo.Listen( Button.Back, ButtonState.Pressed, ConfirmExit, "Lopeta peli" ); + } + + + void AsetaNopeus(PhysicsObject maila, Vector nopeus) + { + if ((nopeus.Y < 0) && (maila.Bottom < Level.Bottom)) + { + maila.Velocity = Vector.Zero; + return; + } + if ((nopeus.Y > 0) && (maila.Top > Level.Top)) + { + maila.Velocity = Vector.Zero; + return; + } + + maila.Velocity = nopeus; + } + + void LisaaLaskurit() + { + pelaajan1Pisteet = LuoPisteLaskuri(Screen.Left + 100.0, Screen.Top - 100.0); + pelaajan2Pisteet = LuoPisteLaskuri(Screen.Right - 100.0, Screen.Top - 100.0); + } + + IntMeter LuoPisteLaskuri(double x, double y) + { + IntMeter laskuri = new IntMeter(0); + laskuri.MaxValue = 10; + + Label naytto = new Label(); + naytto.BindTo(laskuri); + naytto.X = x; + naytto.Y = y; + naytto.TextColor = Color.White; + naytto.BorderColor = Level.Background.Color; + naytto.Color = Level.Background.Color; + Add(naytto); + + return laskuri; + } + + void KasittelePallonTormays(PhysicsObject pallo, PhysicsObject kohde) + { + if (kohde == oikeaReuna) + { + pelaajan1Pisteet.Value += 1; + } + else if (kohde == vasenReuna) + { + pelaajan2Pisteet.Value += 1; + } + } +} + diff --git a/SimulaattoriPeli/SimulaattoriPeli/SimulaattoriPeli.csproj b/SimulaattoriPeli/SimulaattoriPeli/SimulaattoriPeli.csproj new file mode 100644 index 0000000..d164748 --- /dev/null +++ b/SimulaattoriPeli/SimulaattoriPeli/SimulaattoriPeli.csproj @@ -0,0 +1,13 @@ +<Project Sdk="Microsoft.NET.Sdk"> + + <PropertyGroup> + <OutputType>WinExe</OutputType> + <TargetFramework>net8.0</TargetFramework> + </PropertyGroup> + + <ItemGroup> + <PackageReference Include="Jypeli.NET" Version="11.*"/> + <PackageReference Include="Jypeli.FarseerPhysics.NET" Version="2.*"/> + </ItemGroup> + +</Project> -- GitLab