IGRODELOFF

Task31

May 29th, 2022 (edited)
55
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 6.51 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6.  
  7. namespace Task31._1
  8. {
  9.     internal class Program
  10.     {
  11.         static void Main(string[] args)
  12.         {
  13.             int heroPositionX;
  14.             int heroPositionY;
  15.             int heroPositionChangeX = 0;
  16.             int heroPositionChangeY = 1;
  17.             int allDots = 0;
  18.             int collectDots = 0;
  19.             int divisionFindHalves = 2;
  20.             int halfDots;
  21.  
  22.             string youWin = "Вы победили!";
  23.  
  24.             bool isPlaying = true;
  25.  
  26.             char[,] map = CreateMap(out heroPositionX, out heroPositionY, ref allDots);
  27.  
  28.             DrawMap(map);
  29.  
  30.             while (isPlaying)
  31.             {
  32.                 Console.SetCursorPosition(0, 20);
  33.                 Console.WriteLine($"Собрано {collectDots}/{allDots}");
  34.  
  35.                 if (Console.KeyAvailable)
  36.                 {
  37.                     ConsoleKeyInfo key = Console.ReadKey(true);
  38.  
  39.                     ChangeDirection(key, ref heroPositionChangeX, ref heroPositionChangeY, ref isPlaying);
  40.                 }
  41.  
  42.                 if (map[heroPositionX + heroPositionChangeX, heroPositionY + heroPositionChangeY] != '#')
  43.                 {
  44.                     Move(ref heroPositionX, ref heroPositionY, heroPositionChangeX, heroPositionChangeY);
  45.  
  46.                     CollectDots(map, heroPositionX, heroPositionY, ref collectDots);
  47.  
  48.                 }
  49.                 System.Threading.Thread.Sleep(50);
  50.  
  51.                 halfDots = allDots / divisionFindHalves;
  52.  
  53.                 Console.SetCursorPosition(0, 21);
  54.                 if (collectDots > halfDots)
  55.                 {
  56.                     isPlaying = false;
  57.                 }
  58.             }
  59.  
  60.             if (isPlaying == false)
  61.             {
  62.                 Console.WriteLine(youWin);
  63.             }
  64.         }
  65.  
  66.         static void ChangeDirection(ConsoleKeyInfo key, ref int heroPositionChangeX, ref int heroPositionChangeY, ref bool isPlaying)
  67.         {
  68.             switch (key.Key)
  69.             {
  70.                 case ConsoleKey.UpArrow:
  71.                     heroPositionChangeX = -1; heroPositionChangeY = 0;
  72.                     break;
  73.                 case ConsoleKey.DownArrow:
  74.                     heroPositionChangeX = 1; heroPositionChangeY = 0;
  75.                     break;
  76.                 case ConsoleKey.LeftArrow:
  77.                     heroPositionChangeX = 0; heroPositionChangeY = -1;
  78.                     break;
  79.                 case ConsoleKey.RightArrow:
  80.                     heroPositionChangeX = 0; heroPositionChangeY = 1;
  81.                     break;
  82.                 case ConsoleKey.Escape:
  83.                     isPlaying = false;
  84.                     break;
  85.                 default:
  86.                     break;
  87.             }
  88.         }
  89.  
  90.         static void Move(ref int heroPositionX, ref int heroPositionY, int heroPositionChangeX, int heroPositionChangeY)
  91.         {
  92.             Console.SetCursorPosition(heroPositionY, heroPositionX);
  93.             Console.Write(" ");
  94.  
  95.             heroPositionX += heroPositionChangeX;
  96.             heroPositionY += heroPositionChangeY;
  97.  
  98.             Console.SetCursorPosition(heroPositionY, heroPositionX);
  99.             Console.Write('@');
  100.         }
  101.  
  102.         static void CollectDots(char[,] map, int heroX, int heroY, ref int collectDots)
  103.         {
  104.             if (map[heroX, heroY] == '.')
  105.             {
  106.                 collectDots++;
  107.                 map[heroX, heroY] = ' ';
  108.             }
  109.         }
  110.  
  111.         static char[,] CreateMap(out int heroX, out int heroY, ref int allDots)
  112.         {
  113.             int valueObjectMap;
  114.             int wallValue = 0;
  115.             int densityFilling = 5;
  116.             int minValueMap = 5;
  117.             int dotValue = 1;
  118.             int heroValue = 2;
  119.             int lenghtMap = 0;
  120.             int weightMap = 0;
  121.  
  122.             bool heroAppeared = false;
  123.  
  124.             heroX = 0;
  125.             heroY = 0;
  126.  
  127.             Random random = new Random();
  128.  
  129.             string requestLenghtMap = "Введите длину карты, более 4: ";
  130.             string requestWeightMap = "Введите высоту карты, более 4: ";
  131.  
  132.             while (lenghtMap < minValueMap)
  133.             {
  134.                 Console.Write(requestLenghtMap);
  135.                 lenghtMap = Convert.ToInt32(Console.ReadLine());
  136.             }
  137.  
  138.             while (weightMap < minValueMap)
  139.             {
  140.                 Console.Write(requestWeightMap);
  141.                 weightMap = Convert.ToInt32(Console.ReadLine());
  142.             }
  143.  
  144.             Console.Clear();
  145.             char[,] map = new char[weightMap, lenghtMap];
  146.  
  147.             while (heroAppeared == false)
  148.             {
  149.                 for (int i = 0; i < weightMap; i++)
  150.                 {
  151.                     for (int j = 0; j < lenghtMap; j++)
  152.                     {
  153.                         if (i == 0 || i == weightMap - 1)
  154.                         {
  155.                             map[i, j] = '#';
  156.                         }
  157.                         else if (j == 0 || j == lenghtMap - 1)
  158.                         {
  159.                             map[i, j] = '#';
  160.                         }
  161.                         else
  162.                         {
  163.                             valueObjectMap = random.Next(wallValue, densityFilling);
  164.  
  165.                             if (valueObjectMap == wallValue)
  166.                             {
  167.                                 map[i, j] = '#';
  168.                             }
  169.                             else if (valueObjectMap == dotValue)
  170.                             {
  171.                                 map[i, j] = '.';
  172.                                 allDots++;
  173.                             }
  174.                             else if (valueObjectMap == heroValue && heroAppeared == false)
  175.                             {
  176.                                 map[i, j] = '@';
  177.                                 heroX = i;
  178.                                 heroY = j;
  179.                                 heroAppeared = true;
  180.                             }
  181.                         }
  182.                     }
  183.                 }
  184.             }
  185.    
  186.             return map;
  187.         }
  188.  
  189.         static void DrawMap(char[,] map)
  190.         {
  191.             for (int i = 0; i < map.GetLength(0); i++)
  192.             {
  193.                 for (int j = 0; j < map.GetLength(1); j++)
  194.                 {
  195.                     Console.Write(map[i, j]);
  196.                 }
  197.                 Console.WriteLine();
  198.             }
  199.         }
  200.     }
  201. }
  202.  
Add Comment
Please, Sign In to add comment