Персонаж игры в консоли C# не всегда отвечает на кнопки

Рейтинг: -1Ответов: 1Опубликовано: 26.01.2023

Персонаж игры в консоли C# не всегда передвигается при нажатии стрелок и заходит за обозначенную мной границу а иногда и не выходит. В общем он не всегда слушается.

В этом видео вы можете посмотреть на проблему: https://youtu.be/kLhan2seJEc

До этого в этой игре ошибки были, но я понимал как их решать и решил их сам. Но как решить эту проблему я даже не представляю. Помогите пожалуйста.

Вот код:

Console.CursorVisible = false;
char[,] map = {
    {'#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#',},
    {'#',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','#',},
    {'#',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','#',},
    {'#',' ','#','#','#','#','#',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','#',},
    {'#',' ',' ',' ',' ',' ','#',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','#',},
    {'#',' ',' ',' ',' ',' ','#',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','#',},
    {'#',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','#',},
    {'#',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','#',},
    {'#',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','#',},
    {'#',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','#',},
    {'#',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','#',},    {'#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#',}
};

int x = 1;
int y = 1;
char hero = '@';
int speed = 1;

while (true)
{
    for (int i = 0; i < map.GetLength(0); i++)
    {
        for (int j = 0; j < map.GetLength(1); j++)
        {
            Console.Write(map[i, j]);
        }
        Console.WriteLine();
    }

    Console.SetCursorPosition(x, y);
    Console.Write(hero);

    ConsoleKeyInfo heroKey = Console.ReadKey();

    switch (heroKey.Key)
    {
        case ConsoleKey.UpArrow:
            if (map[x, y - speed] != '#')
            {
                y -= speed;
            }
            break;

        case ConsoleKey.DownArrow:
            if (map[x, y + speed] != '#')
            {
                y += speed;
            }
            break;

        case ConsoleKey.LeftArrow:
            if (map[x - speed, y] != '#')
            {
                x -= speed;
            }
            break;

        case ConsoleKey.RightArrow:
            if (map[x + speed, y] != '#')
            {
                x += speed;
            }
            break;
    }

    Console.Clear();
}

Ответы

▲ 0Принят

Поменял индексы местами в if-блоках, где было

map[x, y - speed]

стало

map[y - speed, x]