Оператор цикла с параметром. Движение
1) Перемещение объекта по экрану.
Представим, что экран монитора это ночное небо, а на нем перемещается спутник (белая точка). Напишем фрагменты программы, перемещающие спутник по горизонтали слева направо и справа налево, по вертикали вниз и вверх, по диагоналям в ту и другую стороны. В любом из указанных случаев, фрагмент программы должен реализовать алгоритм:
В цикле от начального положения до конечного:
а) рисуем точку;
б) задерживаем;
в) стираем точку, наложив на нее черную;
г) изменяем координаты местоположения точки, на нужный шаг с помощью оператора присваивания или (и) автоматически.
Фрагменты программ могут выглядеть так:
Вид движения | Фрагмент программы | Пояснение |
Y=240 FOR X=0 TO 640 PSET(X,Y),15 FOR W=1 TO 500 NEXT W PSET(X,Y),0 NEXT X | При движении вдоль оси Х изменяется соответствующая координата (автоматически, как параметр), можно добавить шаг, тогда движение будет скачками. | |
Y=240 FOR X=640 TO 0 STEP -1 PSET(X,Y),15 FOR W=1 TO 500 NEXT W PSET(X,Y),0 NEXT X | При движении вдоль оси Х изменяется соответствующая координата (автоматически, как параметр), но в обратном направлении (шаг отрицательный) | |
X=320 FOR Y=0 TO 480 PSET(X,Y),15 FOR W=1 TO 500 NEXT W PSET(X,Y),0 NEXT Y | При движении вдоль оси Y изменяется соответствующая координата (автоматически, как параметр), можно добавить шаг, тогда движение будет скачками. | |
X=320 FOR Y=480 TO 0 STEP -1 PSET(X,Y),15 FOR W=1 TO 500 NEXT W PSET(X,Y),0 NEXT Y | При движении вдоль оси Y изменяется соответствующая координата (автоматически, как параметр), но в обратном направлении (шаг отрицательный) | |
X=0 FOR Y=0 TO 480 STEP 2 PSET(X,Y),15 FOR W=1 TO 500 NEXT W PSET(X,Y),0 X=X+3 NEXT Y Так как экран не квадрат, то координату X нужно изменятьри движении вдоль оси хковую четностьрдинаты с большим шагом. | При движении по диагонали изменяются обе координаты. По вертикали экран короче, поэтому ось Y удобней изменять автоматически, как параметр, а X – с помощью присваивания. | |
X=640 FOR Y=480 TO 0 STEP -2 PSET(X,Y),15 FOR W=1 TO 500 NEXT W PSET(X,Y),0 X=X-3 NEXT Y | Изменяются обе координаты. Ось Y автоматически, как параметр (шаг отрицательный, т.к. движение к 0), а X – с помощью присваивания (значение координаты тоже стремится к 0). | |
X=640 FOR Y=0 TO 480 STEP 2 PSET(X,Y),15 FOR W=1 TO 500 NEXT W PSET(X,Y),0 X=X-3 NEXT Y | Изменяются обе координаты. Ось Y автоматически, как параметр, а X – с помощью присваивания (значение координаты уменьшается). | |
X=0 FOR Y=480 TO 0 STEP - 2 PSET(X,Y),15 FOR W=1 TO 500 NEXT W PSET(X,Y),0 X=X+3 NEXT Y | Изменяются обе координаты. Ось Y автоматически, как параметр (шаг отрицательный, т.к. движение к 0), а X – с помощью присваивания (значение координаты увеличивается). |
Задание:
Написать программу движения мяча произвольного радиуса, по фиксированной траектории в форме треугольника. Движение осуществляется по часовой стрелке. Треугольник изображать не нужно.
Решение:
Пусть радиус мяча будет вводиться с клавиатуры и храниться в переменной R.
Мяч движется вначале из точки (80,400) до точки (320, 160), затем до точки (560, 400) и возвращается в точку (80,400). Это движение может реализоваться при последовательном использовании трех циклов с параметром. Данные точки будут центрами окружности, изображающей мяч. Стирать мяч будем с помощью черного квадрата, описанного около окружности. В программе будет реализован следующий алгоритм:
1. Вводим значение радиуса;
2. Зафиксируем значение переменной х=80;
3. В цикле с параметром у от 400 до 160 с отрицательным шагом:
а) рисуем мяч;
б) задерживаем;
в) стираем;
г)изменяем координату по оси х с помощью оператора присваивания на величину шага со знаком «+».
4. В цикле с параметром у от 160 до 400 с положительным шагом:
а) рисуем мяч;
б) задерживаем;
в) стираем;
г)изменяем координату по оси х с помощью оператора присваивания на величину шага со знаком «+».
5. В цикле с параметром х от 560 до 80 с отрицательным шагом:
а) рисуем мяч;
б) задерживаем;
в) стираем.
Программа:
CLS
PRINT “введите радиус мяча”
INPUT R
X=80
FOR Y=400 TO 160 STEP -1
CIRCLE(X, Y), R, 4
PAINT(X, Y), 4, 4
FOR W=1 TO 500
NEXT W
LINE(X-R, Y-R)-(X+R, Y+R), 0, BF
X=X+1
NEXT Y
FOR Y=160 TO 400
CIRCLE(X, Y), R, 4
PAINT(X, Y), 4, 4
FOR W=1 TO 500
NEXT W
LINE(X-R, Y-R)-(X+R, Y+R), 0, BF
X=X+1
NEXT Y
FOR X=560 TO 80 STEP -1
CIRCLE(X, Y), R, 4
PAINT(X, Y), 4, 4
FOR W=1 TO 500
NEXT W
LINE(X-R, Y-R)-(X+R, Y+R), 0, BF
NEXT Y
END