Нашей задачей не является сделать из вас программистов. Однако одно занятие можно потратить на то, чтобы показать, как же создаются программы для компьютера. В 18 кабинете на одном из компьютеров есть хранитель экрана - мыльные пузыри.
Мы напишем 16 строчек, которые реализуют основную функциональность этого хранителя экрана - движение круга по экрану и отражение его от стен. Работать будем на GWBASIC - языке, специально разработанном для обучения программированию. На рабочем столе должен быть ярлык на эту программу. Запустив её вы увидите чёрный экран - в 1983 году, когда создавалась эта среда, в нём не было ни поддержки Ctrl+С/Ctrl+V ни мыши. Однако, для короткой программки сойдёт.
Не забывайте после каждой строки нажимать Enter, чтобы та ввелась в память компьютера.
Теперь добавим гравитацию - пусть круг подскакивает как мячик. Прервите программу, нажав Ctrl+Break.
Выведите текст программы. Для этого нужно набрать команду LIST
Вспоминаем физику. При движении брошенного тела, с ускорением g меняется вертикальная составляющая его скорости, VY. Значит, в программу нужно добавить 2 строки (их можно набирать внизу, они встроятся в нужное место)
Инициализируем переменную G
Запускам программу, наблюдаем за изменениями в движении.
Подумайте, как надо изменить программу, чтобы круг притягивался к верхнему краю экрана? А к правому или левому?
Мы напишем 16 строчек, которые реализуют основную функциональность этого хранителя экрана - движение круга по экрану и отражение его от стен. Работать будем на GWBASIC - языке, специально разработанном для обучения программированию. На рабочем столе должен быть ярлык на эту программу. Запустив её вы увидите чёрный экран - в 1983 году, когда создавалась эта среда, в нём не было ни поддержки Ctrl+С/Ctrl+V ни мыши. Однако, для короткой программки сойдёт.
Что нужно знать для того, чтобы задать положение круга на экране?
Положение его центра (Х, Y) и радиус R. Для красоты круг можно рисовать некоторым цветом C
Что нужно знать, чтобы круг двигался?
Проекции его скорости на оси х и у: VX и VY.
На компьютере движение тела моделируется следующим образом:
Выбирается небольшой шаг времени DT, и с этим шагом каждый раз вычисляются новые координаты тела. Для прямолинейного движения формула будет:
X=X+VX*DT
Y=Y+VY*DT
Т.е. координата по оси Х будет той, что была, плюс то расстояние, на какое тело успело переместиться за время DT. Аналогично и для игрека.
Теперь как математически выразить отражение круга от края экрана?
Рассмотрим четыре его положения:
В положениях левее круга 1 и правее круга 3 происходит отражение от вертикальных границ. Это значит, что скорость VX должна поменять знак.
Если круг будет левее положения 1, то для него будет верным неравенство X<=R. Если он правее круга 3, то верно неравенство X>=600-R.
Поэтому команда отражения от вертикальных стенок будет выглядеть так:
IF X<=R OR X>=600-R THEN VX=-VX
В положениях ниже круга 2 и выше круга 4 менять знак должна скорость VY.
Поэтому, аналогично
IF Y<=R OR Y>=300-R THEN VY=-VY
Теперь сформулируем алгоритм, по которому круг будет летать по экрану
- Перевести экран в графический режим
- Инициализировать переменные
- Стереть старое положение круга
- Просчитать новое положение круга
- Нарисовать круг
- Проверить отражение
- Перейти к пункту 3
Сделаем на основе алгоритма программу, используя соображения, приведённые ранее.
Пункт 1 реализуется двумя стандартными строками (здесь и далее строки с номерами - это те строки, которые нужно вводить в BASIC. Причём вводить их надо тоже с номерами, как написаны тут):
10 SCREEN 9
20 CLS
Пункт 2: зададим переменным стартовые значения
30 X=200
40 Y=150
50 R=30
60 C=14
70 DT=0.1
70 DT=0.1
80 VX=7
90 VY=5
90 VY=5
Таким образом, координата центра круга по оси х будет равна 200, по оси у – 150, радиус круга – 30, цвет – 14 (жёлтый).
Шаг времени задаём равным 0,1 секунды, если понадобится – отрегулируем потом. Проекции скорости по осям х и у будут равны 7 и 5.
Пункт3. Чтобы стереть изображение, его нужно нарисовать нулевым цветом, т.е. чёрным
100 CIRCLE(X,Y),R,0
Пункт 4. Применяем выведенные формулы
110 X=X+VX*DT
120 Y=Y+VY*DT
Пункт 5 – рисуем круг в новых координатах
130 CIRCLE(X,Y),R,C
Пункт 6 – применяем выведенные формулы отражения
140 IF X<=R OR X>=600-R THEN VX=-VX
150 IF Y<=R OR Y>=300-R THEN VY=-VY
Пункт 7 – возвращаемся к пункту 3 алгоритма, т.е. к 100й строке программы
160 GOTO 100
Запускаем программу. Для этого нужно перейти курсором на пустую строку, набрать RUN и нажать Enter. Наблюдаем, наслаждаемся плодами труда своего J
Теперь добавим гравитацию - пусть круг подскакивает как мячик. Прервите программу, нажав Ctrl+Break.
Выведите текст программы. Для этого нужно набрать команду LIST
Вспоминаем физику. При движении брошенного тела, с ускорением g меняется вертикальная составляющая его скорости, VY. Значит, в программу нужно добавить 2 строки (их можно набирать внизу, они встроятся в нужное место)
75 G=1
Вычисляем новую вертикальную скорость
135 VY=VY+G*DT
Запускаем программу.
Добавим эффект переливания. Перед каждой отрисовкой будем случайнм образом менять цвет. Дописываем строку:
105 C = INT(1+RND*14)
Запускаем, смотрим. И ещё одна модификация - пусть круг оставляет цветной след. Для этого отключим стирание предыдущего положення круга. Это делается отключением строки 100. Её можно не удалять, а просто поставить после номера строки апостроф:
Запускаем программу.
Добавим эффект переливания. Перед каждой отрисовкой будем случайнм образом менять цвет. Дописываем строку:
105 C = INT(1+RND*14)
Запускаем, смотрим. И ещё одна модификация - пусть круг оставляет цветной след. Для этого отключим стирание предыдущего положення круга. Это делается отключением строки 100. Её можно не удалять, а просто поставить после номера строки апостроф:
100 ‘CIRCLE(X,Y),R,0
Немає коментарів:
Дописати коментар