Карандаш - Информатика

advertisement
Министерство Образования РФ
Графический редактор
«КАРАНДАШ»
Выполнил
Руководитель
г. Усть-Кут,
2003-2004 уч. год
Маркова Таня
ученица 11 «А» класса
МОУ СОШ №9
гУсть-Кут 2003-2004 уч. год
Мильтова Ирина Васильевна
2
СОДЕРЖАНИЕ
ВВЕДЕНИЕ
3
ЦЕЛЬ РАБОТЫ
4
I ОСНОВНЫЕ ФУНКЦИИ ЯЗЫКА Qbasic, ИСПОЛЬЗУЕМЫЕ В
5
ПРОГРАММЕ
II ПОЛЬЗОВАТЕЛЬСКОЕ МЕНЮ
7
III ПРОГРАММА НА ЯЗЫКЕ Qbasic
8
ЗАКЛЮЧЕНИЕ
12
СПИСОК ЛИТЕРАТУРЫ
13
3
ВВЕДЕНИЕ
Изучая возможности Qbasica в 9-11 классах, мне захотелось сделать свою,
непохожую на другие программу. Просмотрев необходимую литературу, я
выяснила, что можно создать такую программу, в которую войдут различные
функции и команды, не изучавшиеся в школе. Идея создания графической
программы связана с открытием новых возможностей для меня. Это изучение
новых функций и алгоритмов на языке программирования Qbasic, а также
личная фантазия.
4
ЦЕЛЬ РАБОТЫ
Создать программу на языке Qbasic, которая позволяет изображать
различные геометрические фигуры или фигуры, состоящие из таковых фигур, и
будет доступна для учеников младших классов.
5
ФУНКЦИИ ЯЗЫКА QBASIC, ИСПОЛЬЗУЕМЫЕ В
ПРОГРАММЕ
1. Арифметические
 сложение
 вычитание
 сравнение
 присваивание
2. Условные
 IF<условие>THEN<действ 1>ELSE<действ 2>
 SELECT CASE условие
3. Графические
 PAINT (X, Y), C-закрашивает заданную область в определенный
цвет
 PSET (X, Y), C-рисует точку с заданными координатами и цветом
 CIRCLE
(X,
Y),
R,
C-рисует
окружность
с
заданными
координатами, радиусом и цветом
 LINE (X1, Y1)-(X2, Y2), C- чертит линию с заданными
начальными и конечными координатами и цветом
4. Массивы
 DIM A (N)-для создания массива
 GET (X1, Y1)-(X2, Y2), A%-запоминает заданную область в массив
 PUT (X, Y), A%-выводит сохраненный массив на экран
6
5. Функция ссылки
 GOTO N-«идет» на N-ую строку
6. Специальные функции для работы с клавишами
 CHR$(N)-«имитирует» клавиши
 INKEY$-ввод кода клавиши
7. Функции ввода-вывода
 INPUT “комментарий”; N (N$)-служит для ввода необходимой
информации
7
ПОЛЬЗОВАТЕЛЬСКОЕ МЕНЮ
Панель Num Lock
“-“
Num
Движение курсора с
Lock
«7»
клавиш сопровождается линией заданного
«8»
«9»
«+»
цвета
 «-» -очищает экран
 «+»
«4»
«5»
«6»
«2»
«3»
-
отмечает
начало
нестандартной линии

«1»
помощью данных
Enter
Enter
– отмечает конец линии и
рисует ее
 «.» - рисует окружность заданного
радиуса с центром в точке под
«0»
«.»
карандашом
 «0» - выбирает нужный цвет
 «1» - движение влево вниз
 «2» - движение вниз
 «3» - движение вправо вниз
 «4» - движение влево
 «5» - закрашивает замкнутую область чуть левее и ниже острия карандаша
 «6» - движение вправо
 «7» - движение влево вверх
 «8» - движение вверх
 «9» - движение вправо вверх
Клавиши управления курсором.
Движение при помощи этих клавиш не оставляет
за собой линии. Клавиша Esc служит для выхода
из программы.
8
ПРОГРАММА НА ЯЗЫКЕ QBASIC
SCREEN 12
*переключаемся в графический режим работы
*ниже представлены операции присваивания, с помощью которых будут
распознаваться нажатые клавиши
LF$ = CHR$(52) *клавиша, условно обозначенная как LF$, имеет код 52.
RT$ = CHR$(54)
UP$ = CHR$(56)
DN$ = CHR$(50)
*четыре нижние клавиши имеют сложный код, т.к. они являются
функциональными
OLF$ = CHR$(0) + CHR$(75)
OUP$ = CHR$(0) + CHR$(72)
ORT$ = CHR$(0) + CHR$(77)
ODN$ = CHR$(0) + CHR$(80)
LFUP$ = CHR$(55)
RTUP$ = CHR$(57)
RTDN$ = CHR$(51)
LFDN$ = CHR$(49)
CL$ = CHR$(53)
CV$ = CHR$(48)
CLS$ = CHR$(45)
CIRCLE$ = CHR$(46)
LIN$ = CHR$(13)
LON$ = CHR$(43)
*это начальный набор переменных
X0 = 20
Y0 = 0
LUN$ = ""
LYN$ = ""
9
* создаем массив для изображения карандаша
DIM K %(900)
*рисуем карандаш при помощи линий
50 LINE (0, 20)-(20, 0)
LINE (20, 0)-(30, 10)
LINE (30, 10)-(10, 30)
LINE (10, 30)-(0, 30)
LINE (0, 30)-(0, 20)
LINE (0, 20)-(10, 30)
LINE (0, 25)-(5, 30)
PAINT (1.5, 29)
PAINT (10, 20)
*запоминаем его в созданный массив
GET (0, 0)-(30, 30), K%
*выводим повторно на экран для удаления прежнего изображения
PUT (0, 0), K%
*выводим карандаш на начальное положение
PUT (X0, Y0), K%
*ждем нажатия клавиши, если клавиша не нажата, то идем опять на строку 10
10 GHY$ = INKEY$: IF GHY$ = "" THEN GOTO 10
*обнуляем константы в цикле
KEL = 0
CVT0 = 0
PAINT$ = ""
*анализируем нажатую клавишу и следуем «указаниям»
*при изменении координат карандаша мы проверяем, чтобы изображение не
вылезло за рамки экрана, и заменяем их в случае надобности на старые
SELECT CASE GHY$
CASE LF$: X = X0 - 10: Y = Y0: IF X < 20 THEN X = X0
CASE RT$: X = X0 + 10: Y = Y0: IF X > 600 THEN X = X0
10
CASE UP$: Y = Y0 - 10: X = X0: IF Y < 0 THEN Y = Y0
CASE DN$: Y = Y0 + 10: X = X0: IF Y > 400 THEN Y = Y0
CASE OLF$: X = X0 - 10: Y = Y0: KEL = 1: IF X < 20 THEN X = X0
CASE OUP$: Y = Y0 - 10: X = X0: KEL = 1: IF Y < 0 THEN Y = Y0
CASE ORT$: X = X0 + 10: Y = Y0: KEL = 1: IF X > 600 THEN X = X0
CASE ODN$: Y = Y0 + 10: X = X0: KEL = 1: IF Y > 400 THEN Y = Y0
CASE LFUP$: X = X0 - 10: Y = Y0 - 10: IF X <= 20 THEN X = X0: Y = Y0
ELSE IF Y <= 0 THEN Y = Y0: X = X0
CASE RTUP$: X = X0 + 10: Y = Y0 - 10: IF X >= 600 THEN X = X0: Y = Y0
ELSE IF Y <= 0 THEN Y = Y0: X = X0
CASE RTDN$: X = X0 + 10: Y = Y0 + 10: IF X >= 600 THEN X = X0: Y = Y0
ELSE IF Y >= 400 THEN Y = Y0: X = X0
CASE LFDN$: X = X0 - 10: Y = Y0 + 10: IF X <= 20 THEN X = X0: Y = Y0
ELSE IF Y >= 400 THEN Y = Y0: X = X0
CASE CL$: PAINT$ = "1"
CASE CV$: INPUT CVT *вводим новый цвет
CASE CLS$: CLS: GOTO 10 *очищаем экран и идем на строку 10
CASE CIRCLE$: INPUT RAD *вводим радиус окружности
CASE LIN$: L1X = X0: L1Y = Y0: LUN$ = "S" *фиксируем начало и
CASE LON$: L2X = X0: L2Y = Y0: LYN$ = "S"*конец нестандартной линии
CASE CHR$(27): END *клавиша Esc позволяет выйти из программы
CASE ELSE: GOTO 10 *если нажата какая-нибудь «лишняя» клавиша, то
мы возвращаемся на строку 10
END SELECT
*заканчиваем анализ клавиши
*выводим карандаш на старое место
PUT (X0, Y0), K%
*рисуем на новом месте, если изменились координаты
PUT (X, Y), K%
11
*если надо нарисовать линию, а цвет вы не выбрали, то линия будет
нарисована белым
IF KEL <> 1 AND CVT = 0 THEN LINE (X0 - 1, Y0 + 31)-(X - 1, Y + 31)
*иначе нарисуется цветная линия
IF KEL <> 1 AND CVT <> 0 THEN LINE (X0 - 1, Y0 + 31)-(X - 1, Y + 31), CVT
*теперь мы анализируем клавишу заполнения цветом, если метка не совпадает,
то мы отправляемся дальше (строка 10)
IF PAINT$ <> "1" THEN GOTO 20
*заполняем нужную область нужным цветом
IF CVT = 0 THEN PAINT (X0 - 16, Y0 + 51) ELSE PAINT (X0 - 16, Y0 + 51), CVT
*проверяем метку для рисования окружности
20 IF RAD = 0 THEN GOTO 40
*рисуем окружность с заданным заранее радиусом
IF CVT = 0 THEN CIRCLE (X, Y + 30), RAD ELSE CIRCLE (X0, Y0 + 30), RAD,
CVT
* проверяем метку для рисования нестандартной линии
40 IF LYN$ = "S" AND LUN$ <> "S" THEN LYN$ = "": GOTO 60
*если метки совпадают, значит, имеется и начальная координата, и конечная,
тогда рисуем линию
IF LUN$ = "S" AND LUN$ = "S" THEN GOTO 15 ELSE GOTO 60
15 IF CVT = 0 THEN LINE (L1X, L1Y + 31)-(L2X, L2Y + 31) ELSE LINE (L1X,
L1Y + 31)-(L2X, L2Y + 31), CVT
*обнуляем переменные линии
LUN$ = ""
LYN$ = ""
* обнуляем переменные координаты
60 RAD = 0
X0 = X
Y0 = Y
GOTO 10 *идем на строку ожидания клавиши
12
ЗАКЛЮЧЕНИЕ
В ходе создания программы «Карандаш» я узнала новые функции и
возможности программы Qbasic. С помощью этих функций оказалось
возможным создать подобную программу. В этой программе можно рисовать
различные геометрические фигуры (и фигуры, состоящие из геометрических
фигур, например, домики, забор, деревья и т.д.), построить углы не только 90 и
45 градусов, но и любого размера (разумеется, на глаз). Эти фигуры можно
раскрашивать, ну а если рисунок не получился, то можно очистить экран, не
выходя из программы.
В среднем звене общеобразовательной школы изучается такая программа
как Paint (один из самых простых графических редакторов). Но ученики
младших классов не могут разобраться в ней самостоятельно (по крайней мере,
вундеркинды). Поэтому я предлагаю свою программу как ознакомительный
материал с компьютерной графикой, а также на факультативах и уроках
информатики.
13
СПИСОК ЛИТЕРАТУРЫ
1. Гутман Г. –Изучаем Basic.-СПб.: Питер,2003.
2. Федоренко Ю.-Алгоритмы и программы на Qbasic. Учебный курс. - СПб.:
Питер,2002.
Download