Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Что не так в этом switch-case

Никита Рамилиев Знаток (363), открыт 2 дня назад
     for (; ;)   
{
unsigned char ch = char(_getch());

if (size_t pos = kDefaultKeys.find(char(::tolower(ch))); pos != std::string::npos)
{
std::cout << "\b \b" << ch << std::endl;

map[player.position().y][player.position().x] = char(UnitType::Empty);
auto dir_pos = static_cast<Direction>(pos);

switch (dir_pos)
{
case Direction::Up:
player.position_link().y--;
break;
case Direction::Down:
player.position_link().y++;
break;
case Direction::Left:
player.position_link().x--;
break;
case Direction::Right:
player.position_link().x++;
break;
}

break;
}
}
  • скрин не могу дать, mail ru сожралл качество. ошибка с двух последних кейсах, ругается по причине "значение метки случая уже есть в данном переключателе в строке 173"
  • это не визуальный баг, но какие здесь могут быть ошибки? программа просто не компилируется, буду рад если поможете
Дополнен 2 дня назад
[РЕШИЛ] кейсы были с одинаковыми значениями
1 ответ
D P Мудрец (18448) 1 день назад
Помимо найденного сам код в целом не очень.
Вы используете непереносимую функцию _getch() непосредственно в основном коде. Оставив за скобками саму идею использования этой "чудесной" функции, могу заметить,, что все непереносимое г... желательно выносить в отдельный слой.
Конструкция
 size_t pos = kDefaultKeys.find(char(::tolower(ch))); pos != std::string::npos 
выглядит странной и имеет сомнительную эффективность.
По существу вам надо, чтобы при нажатии на определенную клавишу координаты игрока менялись в нужную сторону. Я бы использовал механизм ввода, позволяющий анализировать как нажатия, так и отпускания клавиш. Нажатие должно устанавливать соответствующий битовый флаг а отпускание - снимать. Совокупность битовых флагов даст число, которое можно использовать как индекс в массиве указателей на функции. Это позволит обрабатывать ситуации, когда игрок нажал несколько клавиш одновременно и будет работать быстрее, чем switch-case.
Похожие вопросы