Advertisement
MrSoTniK

Brave New World

Dec 16th, 2019
172
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 9.05 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.  
  8. namespace BraveNewWorld
  9. {
  10.     class Program
  11.     {
  12.         static void Main(string[] args)
  13.         {
  14.             Console.CursorVisible = false;
  15.  
  16.             bool isPlaying = true;
  17.             int heroX, heroY;
  18.             int heroDX = 0, heroDY = 0;
  19.             int enemy1X, enemy1Y, enemy2X, enemy2Y, enemy3X, enemy3Y, enemy4X, enemy4Y;
  20.             int enemy1DX = -1, enemy1DY = 0, enemy2DX = 0, enemy2DY = 1, enemy3DX = 1, enemy3DY = 0, enemy4DX = 0, enemy4DY = -1;            
  21.             char heroSign = 'T', enemy1Sign ='U', enemy2Sign ='W', enemy3Sign ='Q',enemy4Sign ='L';
  22.             int direction1 = 0, direction2 = 0, direction3 = 0, direction4 = 0;
  23.             Random rand = new Random();
  24.             int allDots = 0, collectDots = 0;
  25.             bool isAlive = true;
  26.  
  27.             char[,] map = MapReading("map", out heroX, out heroY, out enemy1X, out enemy1Y, out enemy2X, out enemy2Y, out enemy3X, out enemy3Y, out enemy4X, out enemy4Y, ref allDots);
  28.            
  29.             Console.WindowWidth = 100;
  30.             Console.WindowHeight = 40;
  31.  
  32.             MapDrawing(map);
  33.  
  34.             while (isPlaying)
  35.             {
  36.                 System.Threading.Thread.Sleep(200);
  37.  
  38.                 Console.SetCursorPosition(0, 25);
  39.                 Console.WriteLine("Собрано"+collectDots+"/"+allDots);
  40.            
  41.  
  42.                 switch (map[enemy1Y + enemy1DY, enemy1X + enemy1DX])
  43.                 {
  44.                     case '>':
  45.                         ChangeDirection(rand, ref enemy1DX, ref enemy1DY, direction1);
  46.                         break;                                      
  47.                     default:
  48.                         Move(ref enemy1X, ref enemy1Y, enemy1DX, enemy1DY, enemy1Sign, map);
  49.                         break;
  50.                 }
  51.  
  52.                 switch (map[enemy2Y + enemy2DY, enemy2X + enemy2DX])
  53.                 {
  54.                     case '>':
  55.                         ChangeDirection(rand, ref enemy2DX, ref enemy2DY, direction2);
  56.                         break;
  57.                     default:
  58.                         Move(ref enemy2X, ref enemy2Y, enemy2DX, enemy2DY, enemy2Sign, map);
  59.                         break;
  60.                 }
  61.  
  62.                 switch (map[enemy3Y + enemy3DY, enemy3X + enemy3DX])
  63.                 {
  64.                     case '>':
  65.                         ChangeDirection(rand, ref enemy3DX, ref enemy3DY, direction3);
  66.                         break;
  67.                     default:
  68.                         Move(ref enemy3X, ref enemy3Y, enemy3DX, enemy3DY, enemy3Sign, map);
  69.                         break;
  70.                 }
  71.  
  72.                 switch (map[enemy4Y + enemy4DY, enemy4X + enemy4DX])
  73.                 {
  74.                     case '>':
  75.                         ChangeDirection(rand, ref enemy4DX, ref enemy4DY, direction4);
  76.                         break;
  77.                     default:
  78.                         Move(ref enemy4X, ref enemy4Y, enemy4DX, enemy4DY, enemy4Sign, map);
  79.                         break;
  80.                 }
  81.  
  82.                 if (Console.KeyAvailable)
  83.                 {
  84.                     ConsoleKeyInfo key = Console.ReadKey(true);
  85.                     switch (key.Key)
  86.                     {
  87.                         case ConsoleKey.UpArrow:
  88.                             heroDX = 0;
  89.                             heroDY = -1;
  90.                             break;
  91.                         case ConsoleKey.DownArrow:
  92.                             heroDX = 0;
  93.                             heroDY = 1;
  94.                             break;
  95.                         case ConsoleKey.LeftArrow:
  96.                             heroDX = -1;
  97.                             heroDY = 0;
  98.                             break;
  99.                         case ConsoleKey.RightArrow:
  100.                             heroDX = 1;
  101.                             heroDY = 0;
  102.                             break;
  103.                         case ConsoleKey.NumPad0:
  104.                             heroDX = 0;
  105.                             heroDY = 0;
  106.                             break;                    
  107.                     }                                    
  108.                  
  109.                 }
  110.  
  111.                 if (map[heroY + heroDY, heroX + heroDX] != '>')
  112.                 {
  113.                     Move(ref heroX, ref heroY, heroDX, heroDY, heroSign, map);
  114.                     CollectDots(map, ref heroX, ref heroY, ref collectDots);
  115.                 }
  116.  
  117.                 if ((heroX == enemy1X && heroY == enemy1Y) || (heroX == enemy2X && heroY == enemy2Y) || (heroX == enemy3X && heroY == enemy3Y) || (heroX == enemy4X && heroY == enemy4Y))
  118.                 {
  119.                     isAlive = false;
  120.                 }
  121.  
  122.                 if (collectDots == allDots || !isAlive)
  123.                 {
  124.                     isPlaying = false;
  125.                 }
  126.  
  127.             }                    
  128.  
  129.             Console.SetCursorPosition(0, 26);
  130.             if (collectDots == allDots)
  131.             {
  132.                 Console.WriteLine("Вы победили!");
  133.                 Console.ReadKey();
  134.             }
  135.             else if( isAlive == false)
  136.             {
  137.                 Console.WriteLine("Вас съели! Вы проиграли!");
  138.                 Console.ReadKey();
  139.             }
  140.         }
  141.  
  142.         static void MapDrawing(char[,] map)
  143.         {
  144.             for (int i = 0; i < map.GetLength(0); i++)
  145.             {
  146.                 for (int j = 0; j < map.GetLength(1); j++)
  147.                 {
  148.                     Console.Write(map[i, j]);
  149.                 }
  150.                 Console.WriteLine();
  151.             }          
  152.         }
  153.  
  154.         static char[,] MapReading(string mapName, out int heroX, out int heroY, out int enemy1X, out int enemy1Y, out int enemy2X, out int enemy2Y, out int enemy3X, out int enemy3Y, out int enemy4X, out int enemy4Y, ref int allDots)
  155.         {
  156.             heroX = 0;
  157.             heroY = 0;
  158.             enemy1X = 0; enemy2X = 0; enemy3X = 0; enemy4X = 0;
  159.             enemy1Y = 0; enemy2Y = 0; enemy3Y = 0; enemy4Y = 0;        
  160.  
  161.             string[] newFile = File.ReadAllLines("maps/"+mapName+".txt");
  162.             char[,] map = new char[newFile.Length, newFile[0].Length];
  163.  
  164.             for (int i = 0; i < map.GetLength(0); i++)
  165.             {
  166.                 for (int j = 0; j < map.GetLength(1); j++)
  167.                 {
  168.                     map[i, j] = newFile[i][j];
  169.                     switch(map[i, j])
  170.                     {
  171.                         case 'T':
  172.                             heroX = j;
  173.                             heroY = i;
  174.                             map[i, j] = '.';
  175.                             break;
  176.                         case 'U':
  177.                             enemy1X = j;
  178.                             enemy1Y = i;
  179.                             map[i, j] = '.';
  180.                             break;
  181.                         case 'W':
  182.                             enemy2X = j;
  183.                             enemy2Y = i;
  184.                             map[i, j] = '.';
  185.                             break;
  186.                         case 'Q':
  187.                             enemy3X = j;
  188.                             enemy3Y = i;
  189.                             map[i, j] = '.';
  190.                             break;
  191.                         case 'L':
  192.                             enemy4X = j;
  193.                             enemy4Y = i;
  194.                             map[i, j] = '.';
  195.                             break;  
  196.                         case ' ':
  197.                             map[i, j] = '.';
  198.                             allDots++;
  199.                             break;
  200.                     }                  
  201.                 }
  202.             }
  203.             return map;
  204.         }
  205.  
  206.         static void Move(ref int X, ref int Y, int DX, int DY, char symbol, char [,] map)
  207.         {        
  208.             Console.SetCursorPosition(X, Y);
  209.             Console.Write(map[Y,X]);
  210.  
  211.             X += DX;
  212.             Y += DY;
  213.          
  214.             Console.SetCursorPosition(X, Y);
  215.             Console.Write(symbol);
  216.         }
  217.  
  218.         static void CollectDots(char[,] map, ref int heroX, ref int heroY, ref int collectDots)
  219.         {
  220.             if (map[heroY, heroX] == '.')
  221.             {
  222.                 collectDots++;
  223.                 map[heroY, heroX] = ' ';
  224.             }
  225.         }
  226.  
  227.  
  228.         static void ChangeDirection(Random random, ref int DX, ref int DY, int direction)
  229.         {
  230.             direction = random.Next(1, 5);
  231.             switch (direction)
  232.             {
  233.                 case 1:
  234.                     DX = 0;
  235.                     DY = -1;
  236.                     break;
  237.                 case 2:
  238.                     DX = 0;
  239.                     DY = 1;
  240.                     break;
  241.                 case 3:
  242.                     DX = -1;
  243.                     DY = 0;
  244.                     break;
  245.                 case 4:
  246.                     DX = 1;
  247.                     DY = 0;
  248.                     break;          
  249.             }
  250.         }
  251.  
  252.  
  253.  
  254.     }
  255. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement