Управление окружностью
Нарисуем на экране некоторую фигуру, например, окружность. Как заставить ее двигаться при нажатии на клавишу-стрелку? Предположим, что мы нажали на стрелку влево. Сотрем на старом месте окружность и нарисуем такую же, но смещенную на несколько пикселей влево. Если была нажата стрелка вправо, то смещенную окружность будем рисовать на несколько пикселей вправо и т.д.
Для хранения параметров “старой” и “новой” окружности введем переменные:
x0, y0 - координаты центра “старой” окружности; r0 - ее радиус.
x, y - координаты центра “новой” окружности; r - ее радиус.
Приведем алгоритм решения.
В пункте 6 алгоритма происходит обновление переменных x0, y0, r0. Им присваиваются значения x, y, r, и с этого момента окружность становится “старой”. При следующем проходе программа будет оперировать с новыми значениями параметров “старой” окружности.
(Возможен вариант:
5’. Стираем “старую” окружность.
6’. Заменяем координаты центра “старой” окружности новыми значениями и переходим к пункту 2.)
Программу “Управление окружностью” напишем на основе ARROW.BAS.
‘-------- Программа “Управление окружностью” --------
‘Задаем константы
LF$ = CHR$(0) + CHR$(75) RT$ = CHR$(0) + CHR$(77) UP$ = CHR$(0) + CHR$(72) DN$ = CHR$(0) + CHR$(80) Esc$ = CHR$(27)
‘Задаем начальные значения переменных
SCREEN 7 x0 = 160: y0 = 100: r0 = 10
‘Рисуем окружность
CIRCLE (x0, y0), r0
‘Ждем нажатия клавиши
10 s$ = INKEY$: IF s$ = “” THEN GOTO 10
‘Анализируем строку s$ и вычисляем параметры “новой” окружности
SELECT CASE s$ CASE LF$: x = x0 - 5: y = y0: r = r0 CASE RT$: x = x0 + 5: y = y0: r = r0 CASE UP$: x = x0: y = y0 - 5: r = r0 CASE DN$: x = x0: y = y0 + 5: r = r0 CASE Esc$: STOP CASE ELSE: GOTO 10 END SELECT
‘Стираем “старую” и рисуем “новую” окружность
CIRCLE (x0, y0), r0, 0 CIRCLE (x, y), r
‘Заменяем параметры “старой” окружности новыми значениями
x0 = x: y0 = y: r0 = r GOTO 10 |
Запишем программу под именем CIRCLES.BAS, убедимся, что она работает, и попробуем ее улучшить. Во-первых, нерационально повторять в каждом CASE одинаковые присваивания x = x0, y = y0, r = r0. Удобнее сделать все три присваивания перед оператором выбора, а в каждом варианте вычислять только тот параметр, который действительно изменялся. Во-вторых, мы заложили в программу возможность изменения радиуса окружности, но не воспользовались этим. Назначим клавишу “>” для увеличения, а клавишу “<” - для уменьшения радиуса. Наконец, если “стирать” окружность не цветом фона, а любым другим, на экране будет оставаться след - узор из окружностей.
Задание. Реализуйте все улучшения программы. Придумайте, как изменять цвет оставляемого окружностью следа и шаг перемещения окружности.