Пока вы не разберете программу на отдельные части и блоки, у вас врядли что получиться. Движение шарика - это изменение его координат во времени - вам нужна хоть какая то синхронизация. Если называется процедура "движение", то она должна выполнять изменение координат шарика за единицу времени, которую вы определите заранее. В эту процедуру не должны входить проверки нажатия клавиш, всякие графические работы и пр. Попробуйте сначала навести порядок в самой программе, потому что потом будет ж... и уже никто кроме вас самих не сможет помочь.
Для более простой и быстрой разработки программы, а также для простоты ее модификации желательно определить ракетку и шарик хотя бы в виде записей (Record).
Тогда для шарика имеем:
Код: Выделить всё
TBall = record
X : Single;
Y : Single;
V : Single;
Angle : Single;
end;
Почему там стоит Single? Потому что при низкой скорости шарика (V < 1) в одной из осей - его координаты не поменяются, т.к. dx или dy < 1, а координаты шарика - целые числа.
Для прямоугольной ракетки зададим в качестве координат его левый верхний угол.
Код: Выделить всё
TRacket = record
X : Integer;
Y : Integer;
Width : Integer;
Height : Integer;
end;
Т.к. игроков два, то и ракеток тоже. Поэтому в коде должны присутствовать две переменные этого типа. Теперь вам надо внедрить это описание в свою программу и сделать хотя бы процедуру инициализации и отрисовки ракетки. В качестве параметров передается сама ракетка. Все расчеты потом будут выполнятся через функции, параметрами которых будут шарик и (или) ракетка. Гибкость программы - очень важный фактор.
Код: Выделить всё
function InitRacket(Player : Byte) : TRacket;
procedure DrawRacket(R : TRacket);
procedure BallMoving(B : TBall);
procedure DrawBall(B : TBall);
function CheckForCollision(B:TBall;R:TRacket):Boolean;
procedure CalcCollisionPhysics(B:TBall;R:TRacket);
function CheckForWallsCollision(B:TBall):Boolean;
procedure CalcWallsCollisionPhysics(B:TBall);
Вот основной список процедур, каждая из них проста в выполнении - их композиция делает код читабельным, понятным, простым в работе и разборе. Вы без труда сможете поменять правила игры, поведение шарика, отрисовку объектов не перелопачивая весь код.