Как сделать перемещение лабиринта за пределы области консоли - C#

Узнай цену своей работы

Формулировка задачи:

К примеру символ был в центре консоли и при нажатии стрелочек что бы лабиринт сдвигался вверх, вниз, влево или вправо. Чтоб лабиринт был больше области консоли. Как это реализовать? Помогите пожалуйста! Заранее спасибо!

Решение задачи: «Как сделать перемещение лабиринта за пределы области консоли»

textual
Листинг программы
namespace ConsoleApplication6
{
    class Program
    {
        const int BOARD_X = 10, BOARD_Y = 5;
        const int x_size = 20, y_size = 20, x_view = 10, y_view = 10;
 
        static void Main(string[] args)
        {
 
            var rdn = new Random(2);
            var xs = new char[y_size, x_size];
            for (int yi = 0; yi < y_size; yi++)
                for (int xi = 0; xi < x_size; xi++)
                    xs[yi, xi] = ((yi == 0) || (yi == y_size - 1) || (xi == 0) || (xi == x_size - 1)
                        || rdn.NextDouble() < 0.05) ? '#' : ' ';
 
            Console.SetCursorPosition(9, BOARD_Y - 1);
            Console.Write("+----------+");
            for (int yi = 0; yi < y_view; yi++)
            {
                Console.SetCursorPosition(9, BOARD_Y + yi);
                Console.Write("|");
                for (int xi = 0; xi < x_view; xi++) Console.Write(xs[yi, xi]);
                Console.Write("|");
            }
            Console.SetCursorPosition(9, BOARD_Y + y_view);
            Console.Write("+----------+");
 
            int x = 0, y = 0;
            bool cont = true;
 
            while (cont)
                switch (Console.ReadKey(true).KeyChar)
                {
                    case 'a': if (x > 0) outcol(x_view, y_view, xs, --x, y, 0, 1); break;
                    case 'd': if (x < x_size - x_view) outcol(x_view, y_view, xs, ++x, y, x_view - 1, 0); break;
                    case 'w': if (y > 0) outrow(x_view, y_view, xs, x, --y, 0, 1); break;
                    case 's': if (y < y_size - y_view) outrow(x_view, y_view, xs, x, ++y, y_view - 1, 0); break;
                    case 'q': cont = false; break;
                    default: break;
                };
        }
 
        private static void outcol(int x_view, int y_view, char[,] xs, int x, int y, int dx, int shift)
        {
            Console.MoveBufferArea(1 - shift + BOARD_X, 0 + BOARD_Y, x_view - 1, y_view, shift + BOARD_X, 0 + BOARD_Y);
            for (int yi = 0; yi < y_view; yi++)
            {
                Console.SetCursorPosition(BOARD_X + dx, BOARD_Y + yi);
                Console.Write(xs[x + dx, yi + y]);
            }
        }
        private static void outrow(int x_view, int y_view, char[,] xs, int x, int y, int dy, int shift)
        {
            Console.MoveBufferArea(0 + BOARD_X, 1 - shift + BOARD_Y, x_view, y_view - 1, 0 + BOARD_X, shift + BOARD_Y);
            for (int xi = 0; xi < x_view; xi++)
            {
                Console.SetCursorPosition(BOARD_X + xi, BOARD_Y + dy);
                Console.Write(xs[x + xi, dy + y]);
            }
        }
 
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 3.667 из 5
Похожие ответы