Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- enum State
- {
- Empty,
- Wall,
- Visited,
- Teleporter,
- Exit
- };
- class Point
- {
- public int X { get; set; }
- public int Y { get; set; }
- }
- public class Program
- {
- static void Main()
- {
- var map = new State[labyrinth[0].Length, labyrinth.Length];
- for (int x = 0; x < map.GetLength(0); x++)
- for (int y = 0; y < map.GetLength(1); y++)
- {
- if (labyrinth[y][x] == ' ')
- {
- map[x, y] = State.Empty;
- }
- if (labyrinth[y][x] == 'X')
- {
- map[x, y] = State.Wall;
- }
- if (labyrinth[y][x] == 'T')
- {
- map[x, y] = State.Teleporter;
- }
- if (labyrinth[y][x] == 'E')
- {
- map[x, y] = State.Exit;
- }
- }
- var queue = new Queue<Point>();
- queue.Enqueue(new Point { X = 0, Y = 0 });
- while (queue.Count != 0)
- {
- var point = queue.Dequeue();
- if (point.X < 0 || point.X >= map.GetLength(0) || point.Y < 0 || point.Y >= map.GetLength(1)) continue;// проверка координат
- if (map[point.X, point.Y] == State.Wall || map[point.X, point.Y] == State.Visited)// проверка на состояние
- {
- continue;
- }
- if (map[point.X, point.Y] == State.Teleporter)
- {
- var n = new Random();
- var list = new List<Point>();
- for (int x = 0; x < map.GetLength(0); x++)
- for (int y = 0; y < map.GetLength(1); y++)
- {
- if (labyrinth[y][x] == ' ')
- {
- list.Add(new Point { X = x, Y = y });
- }
- }
- queue.Enqueue(list[n.Next(list.Count)]);
- }
- if (map[point.X, point.Y] == State.Exit)
- {
- Console.WriteLine("Congratulations");
- }
- map[point.X, point.Y] = State.Visited;
- Print(map);
- for (var dy = -1; dy <= 1; dy++)// пробег по всем точкам вокруг
- for (var dx = -1; dx <= 1; dx++)
- if (dx != 0 && dy != 0) continue;
- else queue.Enqueue(new Point { X = point.X + dx, Y = point.Y + dy });
- }
- }
- static string[] labyrinth = new string[]
- {
- " X X ",
- " X XXXXX X",
- " T X ",
- "XXXX XXX X",
- " X",
- " XXX XXXXX",
- " X E"
- };
- static void Print(State[,] map)
- {
- Console.CursorLeft = 0;
- Console.CursorTop = 0;
- for (int x = 0; x < map.GetLength(0) + 2; x++)
- Console.Write("X");
- Console.WriteLine();
- for (int y = 0; y < map.GetLength(1); y++)
- {
- Console.Write("X");
- for (int x = 0; x < map.GetLength(0); x++)
- switch (map[x, y])
- {
- case State.Wall: Console.Write("X"); break;
- case State.Empty: Console.Write(" "); break;
- case State.Visited: Console.Write("."); break;
- case State.Exit: Console.Write("E"); break;
- case State.Teleporter: Console.Write("T"); break;
- }
- Console.WriteLine("X");
- }
- for (int x = 0; x < map.GetLength(0) + 2; x++)
- Console.Write("X");
- Console.ReadKey();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement