SHARE
TWEET

sdfghjkl

a guest Apr 24th, 2019 76 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. using System;
  2. using System.Collections.Generic;
  3.  
  4. enum State
  5. {
  6.     Empty,
  7.     Wall,
  8.     Visited,
  9.     Teleporter,
  10.     Exit
  11. };
  12.  
  13. class Point
  14. {
  15.     public int X { get; set; }
  16.     public int Y { get; set; }
  17.  
  18. }
  19.  
  20. public class Program
  21. {
  22.     static void Main()
  23.     {
  24.         var map = new State[labyrinth[0].Length, labyrinth.Length];
  25.  
  26.         for (int x = 0; x < map.GetLength(0); x++)
  27.             for (int y = 0; y < map.GetLength(1); y++)
  28.             {
  29.                 if (labyrinth[y][x] == ' ')
  30.                 {
  31.                     map[x, y] = State.Empty;
  32.                 }
  33.                 if (labyrinth[y][x] == 'X')
  34.                 {
  35.                     map[x, y] = State.Wall;
  36.                 }
  37.                 if (labyrinth[y][x] == 'T')
  38.                 {
  39.                     map[x, y] = State.Teleporter;
  40.                 }
  41.                 if (labyrinth[y][x] == 'E')
  42.                 {
  43.                     map[x, y] = State.Exit;
  44.                 }
  45.             }
  46.  
  47.         var queue = new Queue<Point>();
  48.         queue.Enqueue(new Point { X = 0, Y = 0 });
  49.         while (queue.Count != 0)
  50.         {
  51.             var point = queue.Dequeue();
  52.             if (point.X < 0 || point.X >= map.GetLength(0) || point.Y < 0 || point.Y >= map.GetLength(1)) continue;// проверка координат
  53.             if (map[point.X, point.Y] == State.Wall || map[point.X, point.Y] == State.Visited)// проверка на состояние
  54.             {
  55.                 continue;
  56.             }
  57.             if (map[point.X, point.Y] == State.Teleporter)
  58.             {
  59.                 var n = new Random();
  60.                 var list = new List<Point>();
  61.                 for (int x = 0; x < map.GetLength(0); x++)
  62.                     for (int y = 0; y < map.GetLength(1); y++)
  63.                     {
  64.                         if (labyrinth[y][x] == ' ')
  65.                         {
  66.                             list.Add(new Point { X = x, Y = y });
  67.                         }
  68.                     }
  69.                 queue.Enqueue(list[n.Next(list.Count)]);
  70.             }
  71.             if (map[point.X, point.Y] == State.Exit)
  72.             {
  73.                 Console.WriteLine("Congratulations");
  74.             }
  75.             map[point.X, point.Y] = State.Visited;
  76.             Print(map);
  77.  
  78.            
  79.             for (var dy = -1; dy <= 1; dy++)// пробег по всем точкам вокруг
  80.                 for (var dx = -1; dx <= 1; dx++)
  81.                     if (dx != 0 && dy != 0) continue;
  82.                     else queue.Enqueue(new Point { X = point.X + dx, Y = point.Y + dy });
  83.  
  84.         }
  85.     }
  86.  
  87.     static string[] labyrinth = new string[]
  88.     {
  89.         " X   X    ",
  90.         " X XXXXX X",
  91.         "  T   X   ",
  92.         "XXXX XXX X",
  93.         "         X",
  94.         " XXX XXXXX",
  95.         " X       E"
  96.     };
  97.  
  98.     static void Print(State[,] map)
  99.     {
  100.         Console.CursorLeft = 0;
  101.         Console.CursorTop = 0;
  102.         for (int x = 0; x < map.GetLength(0) + 2; x++)
  103.             Console.Write("X");
  104.         Console.WriteLine();
  105.         for (int y = 0; y < map.GetLength(1); y++)
  106.         {
  107.             Console.Write("X");
  108.             for (int x = 0; x < map.GetLength(0); x++)
  109.                 switch (map[x, y])
  110.                 {
  111.                     case State.Wall: Console.Write("X"); break;
  112.                     case State.Empty: Console.Write(" "); break;
  113.                     case State.Visited: Console.Write("."); break;
  114.                     case State.Exit: Console.Write("E"); break;
  115.                     case State.Teleporter: Console.Write("T"); break;
  116.                 }
  117.             Console.WriteLine("X");
  118.         }
  119.         for (int x = 0; x < map.GetLength(0) + 2; x++)
  120.             Console.Write("X");
  121.         Console.ReadKey();
  122.     }
  123.  
  124. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top