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