Персонаж игры в консоли C# не всегда отвечает на кнопки
Персонаж игры в консоли 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();
}
Источник: Stack Overflow на русском