https://angular-rxjs6-3ge5rx.stackblitz.io
combineLatest для вашего случая не подходит. Уже в названии можно понять весь подвох ситуации. Он комбинирует
последние значения для обоих Observable. Изменение enemyMove$ каждые 200мс приводит к тому, что ваша подписка (subscribe) срабатывает каждые 200мс и получает
оба значения: рандомное для enemyMove$ и
последнюю нажатую клавишу для playerMove$. Даже если мы клавишу больше не жмём, её
последнее значение попадает в next.