Добавить direction и для второго игрока, чтобы у каждого свой был. Можно было даже enum разделить.
Чтобы получилось
eDirection dir,dir2;
void Input()
{
if (_kbhit())
{
switch (_getch())
{
case 'a':
dir = LEFT;
break;
case 'w':
dir = UP;
break;
case 'd':
dir = RIGHT;
break;
case 's':
dir = DOWN;
break;
case 'x':
GameOver = true;
break;
case 'k':
dir2 = LEFT_2;
break;
case 'o':
dir2 = UP_2;
break;
case ';':
dir2 = RIGHT_2;
break;
case 'l':
dir2 = DOWN_2;
break;
}
}
}
//....Logic
switch (dir2)
{
case LEFT_2:
x_2--;
break;
case RIGHT_2:
x_2++;
break;
case UP_2:
y_2--;
break;
case DOWN_2:
y_2++;
break;
}
// управление 2
P.S. Потому-что ты в input перезаписываешь прошлое нажатие, а в logic для управление оно просто не подходит не для одного енума из первого свича если последний нажал второй игрок и из второго свича если последний нажал первый игрок