Рекомендую погуглить, так как здесь я это освещу совсем мельком. Если пуля летит где-то в правом верхнем углу, нет смысла проверять стенку в левом нижнем. Чтобы как-то использовать этот факт, уровень делят на сектора. Для каждого сектора ведётся учёт того, что есть внутри их. И когда мы проверяем столкновения, мы проверяем только тех, кто находится в одном секторе. Если правильно выбрать размер сектора, проблема решается на корню.
Ну держи в курсе нас, разработчик-стример. Каждый второй сейчас "разработчик" (мамкин)
Вообще в прошлый раз хотел сказать, что написать свой музыкальный движок для NES это супер круто. Надеюсь у тебя всё получится :з