Advertisement
Torgach

BraveNewWorld

Feb 28th, 2021 (edited)
120
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 13.14 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. using System.IO;
  7. using System.Collections;
  8.  
  9. namespace BraveNewWorld
  10. {
  11.     class Program
  12.     {
  13.         static void Main(string[] args)
  14.         {
  15.             int playerDX = 0;
  16.             int playerDY = 1;
  17.  
  18.             int collectCoins = 0;
  19.  
  20.             int[,] arrayOfTraps = new int[2, 4] { { 2, 1, 3, 2 }, { 5, 5, 2, 4 } };
  21.             bool isSelectionMenuRun = true;
  22.  
  23.             Console.CursorVisible = false;
  24.  
  25.             char[,] map = ReadMap();
  26.             DrawMap(map, out int allCoins, out int respawnX, out int respawnY);
  27.  
  28.             int playerX = respawnX;
  29.             int playerY = respawnY;
  30.  
  31.             Console.WriteLine("\n<<<МЕНЮ ВЫБОРА>>>");
  32.             Console.WriteLine("\n[1] - войти в режим создание карты\n[2] - играть в змейку\n[3] - Выход");
  33.             Console.Write("Enter: ");
  34.  
  35.             while (isSelectionMenuRun)
  36.             {
  37.                 switch (Console.ReadLine())
  38.                 {
  39.                     case "1":
  40.                         Respawn(respawnX, respawnY, ref playerX, ref playerY, map);
  41.                         EditMap(map, ref playerX, ref playerY, playerDX, playerDY, ref arrayOfTraps, ref allCoins, ref respawnX, ref respawnY);
  42.                         break;
  43.                     case "2":
  44.                         isSelectionMenuRun = IsGameRun(map, playerX, playerY, playerDX, playerDY, arrayOfTraps, collectCoins, allCoins, respawnX, respawnY);
  45.                         break;
  46.                     case "3":
  47.                         Console.Write("Выход...");
  48.                         return;
  49.                 }
  50.             }
  51.         }
  52.        
  53.         static bool IsGameRun(char[,] map, int playerX, int playerY, int playerDX, int playerDY, int[,] arrayOfTraps, int collectCoins, int allCoins, int respawnX, int respawnY)
  54.         {
  55.             Respawn(respawnX, respawnY, ref playerX, ref playerY, map);
  56.  
  57.             bool isGameStopped = false;
  58.             while (!isGameStopped)
  59.             {
  60.                 ConsoleKeyInfo key = Console.ReadKey(true);
  61.                 if (key.KeyChar == 'e')
  62.                 {
  63.                     return true;
  64.                 }
  65.                 else if (key.Key == ConsoleKey.UpArrow || key.Key == ConsoleKey.DownArrow || key.Key == ConsoleKey.LeftArrow || key.Key == ConsoleKey.RightArrow)
  66.                 {
  67.                     ChangeDirection(key, out playerDX, out playerDY);
  68.                     MovePlayer('V', map, ref playerX, ref playerY, playerDX, playerDY);
  69.  
  70.                     CheckPosition(map, ref playerX, ref playerY, ref collectCoins, respawnX, respawnY, arrayOfTraps);
  71.                 }
  72.  
  73.                 isGameStopped = IsGameOver(allCoins, collectCoins);
  74.                 System.Threading.Thread.Sleep(150);
  75.             }
  76.             return true;
  77.         }
  78.  
  79.         static char[,] ReadMap()
  80.         {
  81.             char[,] map =
  82.             {
  83.                 { '#','#','#','#','#','#','#','#','#'},
  84.                 { '#',' ','#','#','$','#',' ',' ','#'},
  85.                 { '#','I','#','#','@','#',' ',' ','#'},
  86.                 { '#',' ','@',' ',' ',' ','$',' ','#'},
  87.                 { '#',' ','#',' ',' ',' ',' ','$','#'},
  88.                 { '#','R','#',' ',' ','I',' ','$','#'},
  89.                 { '#','#','#','#','#','#','#','#','#'}
  90.             };
  91.  
  92.             for (int i = 0; i < map.GetLength(0); i++)
  93.             {
  94.                 for (int j = 0; j < map.GetLength(1); j++)
  95.                 {
  96.                     if (map[i, j] == ' ')
  97.                     {
  98.                         map[i, j] = ' ';
  99.                     }
  100.                 }
  101.             }
  102.             return map;
  103.         }
  104.  
  105.         static void DrawMap(char[,] map, out int allCoins, out int respawnX, out int respawnY)
  106.         {
  107.             allCoins = 0;
  108.             respawnX = 0;
  109.             respawnY = 0;
  110.  
  111.             for (int i = 0; i < map.GetLength(0); i++)
  112.             {
  113.                 for (int j = 0; j < map.GetLength(1); j++)
  114.                 {
  115.                     Console.Write(map[i, j]);
  116.                     if (map[i, j] == '$')
  117.                     {
  118.                         allCoins++;
  119.                     }
  120.                     else if (map[i, j] == 'R')
  121.                     {
  122.                         respawnX = i;              
  123.                         respawnY = j;
  124.                         Console.SetCursorPosition(j, i);
  125.                         Console.Write(map[i, j] = ' ');
  126.                     }
  127.                 }
  128.                 Console.WriteLine();
  129.             }
  130.         }
  131.  
  132.         static void EditMap(char[,] map, ref int playerX, ref int playerY, int playerDX, int playerDY, ref int[,] arrayOfTraps, ref int allCoins, ref int respawnX, ref int respawnY)
  133.         {
  134.             bool isEditMenuRun = true;
  135.  
  136.             Console.SetCursorPosition(2, 15);
  137.             Console.WriteLine("<<<РЕДАКТОР КАРТЫ>>>");
  138.             Console.WriteLine("[e] - выход из редактора, [f] - выбрать символ");
  139.  
  140.             while (isEditMenuRun)
  141.             {
  142.                 ConsoleKeyInfo key = Console.ReadKey(true);
  143.                 if (key.KeyChar == 'f')
  144.                 {
  145.                     Console.SetCursorPosition(0, 18);
  146.                     Console.WriteLine("Доступные символы:\n[#] - стена\n[$] - монетка\n[@] - ловушка\n[>] или [<] - гора, [I] - переключатель ловушки   [L] - связать переключатель" +
  147.                         "\n[R] - точка возрождения");
  148.  
  149.                     ConsoleKeyInfo charKey = Console.ReadKey(true);
  150.                     switch (charKey.KeyChar)
  151.                     {
  152.                         case '#':
  153.                             SetSymbol(map, '#', playerX, playerY);
  154.                             break;
  155.                         case '$':
  156.                             SetSymbol(map, '$', playerX, playerY);
  157.                             allCoins++;
  158.                             break;
  159.                         case '@':
  160.                             SetSymbol(map, '@', playerX, playerY);
  161.                             break;
  162.                         case 'I':
  163.                             SetSymbol(map, 'I', playerX, playerY);
  164.                             SetToggle(map, ref playerX, ref playerY, playerDX, playerDY, ref arrayOfTraps);
  165.                             break;
  166.                         case 'R':
  167.                             respawnX = playerX;
  168.                             respawnY = playerY;
  169.                             SetSymbol(map, ' ', playerX, playerY);
  170.                             break;
  171.                         case 'S':
  172.                             SetSymbol(map, ' ', playerX, playerY);
  173.                             break;
  174.                     }
  175.                 }
  176.                 else if (key.KeyChar == 'e')
  177.                 {
  178.                     Console.SetCursorPosition(7, 13);
  179.                     Console.Write(" ");
  180.                     break;
  181.                 }
  182.                 else if (key.Key == ConsoleKey.UpArrow || key.Key == ConsoleKey.DownArrow || key.Key == ConsoleKey.LeftArrow || key.Key == ConsoleKey.RightArrow)
  183.                 {
  184.                     ChangeDirection(key, out playerDX, out playerDY);
  185.                     MovePlayer('V', map, ref playerX, ref playerY, playerDX, playerDY);
  186.                 }
  187.             }
  188.         }
  189.  
  190.         static void SetToggle(char[,] map, ref int playerX, ref int playerY, int playerDX, int playerDY, ref int[,] arrayOfTraps)
  191.         {
  192.             int toggleX = playerX;
  193.             int toggleY = playerY;
  194.  
  195.             bool isToggleSet = true;
  196.  
  197.             while (isToggleSet)
  198.             {
  199.                 ConsoleKeyInfo localKey = Console.ReadKey(true);
  200.  
  201.                 if (localKey.Key == ConsoleKey.UpArrow || localKey.Key == ConsoleKey.DownArrow || localKey.Key == ConsoleKey.LeftArrow || localKey.Key == ConsoleKey.RightArrow)
  202.                 {
  203.                     ChangeDirection(localKey, out playerDX, out playerDY);
  204.                     MovePlayer('V', map, ref playerX, ref playerY, playerDX, playerDY);
  205.                 }
  206.                 else if (localKey.KeyChar == 'L' && (map[playerX, playerY] == '@' || map[playerX, playerY] == '*'))
  207.                 {
  208.                     BindTrap(playerX, playerY, ref arrayOfTraps, toggleX, toggleY);
  209.                     break;
  210.                 }
  211.                 else if (localKey.KeyChar == 'e')
  212.                 {
  213.                     isToggleSet = false;
  214.                 }
  215.  
  216.             }
  217.         }
  218.  
  219.         static void MovePlayer(char symbol, char[,] map, ref int X, ref int Y, int DX, int DY)
  220.         {
  221.             Console.SetCursorPosition(Y, X);
  222.             Console.Write(map[X, Y]);
  223.  
  224.             if (map[X + DX, Y + DY] != '#')
  225.             {
  226.                 X += DX;
  227.                 Y += DY;
  228.             }
  229.  
  230.             Console.SetCursorPosition(Y, X);
  231.             Console.Write(symbol);
  232.         }
  233.  
  234.         static void ChangeDirection(ConsoleKeyInfo key, out int DX, out int DY)
  235.         {
  236.             switch (key.Key)
  237.             {
  238.                 case ConsoleKey.UpArrow:
  239.                     DX = -1; DY = 0;
  240.                     break;
  241.                 case ConsoleKey.DownArrow:
  242.                     DX = 1; DY = 0;
  243.                     break;
  244.                 case ConsoleKey.LeftArrow:
  245.                     DX = 0; DY = -1;
  246.                     break;
  247.                 case ConsoleKey.RightArrow:
  248.                     DX = 0; DY = 1;
  249.                     break;
  250.                 default:
  251.                     DX = 0;
  252.                     DY = 0;
  253.                     break;
  254.             }
  255.         }
  256.  
  257.         static void SetSymbol(char[,] map, char symbol, int playerX, int playerY)
  258.         {
  259.             Console.SetCursorPosition(playerY, playerX);
  260.             map[playerX, playerY] = symbol;
  261.             Console.Write(symbol);
  262.         }
  263.  
  264.         static void CheckPosition(char[,] map, ref int playerX, ref int playerY, ref int collectCoins, int respawnX, int respawnY, int[,] arrayOfTraps)
  265.         {
  266.             if (map[playerX, playerY] == '$')
  267.             {
  268.                 CollectCoin(map, playerX, playerY, ref collectCoins);
  269.             }
  270.             else if (map[playerX, playerY] == '@')
  271.             {
  272.                 Respawn(respawnX, respawnY, ref playerX, ref playerY, map);
  273.             }
  274.             else if (map[playerX, playerY] == 'I')
  275.             {
  276.                 SetSymbol(map, 'i', playerX, playerY);
  277.                 for (int i = 0; i < arrayOfTraps.GetLength(0); i++)
  278.                 {
  279.                     if (playerX == arrayOfTraps[i, 0] && playerY == arrayOfTraps[i, 1])
  280.                     {
  281.                         SetSymbol(map, '*', arrayOfTraps[i, 2], arrayOfTraps[i, 3]);
  282.                     }
  283.                 }
  284.  
  285.             }
  286.             else if (map[playerX, playerY] == 'i')
  287.             {
  288.                 SetSymbol(map, 'I', playerX, playerY);
  289.  
  290.                 for (int i = 0; i < arrayOfTraps.GetLength(0); i++)
  291.                 {
  292.                     if (playerX == arrayOfTraps[i, 0] && playerY == arrayOfTraps[i, 1])
  293.                     {
  294.                         SetSymbol(map, '@', arrayOfTraps[i, 2], arrayOfTraps[i, 3]);
  295.                     }
  296.                 }
  297.             }
  298.  
  299.         }
  300.  
  301.         static void CollectCoin(char[,] map, int playerX, int playerY, ref int collectCoins)
  302.         {
  303.             collectCoins++;
  304.             map[playerX, playerY] = ' ';
  305.         }
  306.  
  307.         static void Respawn(int respawnX, int respawnY, ref int playerX, ref int playerY, char[,] map)
  308.         {
  309.             char symbol = map[playerX, playerY];
  310.             SetSymbol(map, symbol, playerX, playerY);
  311.  
  312.             playerX = respawnX;
  313.             playerY = respawnY;
  314.             Console.SetCursorPosition(respawnY, respawnX);
  315.  
  316.             Console.Write('V');
  317.         }
  318.  
  319.         static void BindTrap(int playerX, int playerY, ref int[,] arrayOfTraps, int toggleX, int toggleY)
  320.         {
  321.             int[,] tempArrayOfTraps = new int[arrayOfTraps.GetLength(0) + 1, arrayOfTraps.GetLength(1)];
  322.  
  323.             for (int i = 0; i < arrayOfTraps.GetLength(0); i++)
  324.             {
  325.                 for (int j = 0; j < arrayOfTraps.GetLength(1); j++)
  326.                 {
  327.                     tempArrayOfTraps[i, j] = arrayOfTraps[i, j];
  328.                 }
  329.             }
  330.  
  331.             tempArrayOfTraps[tempArrayOfTraps.GetLength(0) - 1, 0] = toggleX;
  332.             tempArrayOfTraps[tempArrayOfTraps.GetLength(0) - 1, 1] = toggleY;
  333.  
  334.             tempArrayOfTraps[tempArrayOfTraps.GetLength(0) - 1, 2] = playerX;
  335.             tempArrayOfTraps[tempArrayOfTraps.GetLength(0) - 1, 3] = playerY;
  336.  
  337.             arrayOfTraps = tempArrayOfTraps;
  338.         }
  339.  
  340.         static bool IsGameOver(int allCoins, int colectCoins)
  341.         {
  342.             if (allCoins == colectCoins)
  343.             {
  344.                 Console.Clear();
  345.                 Console.WriteLine("Победа!");
  346.                 return true;
  347.             }
  348.             else
  349.             {
  350.                 return false;
  351.             }
  352.         }
  353.  
  354.     }
  355. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement