Управление окружностью

   Нарисуем на экране некоторую фигуру, например, окружность. Как заставить ее двигаться при нажатии на клавишу-стрелку? Предположим, что мы нажали на стрелку влево. Сотрем на старом месте окружность и нарисуем такую же, но смещенную на несколько пикселей влево. Если была нажата стрелка вправо, то смещенную окружность будем рисовать на несколько пикселей вправо и т.д.

   Для хранения параметров “старой” и “новой” окружности введем переменные:

   x0, y0 - координаты центра “старой” окружности; r0 - ее радиус.

x, y - координаты центра “новой” окружности; r - ее радиус.

   Приведем алгоритм решения.

  1. Задаем начальные значения переменных.
  2. Рисуем окружность.
  3. Ждем нажатия клавиши.
  4. Вычисляем координаты центра “новой” окружности.
  5. Стираем “старую” и рисуем “новую” окружность.
    (Чтобы стереть окружность, нужно нарисовать ее цветом фона!)
  6. Заменяем параметры “старой” окружности новыми значениями и переходим к пункту 3.

   В пункте 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. Удобнее сделать все три присваивания перед оператором выбора, а в каждом варианте вычислять только тот параметр, который действительно изменялся. Во-вторых, мы заложили в программу возможность изменения радиуса окружности, но не воспользовались этим. Назначим клавишу “>” для увеличения, а клавишу “<” - для уменьшения радиуса. Наконец, если “стирать” окружность не цветом фона, а любым другим, на экране будет оставаться след - узор из окружностей.

   Задание. Реализуйте все улучшения программы. Придумайте, как изменять цвет оставляемого окружностью следа и шаг перемещения окружности.

 

Сайт создан в системе uCoz