SHARE
TWEET

Untitled

a guest Oct 20th, 2019 107 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6.  
  7. namespace Task4
  8. {
  9.     class Program
  10.     {
  11.         static void Main(string[] args)
  12.         {
  13.             Console.SetWindowSize(100, 55);
  14.  
  15.             char wall = '#';
  16.             char player = '@';
  17.             char finish = '$';
  18.             char[,] map;
  19.             int userX = 1;
  20.             int userY = 1;
  21.  
  22.             Console.WriteLine("СЛУЧАЙНО ГЕНЕРИРУЕМЫЙ ЛАБИРИНТ!!!");
  23.             Console.WriteLine("Если сгенерируется непроходимый лабиринт я не виноват, это все случайные числа:)");
  24.             Console.WriteLine("Сгенерировать лабиринт по заданным значениям?");
  25.             Console.WriteLine("По заданным - да\nСлучайный - нет");
  26.             string command = Console.ReadLine().ToLower();
  27.  
  28.             if (command == "да")
  29.             {
  30.                 Console.Write("Введите длину лабиринта:");
  31.                 int x = Convert.ToInt32(Console.ReadLine());
  32.  
  33.                 Console.Write("Введите ширину лабиринта:");
  34.                 int y = Convert.ToInt32(Console.ReadLine());
  35.  
  36.                 Console.Write("Сколько стен будет в лабиринте:");
  37.                 int quantity = Convert.ToInt32(Console.ReadLine());
  38.  
  39.                 map = DrawMap(x, y, wall);
  40.                 map = GenerateWall(map, wall, quantity);
  41.             }
  42.             else
  43.             {
  44.                 Random random = new Random();
  45.  
  46.                 int x = random.Next(2, 80);
  47.                 int y = random.Next(2, 50);
  48.                 int quantity = random.Next(0, x * y / 2);
  49.  
  50.                 map = DrawMap(x, y, wall);
  51.                 map = GenerateWall(map, wall, quantity);
  52.             }
  53.  
  54.             map = SetFinish(map, '$');
  55.  
  56.             Console.CursorVisible = false;
  57.             Console.Clear();
  58.  
  59.             while (GameCompletion(map, userX, userY, finish))
  60.             {
  61.                 Console.SetCursorPosition(0, 0);
  62.  
  63.                 ShowMatrix(map);
  64.  
  65.                 ShowCharacter(userX, userY, player, ConsoleColor.Red);
  66.  
  67.                 ShowCharacter(map.GetLength(0) - 2, map.GetLength(1) - 2, finish, ConsoleColor.Green);
  68.  
  69.                 ConsoleKeyInfo userInput = Console.ReadKey();
  70.  
  71.                 PlayerMovement(map, wall, userInput, ref userX, ref userY);
  72.             }
  73.         }
  74.  
  75.         static char[,] DrawMap(int x, int y, char symbol)
  76.         {
  77.             char[,] map = new char[y, x];
  78.  
  79.             for (int i = 0; i < x; i++)
  80.             {
  81.                 map[0, i] = symbol;
  82.                 map[y - 1, i] = symbol;
  83.             }
  84.  
  85.             for (int i = 0; i < y; i++)
  86.             {
  87.                 map[i, 0] = symbol;
  88.                 map[i, x - 1] = symbol;
  89.             }
  90.  
  91.             return map;
  92.         }
  93.  
  94.         static char[,] GenerateWall(char[,] map, char symbol, int amountThorn)
  95.         {
  96.             Random random = new Random();
  97.  
  98.             for (int i = 0; i < amountThorn; i++)
  99.             {
  100.                 int colums = random.Next(0, map.GetLength(0) - 1);
  101.                 int row = random.Next(0, map.GetLength(1) - 1);
  102.  
  103.                 if (map[colums, row] != symbol && colums != 0 && row != 0 && colums != 1 && colums != 1)
  104.                 {
  105.                     map[colums, row] = symbol;
  106.                 }
  107.                 else
  108.                 {
  109.                     i--;
  110.                 }
  111.             }
  112.             return map;
  113.         }
  114.  
  115.         static void ShowMatrix(char[,] matrix)
  116.         {
  117.             for (int i = 0; i < matrix.GetLength(0); i++)
  118.             {
  119.                 for (int j = 0; j < matrix.GetLength(1); j++)
  120.                 {
  121.                     Console.Write(matrix[i, j]);
  122.                 }
  123.                 Console.WriteLine();
  124.             }
  125.         }
  126.  
  127.         static void ShowCharacter(int positionX, int positionY, char symbol, ConsoleColor color)
  128.         {
  129.             Console.ForegroundColor = color;
  130.             Console.SetCursorPosition(positionY, positionX);
  131.             Console.Write(symbol);
  132.             Console.ResetColor();
  133.         }
  134.  
  135.         static char[,] SetFinish(char[,] map, char symbol)
  136.         {
  137.             map[map.GetLength(0) - 2, map.GetLength(1) - 2] = symbol;
  138.  
  139.             return map;
  140.         }
  141.  
  142.         static void PlayerMovement(char[,] map, char wall, ConsoleKeyInfo userInput, ref int userX, ref int userY)
  143.         {
  144.             switch (userInput.Key)
  145.             {
  146.                 case ConsoleKey.UpArrow:
  147.                     if (map[userX - 1, userY] != wall)
  148.                     {
  149.                         userX--;
  150.                     }
  151.                     break;
  152.                 case ConsoleKey.DownArrow:
  153.                     if (map[userX + 1, userY] != wall)
  154.                     {
  155.                         userX++;
  156.                     }
  157.                     break;
  158.                 case ConsoleKey.LeftArrow:
  159.                     if (map[userX, userY - 1] != wall)
  160.                     {
  161.                         userY--;
  162.                     }
  163.                     break;
  164.                 case ConsoleKey.RightArrow:
  165.                     if (map[userX, userY + 1] != wall)
  166.                     {
  167.                         userY++;
  168.                     }
  169.                     break;
  170.             }
  171.         }
  172.  
  173.         static bool GameCompletion(char[,] map, int userX, int userY, char symbol)
  174.         {
  175.             if (map[userX, userY] == symbol)
  176.                 return false;
  177.             else
  178.                 return true;
  179.         }
  180.     }
  181. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top