Advertisement
RamGaal

HomeWork 5 ex.1

May 25th, 2019
123
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 9.58 KB | None | 0 0
  1. /*
  2. Список изменений:
  3. 1) Телепорт
  4.     добавлена переменная teleport для отслеживания факта телепорта
  5.     добавлены переменные tempPackmanX и tempPackmanY для отслеживания стартового места телепорта
  6.     добавлен символ % в легенду карты для обозначения точки входа телепорта.
  7.     % должен находиться на границе карты (не в углу).
  8.     телепорт производится на противоположный край карты по оси движения персонажа.
  9. 2) Враг
  10.     в качестве метки врага на карте используется $
  11.     добавлена возможность хаотичного движения для более непредсказуемого поведения
  12.     добавлена возможность добавления нескольких врагов
  13. 3)добавлена колоризация объектов
  14. */
  15.  
  16. using System;
  17. using System.Collections.Generic;
  18. using System.Linq;
  19. using System.Text;
  20. using System.Threading.Tasks;
  21. using System.Threading;
  22. using System.IO;
  23.  
  24.     class Program
  25.     {
  26.         static void Main(string[] args)
  27.         {      
  28.                         Console.BackgroundColor = ConsoleColor.DarkBlue;
  29.                         ConsoleColor defColor = Console.ForegroundColor;
  30.                         Console.Clear();
  31.             Random rand = new Random();
  32.             Console.CursorVisible = false;
  33.             //map
  34.             string[] newFile = File.ReadAllLines("map.txt");
  35.             char[,] map = new char[newFile.Length, newFile[1].Length];
  36.             //points
  37.             int maxPoints = 0;
  38.             int points = 0;
  39.             //pack-man
  40.             bool end = false;
  41.             int packmanX = 0, tempPackmanX = 0;
  42.             int packmanY = 0, tempPackmanY = 0;
  43.             int DX = 0, DY = 0;
  44.                         bool teleport = false;
  45.             bool die = false;
  46.             //enemy
  47.             int[] enemyX = new int[0];
  48.             int[] enemyY = new int[0];
  49.             int[] EDX = new int[0];
  50.                         int[] EDY = new int[0];
  51.             int[] enemyDir = new int[0];
  52.            
  53.  
  54.  
  55.             for (int i = 0; i < map.GetLength(0); i++)
  56.                 for (int j = 0; j < map.GetLength(1); j++)
  57.                     map[i, j] = newFile[i][j];
  58.  
  59.             for (int i = 0; i < map.GetLength(0); i++)
  60.             {
  61.                 for (int j = 0; j < map.GetLength(1); j++)
  62.                 {
  63.                                         if(map [i,j] == '%')
  64.                                         {
  65.                                             Console.ForegroundColor = ConsoleColor.Black;
  66.                                         }
  67.                                         else
  68.                                         {
  69.                                             Console.ForegroundColor = defColor;
  70.                                         }
  71.                     if (map[i, j] == '@')
  72.                     {
  73.                         packmanX = j;
  74.                         packmanY = i;
  75.                         map[i, j] = ' ';
  76.                     }
  77.                     else if (map[i, j] == ' ')
  78.                     {
  79.                         map[i, j] = '·';
  80.                         maxPoints++;
  81.                     }
  82.                     else if (map[i, j] == '$')
  83.                     {
  84.                                             int[] tempEnemyX = new int[enemyX.Length+1];
  85.                                             int[] tempEnemyY = new int[enemyY.Length+1];
  86.                                 int[] tempEDX = new int[EDX.Length+1];
  87.                                             int[] tempEDY = new int[EDY.Length+1];
  88.                                 int[] tempEnemyDir = new int[enemyDir.Length+1];
  89.  
  90.                                             for(int e = 0; e<enemyX.Length+1;e++)
  91.                                             {
  92.                         tempEnemyX[e] = j;
  93.                         tempEnemyY[e] = i;
  94.                                     tempEDX[e] = 0;
  95.                                                 tempEDY[e] = 0;
  96.                                     tempEnemyDir[e] =0;
  97.  
  98.                                             }
  99.                                             enemyX = tempEnemyX;
  100.                                             enemyY = tempEnemyY;
  101.                                             EDX = tempEDX;
  102.                                             EDY = tempEDY;
  103.                                 enemyDir = tempEnemyDir;
  104.                        map[i, j] = '·';
  105.  
  106.  
  107.                     }
  108.                     Console.Write(map[i, j]);
  109.                 }
  110.                 Console.WriteLine();
  111.             }
  112.  
  113.  
  114.             ConsoleKeyInfo key;
  115.  
  116.             while (!end)
  117.             {
  118.                 //control
  119.                 if (Console.KeyAvailable)
  120.                 {
  121.                     key = Console.ReadKey(true);
  122.                     switch (key.Key)
  123.                     {
  124.                         case ConsoleKey.UpArrow:
  125.                             DX = 0; DY = -1;
  126.                             break;
  127.                         case ConsoleKey.DownArrow:
  128.                             DX = 0; DY = 1;
  129.                             break;
  130.                         case ConsoleKey.LeftArrow:
  131.                             DX = -1; DY = 0;
  132.                             break;
  133.                         case ConsoleKey.RightArrow:
  134.                             DX = 1; DY = 0;
  135.                             break;
  136.                     }
  137.                 }
  138.  
  139.                 //делаем паузу
  140.                 Thread.Sleep(100);
  141.  
  142.                 //pack-man controller
  143.                                 map[packmanY, packmanX] = ' ';
  144.  
  145.                 if(map[packmanY + DY, packmanX + DX] != '#')
  146.                 {
  147.                                     if(map[packmanY + DY, packmanX + DX] == '%')
  148.                                     {
  149.                                         if(packmanY + DY==map.GetLength(0)-1)
  150.                                         {
  151.                                             tempPackmanY = packmanY;
  152.                                             tempPackmanX = packmanX;
  153.                                             packmanY = 0;
  154.                                             teleport = true;
  155.                                         }
  156.                                         if(packmanY + DY==0)
  157.                                         {
  158.                                             tempPackmanY = packmanY;
  159.                                             tempPackmanX = packmanX;
  160.                                             packmanY = map.GetLength(0)-1;
  161.                                             teleport = true;
  162.                                         }
  163.                                             if(packmanX + DX==map.GetLength(1)-1)
  164.                                             {
  165.                                             tempPackmanX = packmanX;
  166.                                             tempPackmanY = packmanY;
  167.                                             packmanX = 0;
  168.                                             teleport = true;               
  169.                                             }
  170.                                         if(packmanX + DX==0)
  171.                                         {
  172.                                             tempPackmanX = packmanX;
  173.                                             tempPackmanY = packmanY;
  174.                                             packmanX = map.GetLength(1)-1;
  175.                                             teleport = true;
  176.                                         }
  177.                                     }
  178.                                         if (teleport)
  179.                                         {
  180.                                         map[tempPackmanY, tempPackmanX] = ' ';
  181.                                         Console.SetCursorPosition(tempPackmanX, tempPackmanY);
  182.                     Console.Write(map[tempPackmanY,tempPackmanX]);
  183.                                         teleport = false;
  184.                                         }
  185.                     Console.SetCursorPosition(packmanX, packmanY);
  186.                     Console.Write(map[packmanY,packmanX]);         
  187.                     packmanX += DX;
  188.                     packmanY += DY;
  189.                     Console.SetCursorPosition(packmanX, packmanY);
  190.  
  191.  
  192.                                         Console.ForegroundColor = ConsoleColor.Green;
  193.                     Console.Write('@');
  194.                                         Console.ForegroundColor = defColor;
  195.                     if(map[packmanY,packmanX] == '·')
  196.                     {
  197.                         points++;
  198.                         map[packmanY, packmanX] = ' ';
  199.                     }
  200.  
  201.                 }
  202.  
  203.                 //enemy controller
  204. EnemyControl (ref die, ref rand,ref enemyX,ref enemyY,ref EDX,ref EDY,ref enemyDir,ref map, ref packmanX, ref packmanY, defColor);
  205.  
  206.                 //вывод очков
  207.                 Console.SetCursorPosition(0, map.GetLength(0)+3);
  208.                 Console.Write("Собрано ягодок " + points + "/" + maxPoints + ".");
  209.  
  210.                 //победа или поражение
  211.                 if (points == maxPoints)
  212.                 {
  213.                     end = true;
  214.                     Console.Clear();
  215.                     Console.WriteLine("Поздравляем с победой!");
  216.                 }
  217.                 else if (die)
  218.                 {
  219.                     end = true;
  220.                     Console.Clear();
  221.                     Console.WriteLine("Вы мертвы!");
  222.                 }
  223.             }
  224.  
  225.             Console.WriteLine("Спасибо за игру!");
  226.  
  227.         }
  228.  
  229. public static void EnemyControl (ref bool die, ref System.Random rand, ref int[] enemyX, ref int[] enemyY,ref int[] EDX,ref int[]EDY,ref int[] enemyDir, ref char[,] map,ref int packmanX,ref int packmanY, ConsoleColor defColor)
  230.                 {
  231.                     for (int i = 0; i<enemyX.Length;i++)
  232.                     {
  233.                         enemyDir[i] = rand.Next(1, 10);
  234.                                 if(map[enemyY[i] + EDY[i], enemyX[i] + EDX[i]] == '#' || enemyDir[i] == 1)
  235.                 {
  236.                     enemyDir[i] = rand.Next(1, 5);
  237.                     switch (enemyDir[i])
  238.                     {
  239.                         case 1:
  240.                             EDX[i] = 0; EDY[i] = -1;
  241.                             break;
  242.                         case 2:
  243.                             EDX[i] = 0; EDY[i] = 1;
  244.                             break;
  245.                         case 3:
  246.                             EDX[i] = -1; EDY[i] = 0;
  247.                             break;
  248.                         case 4:
  249.                             EDX[i] = 1; EDY[i] = 0;
  250.                             break;
  251.                     }
  252.                 }
  253.                 else
  254.                 {
  255.                     Console.SetCursorPosition(enemyX[i], enemyY[i]);
  256.                     Console.Write(map[enemyY[i], enemyX[i]]);
  257.                     enemyX[i] += EDX[i];
  258.                     enemyY[i] += EDY[i];
  259.                     Console.SetCursorPosition(enemyX[i], enemyY[i]);
  260.                                         Console.ForegroundColor = ConsoleColor.Red;
  261.                     Console.Write('$');
  262.                                         Console.ForegroundColor = defColor;
  263.                     if (enemyX[i] == packmanX && enemyY[i] == packmanY)
  264.                         die = true;
  265.                        
  266.                 }
  267.                     }
  268.                    
  269.                 }
  270.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement