Министерство Образования РФ Графический редактор «КАРАНДАШ» Выполнил Руководитель г. Усть-Кут, 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.