Advertisement
Guest User

sdfghjkl

a guest
Apr 24th, 2019
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.77 KB | None | 0 0
  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. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement