Помимо найденного сам код в целом не очень.
Вы используете непереносимую функцию _getch() непосредственно в основном коде. Оставив за скобками саму идею использования этой "чудесной" функции, могу заметить,, что все непереносимое г... желательно выносить в отдельный слой.
Конструкция
size_t pos = kDefaultKeys.find(char(::tolower(ch))); pos != std::string::npos
выглядит странной и имеет сомнительную эффективность.
По существу вам надо, чтобы при нажатии на определенную клавишу координаты игрока менялись в нужную сторону. Я бы использовал механизм ввода, позволяющий анализировать как нажатия, так и отпускания клавиш. Нажатие должно устанавливать соответствующий битовый флаг а отпускание - снимать. Совокупность битовых флагов даст число, которое можно использовать как индекс в массиве указателей на функции. Это позволит обрабатывать ситуации, когда игрок нажал несколько клавиш одновременно и будет работать быстрее, чем switch-case.