вообще если все "жуки" одного цвета, то можно схитрить и не делать поворота ;), а просто сделать так, чтобы каждый "жук" доходил до конца - 1 шаг стороны А и цикл тупо начинался сначала )
Если жуки все же разных цветов и необходимо сделать движение по кругу, то нужно следующее:
1. точно определиться с шагом "жуков", чтобы сделать движение равномерным и с одинаковым отступом у краев квадрата. Либо рассчитывать шаг автоматически если сторона квадрата произвольная. пример для "жука" сверху: А=310, r=30, shag=30, отступ от края=по 5 с двух сторон, шагов нужно пройти 10, x(начальное)=20, x(конечное)=290 (x - твое b; y - твое c)
2. условие для поворота можно использовать такое: if (x + shag = A) то делаем поворот
3. реализация поворота у тебя неправильная (если ты ее описал так, как у тебя в коде). общий случай движения по кругу для каждого из жуков при его нахождении в определенной позиции (сверху, справа, снизу, слева) будет выглядеть так: "жук" сверху - x = x + shag, "жук" справа - y = y - shag, "жук" снизу - x = x - shag, "жук" слева - y = y - shag.
поворотом же будет просто смена знака у shag'a при определенной позиции
4. через if делать геморно, в данной ситуации лучше воспользоваться циклом while. Все это будет выглядеть так:
Код:
//начальные координаты
//рисуем круги
repeat
while (x + shag <> A)
begin
x = x + shag;
y1 = y1 + shag;
x2 = x2 + shag;
y3 = y3 - shag;
//рисуем круги
end
while (x3 + shag <> A)
begin
y = y + shag;
x1 = x1 - shag;
y2 = y2 - shag;
x3 = x3 + shag;
//рисуем круги
end
while (x2 + shag <> A)
begin
x = x - shag;
y1 = y1 - shag;
x2 = x2 + shag;
y3 = y3 + shag;
//рисуем круги
end
while (x1 + shag <> A)
begin
y = y - shag;
x1 = x1 + shag;
y2 = y2 + shag;
x3 = x3 - shag;
//рисуем круги
end
until KeyPressed;
циклы while пишутся именно в такой последовательности
-- Вс ноя 28, 2010 13:20:42 --