Advertisement
TravaMan

Basic_Task18

Dec 28th, 2019
128
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 9.37 KB | None | 0 0
  1. using System;
  2. using System.IO;
  3.  
  4. namespace Basic_Task18
  5. {
  6.     class Program
  7.     {
  8.         static string mainMenu = "Меню.\n" +
  9.             "1. Играть\n" +
  10.             "2. Отредактировать карту\n" +
  11.             "3. Выбрать карту\n" +
  12.             "0. Выход\n";
  13.  
  14.         static string readMapMenu = "Введите название карты: ";
  15.         static void Main(string[] args)
  16.         {
  17.             Console.BackgroundColor = ConsoleColor.Black;
  18.             int PlayerX = 1;
  19.             int PlayerY = 1;
  20.             char[,] map = null;
  21.             string mapName = "";
  22.             while (true)
  23.             {
  24.                 switch (ReadInt(mainMenu))
  25.                 {
  26.                     case 1:
  27.                         if (map != null)
  28.                         {
  29.                             bool isPlaying = true;
  30.                             DrawMap(map);
  31.                             while (isPlaying)
  32.                             {
  33.                                 ConsoleKeyInfo key = Console.ReadKey(true);
  34.  
  35.                                 switch (key.Key)
  36.                                 {
  37.                                     case ConsoleKey.UpArrow:
  38.                                         MoveGame(map, ref PlayerX, ref PlayerY, -1, 0);
  39.                                         break;
  40.                                     case ConsoleKey.DownArrow:
  41.                                         MoveGame(map, ref PlayerX, ref PlayerY, 1, 0);
  42.                                         break;
  43.                                     case ConsoleKey.LeftArrow:
  44.                                         MoveGame(map, ref PlayerX, ref PlayerY, 0, -1);
  45.                                         break;
  46.                                     case ConsoleKey.RightArrow:
  47.                                         MoveGame(map, ref PlayerX, ref PlayerY, 0, 1);
  48.                                         break;
  49.                                     case ConsoleKey.Escape:
  50.                                         Console.Clear();
  51.                                         isPlaying = false;
  52.                                         break;
  53.                                 }
  54.                             }
  55.                         }
  56.                         break;
  57.                     case 2:
  58.                         if (map != null)
  59.                         {
  60.                             int X = 0;
  61.                             int Y = 0;
  62.                             bool isEditing = true;
  63.  
  64.                             DrawMap(map);
  65.                             while (isEditing)
  66.                             {
  67.                                 Console.SetCursorPosition(Y, X);
  68.                                 Console.BackgroundColor = ConsoleColor.Red;
  69.                                 Console.Write(map[X, Y]);
  70.                                 Console.BackgroundColor = ConsoleColor.Black;
  71.  
  72.                                 ConsoleKeyInfo key = Console.ReadKey(true);
  73.  
  74.                                 switch (key.Key)
  75.                                 {
  76.                                     case ConsoleKey.UpArrow:
  77.                                         MoveEditor(map, ref X, ref Y, -1, 0);
  78.                                         break;
  79.                                     case ConsoleKey.DownArrow:
  80.                                         MoveEditor(map, ref X, ref Y, 1, 0);
  81.                                         break;
  82.                                     case ConsoleKey.LeftArrow:
  83.                                         MoveEditor(map, ref X, ref Y, 0, -1);
  84.                                         break;
  85.                                     case ConsoleKey.RightArrow:
  86.                                         MoveEditor(map, ref X, ref Y, 0, 1);
  87.                                         break;
  88.                                     case ConsoleKey.Escape:
  89.                                         SaveMap(map, mapName);
  90.                                         Console.Clear();
  91.                                         isEditing = false;
  92.                                         break;
  93.                                     case ConsoleKey.Q:
  94.                                         SwitchMapElement(ref map, X, Y, false);
  95.                                         break;
  96.                                     case ConsoleKey.E:
  97.                                         SwitchMapElement(ref map, X, Y, true);
  98.                                         break;
  99.                                 }
  100.                             }
  101.                         }
  102.                         break;
  103.                     case 3:
  104.                         mapName = ReadString(readMapMenu);
  105.                         map = ReadMap(mapName, out PlayerX, out PlayerY);
  106.                         break;
  107.                     case 0:
  108.                         return;
  109.                     default:
  110.                         break;
  111.                 }
  112.             }
  113.         }
  114.  
  115.         static void DrawMap(char[,] map, int X = 0, int Y = 0)
  116.         {
  117.             Console.Clear();
  118.             Console.SetCursorPosition(Y, X);
  119.             for(int i = 0; i < map.GetLength(0); i++)
  120.             {
  121.                 for (int j = 0; j < map.GetLength(1); j++)
  122.                 {
  123.                     Console.Write(map[i, j]);
  124.                 }
  125.                 Console.WriteLine();
  126.             }
  127.         }
  128.  
  129.         static char[,] ReadMap(string mapName, out int PlayerX, out int PlayerY)
  130.         {
  131.             string[] newFile = File.ReadAllLines($"Maps/{mapName}.txt");
  132.             char[,] map = new char[newFile.Length, newFile[0].Length];
  133.             PlayerX = 1;
  134.             PlayerY = 1;
  135.  
  136.             for (int i = 0; i < map.GetLength(0); i++)
  137.             {
  138.                 for(int j = 0; j < map.GetLength(1); j++)
  139.                 {
  140.                     map[i, j] = newFile[i][j];
  141.  
  142.                     if (map[i,j] == '@')
  143.                     {
  144.                         PlayerX = i;
  145.                         PlayerY = j;
  146.                     }
  147.                 }
  148.             }
  149.  
  150.             return map;
  151.         }
  152.  
  153.         static void SaveMap(char[,] map, string mapName)
  154.         {
  155.             string text = "";
  156.  
  157.             for (int i = 0; i < map.GetLength(0); i++)
  158.             {
  159.                 for (int j = 0; j < map.GetLength(1); j++)
  160.                 {
  161.                     text += map[i, j];
  162.                 }
  163.                 text += "\n";
  164.             }
  165.  
  166.             File.WriteAllText($"Maps/{mapName}.txt", text);
  167.         }
  168.  
  169.         static int ReadInt(string menu)
  170.         {      
  171.             int output = 0;
  172.             string input;
  173.             while (true)
  174.             {
  175.                 Console.Write(menu);
  176.                 input = Console.ReadLine();
  177.                 Console.Clear();
  178.                 if (int.TryParse(input, out output))
  179.                 {
  180.                     return output;
  181.                 }
  182.                 else
  183.                 {
  184.                     Console.WriteLine("Введено не число, попробуйте еще!");
  185.                 }
  186.             }
  187.         }
  188.  
  189.         static string ReadString(string menu)
  190.         {
  191.             while (true)
  192.             {
  193.                 Console.Write(menu);
  194.                 string input = Console.ReadLine();
  195.                 Console.Clear();
  196.                 if (input.Length != 0)
  197.                 {
  198.                     return input;
  199.                 }
  200.                 else
  201.                 {
  202.                     Console.WriteLine("Введена пустая строка, попробуйте еще!");
  203.                 }
  204.             }
  205.         }
  206.  
  207.         static void MoveGame(char[,] map, ref int X, ref int Y, int DX, int DY)
  208.         {
  209.             if (map[X + DX, Y + DY] != '#')
  210.             {
  211.                 Console.SetCursorPosition(Y, X);
  212.                 Console.Write(' ');
  213.  
  214.                 X += DX;
  215.                 Y += DY;
  216.  
  217.                 Console.SetCursorPosition(Y, X);
  218.                 Console.Write('@');
  219.             }
  220.         }
  221.  
  222.         static void MoveEditor(char[,] map, ref int X, ref int Y, int DX, int DY)
  223.         {
  224.             if (!(X + DX >= map.GetLength(0) || X + DX < 0 || Y + DY >= map.GetLength(1) || Y + DY < 0))
  225.             {
  226.                 Console.SetCursorPosition(Y, X);
  227.                 Console.Write(map[X, Y]);
  228.  
  229.                 X += DX;
  230.                 Y += DY;
  231.             }
  232.         }
  233.  
  234.         static void SwitchMapElement(ref char[,] map, int X, int Y, bool isNext)
  235.         {
  236.             switch (map[X, Y])
  237.             {
  238.                 case ' ':
  239.                     if (isNext)
  240.                     {
  241.                         map[X, Y] = '@';
  242.                     } else
  243.                     {
  244.                         map[X, Y] = '#';
  245.                     }
  246.                     break;
  247.                 case '@':
  248.                     if (isNext)
  249.                     {
  250.                         map[X, Y] = '#';
  251.                     }
  252.                     else
  253.                     {
  254.                         map[X, Y] = ' ';
  255.                     }
  256.                     break;
  257.                 case '#':
  258.                     if (isNext)
  259.                     {
  260.                         map[X, Y] = ' ';
  261.                     }
  262.                     else
  263.                     {
  264.                         map[X, Y] = '@';
  265.                     }
  266.                     break;
  267.             }
  268.         }
  269.     }
  270. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement