Advertisement
Suslick

Game 0.3

Jul 13th, 2023 (edited)
156
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 9.84 KB | None | 0 0
  1.     class Program
  2.     {
  3.         static void Main(string[] args)
  4.         {
  5.             char[,] map;
  6.             char symbolPlayer;
  7.             char symbolWall;
  8.             int positionPlayerX;
  9.             int positionPlayerY;
  10.  
  11.             CreateMap(out map, out symbolWall);
  12.  
  13.             Console.WriteLine("Введите символ игрока");
  14.             symbolPlayer = GetSymbol();
  15.            
  16.             AppointPlayerPlace(map, out positionPlayerX, out positionPlayerY, symbolWall);
  17.  
  18.             PlayGame(map, positionPlayerX, positionPlayerY, symbolPlayer, symbolWall);
  19.  
  20.             Console.ReadLine();
  21.         }
  22.  
  23.         private static void CreateMap(out char[,] map, out char symbolWall)
  24.         {
  25.             const int MapChangeCommand = 1;
  26.             const int ExitCommand = 2;
  27.  
  28.             bool isCreate = true;
  29.  
  30.             Console.WriteLine("Введите длину карты");
  31.             int mapLength = GetNumber();
  32.            
  33.             Console.WriteLine("Введите ширину карты");
  34.             int mapWidth = GetNumber();
  35.  
  36.             map = new char[mapWidth, mapLength];
  37.  
  38.             Console.WriteLine("Введите символ стены");
  39.             symbolWall = GetSymbol();
  40.  
  41.             FillMap(map, symbolWall);
  42.  
  43.             DrawMap(map);
  44.  
  45.             while (isCreate)
  46.             {
  47.                 Console.WriteLine($"{MapChangeCommand}: Изменить карту\n" +
  48.                 $"{ExitCommand}: Выход\n");
  49.  
  50.                 int userInput = GetNumber();
  51.  
  52.                 switch (userInput)
  53.                 {
  54.                     case MapChangeCommand:
  55.                         ChangeMap(map, symbolWall);
  56.                         break;
  57.  
  58.                     case ExitCommand:
  59.                         isCreate = false;
  60.                         break;
  61.  
  62.                     default:
  63.                         Console.WriteLine("Неверный ввод");
  64.                         break;
  65.                 }
  66.             }
  67.  
  68.             Console.Clear();
  69.             Console.SetCursorPosition(0, 0);
  70.         }
  71.  
  72.         private static void AppointPlayerPlace(char[,] map, out int positionX, out int positionY, char symbolWall)
  73.         {
  74.             Console.Clear();
  75.  
  76.             bool isPlayerPlace = true;
  77.             positionX = 0;
  78.             positionY = 0;
  79.  
  80.             DrawMap(map);
  81.  
  82.             while (isPlayerPlace)
  83.             {
  84.                 Console.WriteLine("Введите позицию по X");
  85.                 positionX = GetNumber();
  86.  
  87.                 Console.WriteLine("Введите позицию по Y");
  88.                 positionY = GetNumber();
  89.  
  90.                 if (positionX > 0 && positionX < map.GetLength(1) && positionY > 0 && positionY < map.GetLength(0))
  91.                 {
  92.                     if (map[positionX, positionY] != symbolWall)
  93.                     {
  94.                         isPlayerPlace = false;
  95.                     }
  96.                     else
  97.                     {
  98.                         Console.WriteLine("Неверный ввод");
  99.                     }
  100.                 }
  101.             }
  102.  
  103.             Console.Clear();
  104.             Console.SetCursorPosition(0, 0);
  105.             Console.WriteLine("Место выбрано");
  106.         }
  107.  
  108.         private static void PlayGame(char[,] map, int positionX, int positionY, char symbolPlayer, char symbolWall)
  109.         {
  110.             int directionX;
  111.             int directionY;
  112.             bool isPlaying = true;
  113.  
  114.             Console.Clear();
  115.             Console.CursorVisible = false;
  116.  
  117.             DrawMap(map);
  118.  
  119.             DisplaySymbol(positionY, positionX, symbolPlayer);
  120.  
  121.             while (isPlaying)
  122.             {
  123.                 ConsoleKeyInfo key = GetKey();
  124.  
  125.                 GetDirection(out directionX, out directionY, key);
  126.  
  127.                 if (map[positionX + directionX, positionY + directionY] != symbolWall)
  128.                 {
  129.                     Move(ref positionX, ref positionY, ref directionX, ref directionY, symbolPlayer);
  130.                 }
  131.  
  132.                 System.Threading.Thread.Sleep(200);
  133.             }
  134.         }
  135.  
  136.         private static void ChangeMap(char[,] map, char symbolWall)
  137.         {
  138.             const ConsoleKey SaveCommand = ConsoleKey.S;
  139.             const ConsoleKey PutWallCommand = ConsoleKey.Spacebar;
  140.  
  141.             bool isChanged = false;
  142.             bool isSpacebar = false;
  143.             int directionX;
  144.             int directionY;
  145.             int positionX = 1;
  146.             int positionY = 1;
  147.  
  148.             Console.Clear();
  149.  
  150.             Console.WriteLine($"Стрелки: Перемещение\n" +
  151.                 $"S : Сохранить\n" +
  152.                 $"Space : Поставить стенку\n");
  153.             Console.WriteLine("Нажмите любую кнопку для продолжения ...");
  154.             Console.ReadKey();
  155.  
  156.             Console.Clear();
  157.  
  158.             Console.CursorVisible = false;
  159.  
  160.             DrawMap(map);
  161.  
  162.             DisplaySymbol(positionX, positionY, symbolWall);
  163.  
  164.             while (isChanged == false)
  165.             {
  166.                 ConsoleKeyInfo key = GetKey();
  167.  
  168.                 GetDirection(out directionX, out directionY,key);
  169.  
  170.                 switch (key.Key)
  171.                 {
  172.                     case PutWallCommand:
  173.                         isSpacebar = PutWalls(map,positionX, positionY, symbolWall);
  174.                         break;
  175.  
  176.                     case SaveCommand:
  177.                         isChanged = true;
  178.                         break;
  179.                 }
  180.  
  181.                 if (directionY != 0 || directionX != 0)
  182.                 {
  183.                     if (map[positionX + directionX, positionY + directionY] != symbolWall)
  184.                     {
  185.                         Move(ref positionX, ref positionY, ref directionX, ref directionY, symbolWall);
  186.                     }
  187.  
  188.                     if (isSpacebar)
  189.                     {
  190.                         Console.Clear();
  191.  
  192.                         DrawMap(map);
  193.  
  194.                         DisplaySymbol(positionX, positionY, symbolWall);
  195.  
  196.                         isSpacebar = false;
  197.                     }
  198.                 }
  199.             }
  200.  
  201.             Console.Clear();
  202.             Console.SetCursorPosition(0, 0);
  203.             Console.SetCursorPosition(0, 0);
  204.             Console.WriteLine("Карта изменена");
  205.             Console.CursorVisible = true;
  206.         }
  207.  
  208.         private static void Move(ref int positionX, ref int positionY, ref int directionX, ref int directionY,char symbolPlayer)
  209.         {
  210.             DisplaySymbol(positionX, positionY);
  211.  
  212.             positionX += directionX;
  213.             positionY += directionY;
  214.  
  215.             DisplaySymbol(positionX, positionY, symbolPlayer);
  216.         }
  217.         private static void GetDirection(out int playerDirectionX, out int playerDirectionY, ConsoleKeyInfo key)
  218.         {
  219.             const ConsoleKey UpCommand = ConsoleKey.UpArrow;
  220.             const ConsoleKey DownCommand = ConsoleKey.DownArrow;
  221.             const ConsoleKey LeftCommand = ConsoleKey.LeftArrow;
  222.             const ConsoleKey RightCommand = ConsoleKey.RightArrow;
  223.  
  224.             playerDirectionX = 0;
  225.             playerDirectionY = 0;
  226.  
  227.             switch (key.Key)
  228.             {
  229.                 case UpCommand:
  230.                     playerDirectionX = -1;
  231.                     break;
  232.  
  233.                 case DownCommand:
  234.                     playerDirectionX = 1;
  235.                     break;
  236.  
  237.                 case LeftCommand:
  238.                     playerDirectionY = -1;
  239.                     break;
  240.  
  241.                 case RightCommand:
  242.                     playerDirectionY = 1;
  243.                     break;
  244.             }
  245.         }
  246.    
  247.         private static ConsoleKeyInfo GetKey()
  248.         {
  249.             ConsoleKeyInfo key = new ConsoleKeyInfo();
  250.            
  251.             if (Console.KeyAvailable)
  252.             {
  253.               key = Console.ReadKey(true);
  254.             }
  255.  
  256.             return key;
  257.         }
  258.  
  259.      
  260.         private static bool PutWalls(char[,] map, int positionX, int positionY, char symbolWall)
  261.         {
  262.             map[positionX, positionY] = symbolWall;
  263.             return true;
  264.         }
  265.  
  266.         private static void FillMap(char[,] map, char symbolWall)
  267.         {
  268.             for (int i = 0; i < map.GetLength(1); i++)
  269.             {
  270.                 map[0, i] = symbolWall;
  271.             }
  272.  
  273.             for (int i = 1; i < map.GetLength(0)-1; i++)
  274.             {
  275.                 map[i, 0] = symbolWall;
  276.                 map[i, map.GetLength(1) - 1] = symbolWall;
  277.             }
  278.  
  279.             for (int i = 0; i < map.GetLength(1); i++)
  280.             {
  281.                 map[map.GetLength(0)-1, i] = symbolWall;
  282.             }
  283.         }
  284.  
  285.  
  286.         private static void DisplaySymbol(int positionX, int positionY, char symbol = ' ')
  287.         {
  288.             Console.SetCursorPosition(positionY, positionX);
  289.             Console.Write(symbol);
  290.         }
  291.  
  292.         private static void DrawMap(char[,] map)
  293.         {
  294.             for (int i = 0; i < map.GetLength(0); i++)
  295.             {
  296.                 for (int j = 0; j < map.GetLength(1); j++)
  297.                 {
  298.                     Console.Write(map[i, j]);
  299.                 }
  300.  
  301.                 Console.WriteLine("");
  302.             }
  303.         }
  304.  
  305.         private static int GetNumber()
  306.         {
  307.             int number = 0;
  308.  
  309.             while (int.TryParse(Console.ReadLine(), out number) == false)
  310.             {
  311.                 Console.WriteLine("Неверный ввод");
  312.             }
  313.  
  314.             return number;
  315.         }
  316.  
  317.         private static char GetSymbol()
  318.         {
  319.             char symbol = ' ';
  320.  
  321.             while (char.TryParse(Console.ReadLine(), out symbol) == false)
  322.             {
  323.                 Console.WriteLine("Неверный ввод");
  324.             }
  325.  
  326.             return symbol;
  327.         }
  328.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement