diff --git a/Game/Game.sln b/Game/Game.sln
new file mode 100644
index 0000000..c6e097f
--- /dev/null
+++ b/Game/Game.sln
@@ -0,0 +1,31 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.4.33403.182
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Game", "Game\Game.csproj", "{9B96D5C7-8B64-463D-9AA8-E25AA17831C8}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestsForGame", "TestsForGame\TestsForGame.csproj", "{8F9ECC7B-3D85-4839-930E-90A426CD0E34}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {9B96D5C7-8B64-463D-9AA8-E25AA17831C8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {9B96D5C7-8B64-463D-9AA8-E25AA17831C8}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {9B96D5C7-8B64-463D-9AA8-E25AA17831C8}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {9B96D5C7-8B64-463D-9AA8-E25AA17831C8}.Release|Any CPU.Build.0 = Release|Any CPU
+ {8F9ECC7B-3D85-4839-930E-90A426CD0E34}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {8F9ECC7B-3D85-4839-930E-90A426CD0E34}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {8F9ECC7B-3D85-4839-930E-90A426CD0E34}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {8F9ECC7B-3D85-4839-930E-90A426CD0E34}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {44167783-B5A0-436E-A141-633477AFAD18}
+ EndGlobalSection
+EndGlobal
diff --git a/Game/Game/EventLoop.cs b/Game/Game/EventLoop.cs
new file mode 100644
index 0000000..18baf86
--- /dev/null
+++ b/Game/Game/EventLoop.cs
@@ -0,0 +1,117 @@
+namespace Game;
+
+public delegate void ArrowHandler(int startPositionLeft, int startPositionTop, WorkWithConsole data, ref List<((int, int), char)> forTests);
+
+///
+/// Event handler implementation class
+///
+public static class EventLoop
+{
+ ///
+ /// Event Handler
+ ///
+ /// Function for moving to the left
+ /// Function for moving to the right
+ /// Function for moving to the up
+ /// Function for moving to the down
+ /// File with map
+ /// The selected type for testing or normal operation
+ /// A list intended for entering results for tests ONLY
+ /// List of commands for tests ONLY
+ /// Incorrectly set map
+ /// Checking that the read card line is not empty
+ public static void Run(ArrowHandler left, ArrowHandler right, ArrowHandler up, ArrowHandler down,
+ string fileWithMap, WorkWithConsole data, ref List<((int, int), char)> forTests, List listKeys = null)
+ {
+ int length = 0;
+ int width = 0;
+ var file = new StreamReader(fileWithMap);
+ int sizeAtSymbols = 0;
+ int sizeSpaces = 0;
+ bool isFirst = true;
+ while (!file.EndOfStream)
+ {
+ if (!isFirst)
+ {
+ if (width == 1 && sizeAtSymbols != length)
+ {
+ throw new InvalidMapException();
+ }
+ else if (width != 1 && sizeAtSymbols != 2 || sizeSpaces != length - sizeAtSymbols)
+ {
+ throw new InvalidMapException();
+ }
+ }
+ var line = file.ReadLine();
+ ++width;
+ if (line == null)
+ {
+ throw new ArgumentException();
+ }
+ int size = line.Count(x => x == '@');
+ if (length != 0 && length != line.Length)
+ {
+ throw new InvalidMapException();
+ }
+ length = line.Length;
+ sizeAtSymbols = line.Count(x => x == '@');
+ sizeSpaces = line.Count(x => x == ' ');
+ isFirst = false;
+ Console.WriteLine(line);
+ }
+ if (sizeAtSymbols != length)
+ {
+ throw new InvalidMapException();
+ }
+
+ if (width < 3 || length < 3)
+ {
+ throw new InvalidMapException();
+ }
+ data.SetCursorPosition(length / 2, width / 2, ref forTests);
+ data.Print('@', ref forTests);
+ int startPositionLeft = length / 2;
+ int startPositionTop = width / 2;
+ data.SetCursorPosition(startPositionLeft, startPositionTop, ref forTests);
+ var checkType = new PrintInList();
+ while (true)
+ {
+ if (data.GetType() == checkType.GetType() && listKeys.Count == 0)
+ {
+ return;
+ }
+ var key = data.Comparison(listKeys);
+ switch (key)
+ {
+ case "left":
+ if (startPositionLeft != 1)
+ {
+ left(startPositionLeft, startPositionTop, data, ref forTests);
+ --startPositionLeft;
+ }
+ break;
+ case "right":
+ if (startPositionLeft != length - 2)
+ {
+ right(startPositionLeft, startPositionTop, data, ref forTests);
+ ++startPositionLeft;
+ }
+ break;
+ case "up":
+ if (startPositionTop != 1)
+ {
+ up(startPositionLeft, startPositionTop, data, ref forTests);
+ --startPositionTop;
+ }
+ break;
+ case "down":
+ if (startPositionTop != width - 2)
+ {
+ down(startPositionLeft, startPositionTop, data, ref forTests);
+ ++startPositionTop;
+ }
+ break;
+ }
+ }
+ }
+}
diff --git a/Game/Game/Game.cs b/Game/Game/Game.cs
new file mode 100644
index 0000000..e882bb7
--- /dev/null
+++ b/Game/Game/Game.cs
@@ -0,0 +1,67 @@
+namespace Game;
+
+///
+/// A class that implements actions in the game
+///
+public static class Game
+{
+ ///
+ /// Move to the Left
+ ///
+ /// X coordinate
+ /// Y coordinate
+ /// Selected type: testing or normal launch
+ /// The list of entering results for tests ONLY
+ public static void OnLeft(int startPositionLeft, int startPositionTop, WorkWithConsole data, ref List<((int, int), char)> forTests)
+ {
+ data.Print(' ', ref forTests);
+ data.SetCursorPosition(startPositionLeft - 1, startPositionTop, ref forTests);
+ data.Print('@', ref forTests);
+ data.SetCursorPosition(startPositionLeft - 1, startPositionTop, ref forTests);
+ }
+
+ ///
+ /// Move to the Right
+ ///
+ /// X coordinate
+ /// Y coordinate
+ /// Selected type: testing or normal launch
+ /// The list of entering results for tests ONLY
+ public static void OnRight(int startPositionLeft, int startPositionTop, WorkWithConsole data, ref List<((int, int), char)> forTests)
+ {
+ data.Print(' ', ref forTests);
+ data.SetCursorPosition(startPositionLeft + 1, startPositionTop, ref forTests);
+ data.Print('@', ref forTests);
+ data.SetCursorPosition(startPositionLeft + 1, startPositionTop, ref forTests);
+ }
+
+ ///
+ /// Move to the Up
+ ///
+ /// X coordinate
+ /// Y coordinate
+ /// Selected type: testing or normal launch
+ /// The list of entering results for tests ONLY
+ public static void OnUp(int startPositionLeft, int startPositionTop, WorkWithConsole data, ref List<((int, int), char)> forTests)
+ {
+ data.Print(' ', ref forTests);
+ data.SetCursorPosition(startPositionLeft, startPositionTop - 1, ref forTests);
+ data.Print('@', ref forTests);
+ data.SetCursorPosition(startPositionLeft, startPositionTop - 1, ref forTests);
+ }
+
+ ///
+ /// Move to the Down
+ ///
+ /// X coordinate
+ /// Y coordinate
+ /// Selected type: testing or normal launch
+ /// The list of entering results for tests ONLY
+ public static void OnDown(int startPositionLeft, int startPositionTop, WorkWithConsole data, ref List<((int, int), char)> forTests)
+ {
+ data.Print(' ', ref forTests);
+ data.SetCursorPosition(startPositionLeft, startPositionTop + 1, ref forTests);
+ data.Print('@', ref forTests);
+ data.SetCursorPosition(startPositionLeft, startPositionTop + 1, ref forTests);
+ }
+}
diff --git a/Game/Game/Game.csproj b/Game/Game/Game.csproj
new file mode 100644
index 0000000..f02677b
--- /dev/null
+++ b/Game/Game/Game.csproj
@@ -0,0 +1,10 @@
+
+
+
+ Exe
+ net7.0
+ enable
+ enable
+
+
+
diff --git a/Game/Game/Interface.cs b/Game/Game/Interface.cs
new file mode 100644
index 0000000..6e30b97
--- /dev/null
+++ b/Game/Game/Interface.cs
@@ -0,0 +1,29 @@
+namespace Game;
+
+///
+/// The interface for the game, namely for tests and normal startup
+///
+interface GameInterface
+{
+ ///
+ /// For a normal launch, it prints to the console for tests, it is included in a special list
+ ///
+ /// Symbol for printing
+ /// The list is necessary ONLY for tests
+ void Print(char symbol, ref List<((int, int), char)> forTests);
+
+ ///
+ /// For normal work, it puts the cursor in the console at the specified coordinates, for tests it fixes cursor changes in a special list
+ ///
+ /// X coordinate
+ /// Y coordinates
+ /// The list is for tests ONLY changes are being made here
+ void SetCursorPosition(int positionLeft, int PositionTop, ref List<((int, int), char)> forTests);
+
+ ///
+ /// Different comparison for tests and for a normal run
+ ///
+ /// List of commands for tests only
+ /// Returns a string: left up right down
+ string Comparison(List listKeys = null);
+}
\ No newline at end of file
diff --git a/Game/Game/InvalidMapException.cs b/Game/Game/InvalidMapException.cs
new file mode 100644
index 0000000..bd07809
--- /dev/null
+++ b/Game/Game/InvalidMapException.cs
@@ -0,0 +1,6 @@
+namespace Game;
+
+///
+/// Throws exception then incorrect input map
+///
+public class InvalidMapException : Exception {}
\ No newline at end of file
diff --git a/Game/Game/PrintInConsole.cs b/Game/Game/PrintInConsole.cs
new file mode 100644
index 0000000..77ec662
--- /dev/null
+++ b/Game/Game/PrintInConsole.cs
@@ -0,0 +1,34 @@
+namespace Game;
+
+///
+/// Implements an interface for tests
+///
+public class PrintInConsole : WorkWithConsole
+{
+ public override void Print(char symbol, ref List<((int, int), char)> forTests)
+ {
+ Console.Write(symbol);
+ }
+
+ public override void SetCursorPosition(int positionLeft, int PositionTop, ref List<((int, int), char)> forTests)
+ {
+ Console.SetCursorPosition(positionLeft, PositionTop);
+ }
+
+ public override string Comparison(List listKeys = null)
+ {
+ var key = Console.ReadKey(true);
+ switch (key.Key)
+ {
+ case ConsoleKey.LeftArrow:
+ return "left";
+ case ConsoleKey.RightArrow:
+ return "right";
+ case ConsoleKey.UpArrow:
+ return "up";
+ case ConsoleKey.DownArrow:
+ return "down";
+ }
+ return "another";
+ }
+}
\ No newline at end of file
diff --git a/Game/Game/PrintInList.cs b/Game/Game/PrintInList.cs
new file mode 100644
index 0000000..886eafd
--- /dev/null
+++ b/Game/Game/PrintInList.cs
@@ -0,0 +1,48 @@
+namespace Game;
+
+///
+/// Implements the interface for the console
+///
+public class PrintInList:WorkWithConsole
+{
+ public override void Print(char symbol, ref List<((int, int), char)> forTests)
+ {
+ if (forTests == null)
+ {
+ throw new NullReferenceException();
+ }
+ forTests.Add(((-1, -1), symbol));
+ }
+
+ public override void SetCursorPosition(int positionLeft, int PositionTop, ref List<((int, int), char)> forTests)
+ {
+ if (forTests == null)
+ {
+ throw new NullReferenceException();
+ }
+ forTests.Add(((positionLeft, PositionTop), '\0'));
+ }
+
+ public override string Comparison(List listKeys = null)
+ {
+ if (listKeys == null)
+ {
+ throw new NullReferenceException();
+ }
+ var key = listKeys.First();
+ listKeys.RemoveAt(0);
+ switch (key)
+ {
+ case '%':
+ return "left";
+ case '&':
+ return "up";
+ case '\'':
+ return "right";
+ case '(':
+ return "down";
+ }
+ return "another";
+
+ }
+}
\ No newline at end of file
diff --git a/Game/Game/Program.cs b/Game/Game/Program.cs
new file mode 100644
index 0000000..99bfd94
--- /dev/null
+++ b/Game/Game/Program.cs
@@ -0,0 +1,33 @@
+namespace Game;
+
+public class Program
+{
+ public static void Main()
+ {
+ char symbol = (char)38;
+ Console.WriteLine("Input your string with file path");
+ var filePath = Console.ReadLine();
+ Console.Clear();
+ List<((int, int), char)> list = new List<((int, int), char)>();
+ try
+ {
+ EventLoop.Run(
+ new ArrowHandler(Game.OnLeft),
+ new ArrowHandler(Game.OnRight),
+ new ArrowHandler(Game.OnUp),
+ new ArrowHandler(Game.OnDown),
+ filePath,
+ new PrintInConsole(),
+ ref list
+ );
+ }
+ catch (InvalidMapException)
+ {
+ Console.WriteLine("Incorrect map");
+ }
+ catch (NullReferenceException)
+ {
+ Console.WriteLine("Problems with file or reading lines in file");
+ }
+ }
+}
\ No newline at end of file
diff --git a/Game/Game/WorkWithConsole.cs b/Game/Game/WorkWithConsole.cs
new file mode 100644
index 0000000..82b9703
--- /dev/null
+++ b/Game/Game/WorkWithConsole.cs
@@ -0,0 +1,13 @@
+namespace Game;
+
+///
+/// Ancestor of two implementation classes one for tests the other for use
+///
+abstract public class WorkWithConsole : GameInterface
+{
+ virtual public void Print(char symbol, ref List<((int, int), char)> forTests) { }
+
+ virtual public void SetCursorPosition(int positionLeft, int PositionTop,ref List<((int, int), char)> forTests) { }
+
+ virtual public string Comparison(List listKeys = null) { return null; }
+}
\ No newline at end of file
diff --git a/Game/TestsForGame/TestsForGame.cs b/Game/TestsForGame/TestsForGame.cs
new file mode 100644
index 0000000..67df676
--- /dev/null
+++ b/Game/TestsForGame/TestsForGame.cs
@@ -0,0 +1,191 @@
+namespace TestsForGame;
+
+using Game;
+using System.Linq;
+
+public class Tests
+{
+ [Test]
+ public void TheIncorrectMapWithIncorrectSymbolShouldThrowException()
+ {
+ var forTests = new List<((int, int), char)>();
+ Assert.Throws(() => EventLoop.Run(Game.OnLeft, Game.OnRight, Game.OnUp, Game.OnDown, Path.Combine(TestContext.CurrentContext.TestDirectory, "TestsForGame", "IncorrectMapWithIncorrectSymbol.txt"), new PrintInList(), ref forTests));
+ }
+
+ [Test]
+ public void TheIncorrectMapWithTooSmallSizeShouldThrowException()
+ {
+ var forTests = new List<((int, int), char)>();
+ Assert.Throws(() => EventLoop.Run(Game.OnLeft, Game.OnRight, Game.OnUp, Game.OnDown, Path.Combine(TestContext.CurrentContext.TestDirectory, "TestsForGame", "IncorrectMapWithToSmallSize.txt"), new PrintInList(), ref forTests));
+ }
+
+ [Test]
+ public void TheCharacterMustWalkCorrectlyToTheLeft()
+ {
+ var printInList = new PrintInList();
+ var forTests = new List<((int, int), char)>();
+ var listChar = new List();
+ listChar.Add((char)37);
+ var listCheck = new List<((int, int), char)>();
+ listCheck.Add(((8, 3), '\0'));
+ listCheck.Add(((-1, -1), '@'));
+ listCheck.Add(((8, 3), '\0'));
+ listCheck.Add(((-1, -1), ' '));
+ listCheck.Add(((7, 3), '\0'));
+ listCheck.Add(((-1, -1), '@'));
+ listCheck.Add(((7, 3), '\0'));
+ EventLoop.Run(Game.OnLeft, Game.OnRight, Game.OnUp, Game.OnDown,
+ Path.Combine(TestContext.CurrentContext.TestDirectory, "TestsForGame", "NormalMap.txt"),
+ printInList, ref forTests, listChar);
+ Assert.True(forTests.SequenceEqual(listCheck));
+ }
+
+ [Test]
+ public void TheCharacterMustWalkCorrectlyToTheUp()
+ {
+ var printInList = new PrintInList();
+ var forTests = new List<((int, int), char)>();
+ var listChar = new List();
+ listChar.Add((char)38);
+ var listCheck = new List<((int, int), char)>();
+ listCheck.Add(((8, 3), '\0'));
+ listCheck.Add(((-1, -1), '@'));
+ listCheck.Add(((8, 3), '\0'));
+ listCheck.Add(((-1, -1), ' '));
+ listCheck.Add(((8, 2), '\0'));
+ listCheck.Add(((-1, -1), '@'));
+ listCheck.Add(((8, 2), '\0'));
+ EventLoop.Run(Game.OnLeft, Game.OnRight, Game.OnUp, Game.OnDown,
+ Path.Combine(TestContext.CurrentContext.TestDirectory, "TestsForGame", "NormalMap.txt"),
+ printInList, ref forTests, listChar);
+ Assert.True(forTests.SequenceEqual(listCheck));
+ }
+
+ [Test]
+ public void TheCharacterMustWalkCorrectlyToTheRight()
+ {
+ var printInList = new PrintInList();
+ var forTests = new List<((int, int), char)>();
+ var listChar = new List();
+ listChar.Add((char)39);
+ var listCheck = new List<((int, int), char)>();
+ listCheck.Add(((8, 3), '\0'));
+ listCheck.Add(((-1, -1), '@'));
+ listCheck.Add(((8, 3), '\0'));
+ listCheck.Add(((-1, -1), ' '));
+ listCheck.Add(((9, 3), '\0'));
+ listCheck.Add(((-1, -1), '@'));
+ listCheck.Add(((9, 3), '\0'));
+ EventLoop.Run(Game.OnLeft, Game.OnRight, Game.OnUp, Game.OnDown,
+ Path.Combine(TestContext.CurrentContext.TestDirectory, "TestsForGame", "NormalMap.txt"),
+ printInList, ref forTests, listChar);
+ Assert.True(forTests.SequenceEqual(listCheck));
+ }
+
+ [Test]
+ public void TheCharacterMustWalkCorrectlyToTheDown()
+ {
+ var printInList = new PrintInList();
+ var forTests = new List<((int, int), char)>();
+ var listChar = new List();
+ listChar.Add((char)40);
+ var listCheck = new List<((int, int), char)>();
+ listCheck.Add(((8, 3), '\0'));
+ listCheck.Add(((-1, -1), '@'));
+ listCheck.Add(((8, 3), '\0'));
+ listCheck.Add(((-1, -1), ' '));
+ listCheck.Add(((8, 4), '\0'));
+ listCheck.Add(((-1, -1), '@'));
+ listCheck.Add(((8, 4), '\0'));
+ EventLoop.Run(Game.OnLeft, Game.OnRight, Game.OnUp, Game.OnDown,
+ Path.Combine(TestContext.CurrentContext.TestDirectory, "TestsForGame", "NormalMap.txt"),
+ printInList, ref forTests, listChar);
+ Assert.True(forTests.SequenceEqual(listCheck));
+ }
+
+ [Test]
+ public void TheCharacterMustNotWalkIfPressedIncorrectKey()
+ {
+ var printInList = new PrintInList();
+ var forTests = new List<((int, int), char)>();
+ var listChar = new List();
+ listChar.Add('b');
+ var listCheck = new List<((int, int), char)>();
+ listCheck.Add(((8, 3), '\0'));
+ listCheck.Add(((-1, -1), '@'));
+ listCheck.Add(((8, 3), '\0'));
+ EventLoop.Run(Game.OnLeft, Game.OnRight, Game.OnUp, Game.OnDown,
+ Path.Combine(TestContext.CurrentContext.TestDirectory, "TestsForGame", "NormalMap.txt"),
+ printInList, ref forTests, listChar);
+ Assert.True(forTests.SequenceEqual(listCheck));
+ }
+
+ [Test]
+ public void TheCharacterMustNotWalkIfItRestsAgainstTheWallWhenWalkingToTheLeft()
+ {
+ var printInList = new PrintInList();
+ var forTests = new List<((int, int), char)>();
+ var listChar = new List();
+ listChar.Add((char)37);
+ var listCheck = new List<((int, int), char)>();
+ listCheck.Add(((1, 1), '\0'));
+ listCheck.Add(((-1, -1), '@'));
+ listCheck.Add(((1, 1), '\0'));
+ EventLoop.Run(Game.OnLeft, Game.OnRight, Game.OnUp, Game.OnDown,
+ Path.Combine(TestContext.CurrentContext.TestDirectory, "TestsForGame", "MapWithCloseWalls.txt"),
+ printInList, ref forTests, listChar);
+ Assert.True(forTests.SequenceEqual(listCheck));
+ }
+
+ [Test]
+ public void TheCharacterMustNotWalkIfItRestsAgainstTheWallWhenWalkingToTheUp()
+ {
+ var printInList = new PrintInList();
+ var forTests = new List<((int, int), char)>();
+ var listChar = new List();
+ listChar.Add((char)38);
+ var listCheck = new List<((int, int), char)>();
+ listCheck.Add(((1, 1), '\0'));
+ listCheck.Add(((-1, -1), '@'));
+ listCheck.Add(((1, 1), '\0'));
+ EventLoop.Run(Game.OnLeft, Game.OnRight, Game.OnUp, Game.OnDown,
+ Path.Combine(TestContext.CurrentContext.TestDirectory, "TestsForGame", "MapWithCloseWalls.txt"),
+ printInList, ref forTests, listChar);
+ Assert.True(forTests.SequenceEqual(listCheck));
+ }
+
+ [Test]
+ public void TheCharacterMustNotWalkIfItRestsAgainstTheWallWhenWalkingToTheRight()
+ {
+ var printInList = new PrintInList();
+ var forTests = new List<((int, int), char)>();
+ var listChar = new List();
+ listChar.Add((char)39);
+ var listCheck = new List<((int, int), char)>();
+ listCheck.Add(((1, 1), '\0'));
+ listCheck.Add(((-1, -1), '@'));
+ listCheck.Add(((1, 1), '\0'));
+ EventLoop.Run(Game.OnLeft, Game.OnRight, Game.OnUp, Game.OnDown,
+ Path.Combine(TestContext.CurrentContext.TestDirectory, "TestsForGame", "MapWithCloseWalls.txt"),
+ printInList, ref forTests, listChar);
+ Assert.True(forTests.SequenceEqual(listCheck));
+ }
+
+
+ [Test]
+ public void TheCharacterMustNotWalkIfItRestsAgainstTheWallWhenWalkingToTheDown()
+ {
+ var printInList = new PrintInList();
+ var forTests = new List<((int, int), char)>();
+ var listChar = new List();
+ listChar.Add((char)40);
+ var listCheck = new List<((int, int), char)>();
+ listCheck.Add(((1, 1), '\0'));
+ listCheck.Add(((-1, -1), '@'));
+ listCheck.Add(((1, 1), '\0'));
+ EventLoop.Run(Game.OnLeft, Game.OnRight, Game.OnUp, Game.OnDown,
+ Path.Combine(TestContext.CurrentContext.TestDirectory, "TestsForGame", "MapWithCloseWalls.txt"),
+ printInList, ref forTests, listChar);
+ Assert.True(forTests.SequenceEqual(listCheck));
+ }
+}
\ No newline at end of file
diff --git a/Game/TestsForGame/TestsForGame.csproj b/Game/TestsForGame/TestsForGame.csproj
new file mode 100644
index 0000000..98dc0cf
--- /dev/null
+++ b/Game/TestsForGame/TestsForGame.csproj
@@ -0,0 +1,23 @@
+
+
+
+ net7.0
+ enable
+ enable
+
+ false
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Game/TestsForGame/Usings.cs b/Game/TestsForGame/Usings.cs
new file mode 100644
index 0000000..cefced4
--- /dev/null
+++ b/Game/TestsForGame/Usings.cs
@@ -0,0 +1 @@
+global using NUnit.Framework;
\ No newline at end of file
diff --git a/Game/TestsForGame/bin/Debug/net7.0/TestsForGame/IncorrectMapWithIncorrectSymbol.txt b/Game/TestsForGame/bin/Debug/net7.0/TestsForGame/IncorrectMapWithIncorrectSymbol.txt
new file mode 100644
index 0000000..9e73731
--- /dev/null
+++ b/Game/TestsForGame/bin/Debug/net7.0/TestsForGame/IncorrectMapWithIncorrectSymbol.txt
@@ -0,0 +1,3 @@
+@@@@@
+@ d @
+@@@@@
\ No newline at end of file
diff --git a/Game/TestsForGame/bin/Debug/net7.0/TestsForGame/IncorrectMapWithToSmallSize.txt b/Game/TestsForGame/bin/Debug/net7.0/TestsForGame/IncorrectMapWithToSmallSize.txt
new file mode 100644
index 0000000..c13cf5f
--- /dev/null
+++ b/Game/TestsForGame/bin/Debug/net7.0/TestsForGame/IncorrectMapWithToSmallSize.txt
@@ -0,0 +1,2 @@
+@@
+@@
\ No newline at end of file
diff --git a/Game/TestsForGame/bin/Debug/net7.0/TestsForGame/MapWithCloseWalls.txt b/Game/TestsForGame/bin/Debug/net7.0/TestsForGame/MapWithCloseWalls.txt
new file mode 100644
index 0000000..10af905
--- /dev/null
+++ b/Game/TestsForGame/bin/Debug/net7.0/TestsForGame/MapWithCloseWalls.txt
@@ -0,0 +1,3 @@
+@@@
+@ @
+@@@
\ No newline at end of file
diff --git a/Game/TestsForGame/bin/Debug/net7.0/TestsForGame/NormalMap.txt b/Game/TestsForGame/bin/Debug/net7.0/TestsForGame/NormalMap.txt
new file mode 100644
index 0000000..7befade
--- /dev/null
+++ b/Game/TestsForGame/bin/Debug/net7.0/TestsForGame/NormalMap.txt
@@ -0,0 +1,7 @@
+@@@@@@@@@@@@@@@@@
+@ @
+@ @
+@ @
+@ @
+@ @
+@@@@@@@@@@@@@@@@@
\ No newline at end of file