Если следующая позиция (currentPosition (x|y
) + direction (dx|dy
)) дальше доступного пространства (все пространство минус радиус шара) или меньше радиуса шара, то инвертируйте направление.
В первом случае мы слишком много справа или снизу, во втором мы слишком много слева или сверху.
Итак, следующий x += dx
или y += dy
фактически идет назади никогда не ударяется о стену.
Кстати, для реалистичного удара вы бы хотели узнать, сколько он должен был пройти в стену, чтобы получить правильную позицию после отскока.