Вместо того, чтобы пытаться исправить свой код, работайте на уровне проектирования, разрабатывая программную архитектуру, которая состоит из двух компонентов: физической модели и дисплея. Ключ состоит в том, чтобы отделить физику проблемы от дисплея. Моделирование физики становится намного проще, когда выполняется отдельно от дисплея. Кроме того, дисплей также становится легче. Имейте два отдельных пакета - один для физики и один для дисплея.
Начните с более простой версии проблемы, когда у мира физики есть точка и линия. Смоделируйте точку, отраженную от линии. У вас есть код, который делает это. Просто вырви его из текущего кода. Убедитесь, что физика делает то, что вы ожидаете, не беспокоясь о дисплее.
Дизайн класса для бала. Мяч обладает скоростными и позиционными свойствами. У него есть метод перемещения, который обновляет позицию в зависимости от скорости за один клик. Метод перемещения проверяет, взаимодействовал ли он (сталкивался) со стеной, и изменяет скорость в соответствии с физикой, которой вы хотите, чтобы ваш мир обладал. Обнаружение столкновения делается путем запроса стены, где это было. Физика могла бы быть углом падения равным углу отражения, или у вас могло быть свойство вращения на шаре, которое изменяет, как шар отскакивает. Ключ в том, что все физическое моделирование выполняется отдельно от дисплея. Точно так же вы создаете класс для стены. Первоначально стена зафиксирована, но вы можете добавить движение к ней. Приятно то, что если вы правильно спроектировали класс мяча, изменив стену так, чтобы она двигалась, это не повлияет на дизайн класса мяча. Кроме того, ни одно из этих изменений в физике не влияет на работу дисплея.
Сделать дисплей, который просто переводит физику в презентацию на экране.
Оттуда вы можете добавить сложность к вашей модели. Сделайте точку кругом. Переделайте физику, чтобы заставить ее работать с этой новой сложностью. Дисплей не сильно изменится, но держите их отдельно.
У меня в классе CS1 есть версии этой же проблемы. Два года назад я велел им сыграть в понг. В прошлом году была версия Многоножки. В следующем семестре у них будет Breakout как проект. Когда они моделируют физику отдельно от дисплея, они работают. Когда они этого не делают, обычно это путаница.