Автор работы: Пользователь скрыл имя, 14 Ноября 2010 в 08:37, Не определен
Лекции
Учимся программировать!
Конспекты школьника.
Ну и теперь, наверное, самое интересное. Будем рисовать. Кто же не любит это занятие?!
Программы могут выводит данные на экран в текстовом и графическом режиме работы. Для перехода в графический режим работы служит оператор:
SCREEN <mode>
<mode> - целочисленная константа, указывающая режим работы для данного экрана и адаптера.
Пример:
SCREEN 1
SCREEN 2
...
SCREEN 11
...
Для рисования можно использовать следующие операторы:
|
Пример: использования LINE
REM использование LINE
SCREEN 12
LINE (10, 10)-(200, 10)
LINE (10, 20)-(200, 40), 2, B
LINE (10, 50)-(200, 70), 2, BF
END
Результат работы программы:
Пример: использование CIRCLE
REM ОКРУЖНОСТЬ, ДУГА, ЭЛЛИПС
CONST PI = 3.141593
SCREEN 2
REM ОКРУЖНОСТЬ
CIRCLE (350, 115), 30
REM ДУГА ОКРУЖНОСТИ
CIRCLE (320, 100), 200, , -PI, -PI / 2
REM ОКРУЖНОСТЬ
CIRCLE STEP(-100, -42), 100
REM ЭЛЛИПС
CIRCLE STEP(0, 0), 100, , , , 5 / 25
REM ВЫВЕСТИ НАДПИСЬ В СТРОКЕ 25 И СТОЛБЦЕ
1
LOCATE 25, 1: PRINT "Press any key to end.";
REM ЖДЕМ НАЖАТИЯ ЛЮБОЙ КЛАВИШИ
DO
LOOP WHILE INKEY$ = ""
Результат работы
программы:
Пример: построение окружности
REM окружность
CLS
INPUT "Введите координаты центра x,y: ",
x,y
INPUT "Введите радиус окружности R: ",
r
SCREEN 1
CIRCLE (x, y), r
END
Сейчас на улице
зима, а значит и ...
Пример: программа "Снеговик"
REM Снеговик
SCREEN 12
x = 320
y = 240
r = 50
c = 3
c1 = 8
c2 = 5
c3 = 6
REM Снег
FOR i = 1 TO 300
PSET (RND * 640, RND * 480), 1
NEXT
REM Сугроб
FOR i = 1 TO 20
LINE (0 + 2 * i, y + 3 * r + 61 - i)-(640 - 2 * i, y + 3 * r + 61 -
i), 1
NEXT
REM Тело снеговика
CIRCLE (x, y - 80), r - 20, c
CIRCLE (x, y), r, c
CIRCLE (x, y + 120), r + 20, c
CIRCLE (x - 52, y - 30), 10, c
CIRCLE (x + 52, y - 30), 10, c
PAINT (x, y - 80), c, c
PAINT (x, y), c, c
PAINT (x, y + 120), c, c
PAINT (x - 52, y - 30), c, c
PAINT (x + 52, y - 30), c, c
REM Оформление лица
CIRCLE (x - 15, y - 90), 2, 1
PAINT (x - 15, y - 90), 1, 1
CIRCLE (x + 15, y - 90), 2, 1
PAINT (x + 15, y - 90), 1, 1
CIRCLE (x, y - 80), 10, 4, , , .5
PAINT (x, y - 80), 4, 4
CIRCLE (x, y - 75), 20, 4, 4, 6, 0.5
REM Метла
LINE (x - 50, y - 100)-(x - 54, y + 100), c1, BF
FOR i = 1 TO 20
LINE (x - 53, y - 100)-(x - 53 - 40 * RND + 20, y - 100 - 40 * RND),
c1
NEXT
REM Ведро
LINE (x - 30, y - r - 2 * (r - 20) + 10)-(x + 30, y - r - 2 * (r - 20)
+ 10), c2
LINE (x - 15, y - r - 2 * (r - 20) - 30)-(x + 15, y - r - 2 * (r - 20)
- 30), c2
LINE (x - 30, y - r - 2 * (r - 20) + 10)-(x - 15, y - r - 2 * (r - 20)
- 30), c2
LINE (x + 15, y - r - 2 * (r - 20) - 30)-(x + 30, y - r - 2 * (r - 20)
+ 10), c2
PAINT (x, y - r - 2 * (r - 20)), c2, c2
REM Пуговицы
FOR i = 1 TO 5
CIRCLE (x, y - r + 30 * i), 3, c3
PAINT (x, y - r + 30 * i), c4, c3
NEXT
END
Результат работы программы:
Пример: построение графика функции.
FUNCTION F (x)
F = x * x
END FUNCTION
REM ГРАФИК ФУНКЦИИ
SCREEN 12
REM Строим оси
FOR I = 0 TO 3
LOCATE 16, 38 + 10 * I: PRINT 4 * I
NEXT
FOR I = 0 TO 3
s$ = "-" + STR$(4 * I)
LOCATE 16, 38 - 10 * I: PRINT s$
NEXT
FOR I = 0 TO 4
LOCATE 16 - 3 * I, 38: PRINT 5 * I
NEXT
FOR I = 0 TO 3
s$ = "-" + STR$(5 * I)
LOCATE 16 + 3 * I, 37: PRINT s$
NEXT
LINE (10, 240)-(630, 240)
LINE (320, 10)-(320, 470)
COLOR 3
LOCATE 1, 38: PRINT "Y"
LOCATE 17, 77: PRINT "X"
REM Строим график функции
COLOR 2
PSET (20*(-10) + 320, 240 - 10 * F(-10))
FOR x = -10 TO 10 STEP .1
XX = 20 * x + 320
YY = 240 - 10 * F(x)
LINE -(XX, YY)
NEXT
END
Результат работы
программы для y=x2
Результат работы программы для y=x3-2.5
Оператор DRAW позволяет выполнять разнообразные графические операции.
· Команды черчения по восьми направлениям: U, D, L, R, E, F, G, H.
|
Пример: Рисование флагов.
REM Флаги
SCREEN 1
PSET (50, 10)
DRAW "R20 G5 F5 L20 U10"
DRAW "B D20"
DRAW "S5 R20 G5 F5 L20 U10"
DRAW "BD20"
DRAW "S4 R20 G5 F5 L20 U10"
DRAW "BD20"
DRAW "R20 G5 F5 L20 U10"
DRAW "BD40"
DRAW "A3 R20 G5 F5 L20 U10"
END
Результат работы
программы:
Учимся программировать!
Конспекты школьника.
Как нарисовать графический объект вам уже понятно. Но как заставить его двигаться?
Очень просто!
1. Рисуем объект цветом отличным от цвета
фона.
2. Рисуем объект цветом фона.
3. Изменяем координаты.
4. Повторяем 1-3 столько раз сколько потребуется.
Пример 1: Движущийся круг.
REM Движущийся круг
SCREEN 1
x = 1
y = 1
REM цвет фона - 0(черный), цвет рисунка - 1
FOR i = 1 TO 150
REM Рисуем объект цветом отличным от цвета
фона.
c = 1
CIRCLE (x, y), 2, c
REM задержка
FOR j = 1 TO 250000
NEXT j
REM Рисуем объект цветом цветом фона.
c = 0
CIRCLE (x, y), 2, c
REM Изменяем координаты
x = x + 2
y = y + 1
NEXT i
END
Для того чтобы глаз
мог зафиксировать нарисованное
изображение используем пустой цикл:
REM задержка
FOR j = 1 TO 250000
NEXT j
Пример 2: Усложним траекторию движения. Пусть шарик прыгает по поверхности, а когда поверхность закончится - упадет вниз.
REM Прыгающий шарик
SCREEN 1
x = 1
y = 100
REM поверхность
LINE (0, y + 20)-(220, y + 20)
FOR i = 1 TO 140
c = 1
CIRCLE (x, y), 2, c
PAINT (x, y), c, c
FOR j = 1 TO 250000
NEXT j
c = 0
CIRCLE (x, y), 2, c
PAINT (x, y), c, c
x = x + 2
IF i < 115 THEN
y = y + 10 * COS(.5 * i)
ELSE
y = y + 4
SOUND 200, 1
END IF
NEXT i
LOCATE 10, 15: PRINT "GAME OVER :)"
END
Пример 3: Шарик, заключенный в прямоугольную область. При касании границ отскакивает обратно.
REM Шарик, заключенный
в прямоугольную область
SCREEN 1
REM Границы области
xx1 = 1
xx2 = 200
yy1 = 1
yy2 = 150
LINE (xx1, yy1)-(xx1, yy2)
LINE (xx2, yy1)-(xx2, yy2)
LINE (xx1, yy1)-(xx2, yy1)
LINE (xx1, yy2)-(xx2, yy2)
REM Начальные координаты и скорость шарика
x = RND * (xx1 + (xx2 - xx1) / 2)
y = RND * (yy1 + (yy2 - yy1) / 2)
vx = RND * 20 - 10
vy = RND * 20 - 10
CIRCLE (x, y), 2, c
PAINT (x, y), c, c
REM Движение шарика, до тех пор пока не
нажмем любую клавишу
DO
c = 1
CIRCLE (x, y), 2, c
PAINT (x, y), c, c
FOR j = 1 TO 150000
NEXT j
c = 0
CIRCLE (x, y), 2, c
PAINT (x, y), c, c
IF x < (xx1 + 5) OR x > (xx2 - 5) THEN vx = -vx
IF y < (yy1 + 6) OR y > (yy2 - 7) THEN vy = -vy
x = x + vx
y = y + vy
LOOP WHILE INKEY$ = ""
LOCATE 10, 15: PRINT "GAME OVER :)"
END
LOCATE - перемещает курсор на экране в указанную позицию.
Пример 4: Идущие часы (входит в состав примеров QBasic 4.5).
' *** DRAW_EX.BAS ***
'
' Объявление процедуры.
DECLARE SUB Face (Min$)
'
' Установка графического режима 640 x 200
SCREEN 2
DO
CLS
' Получаем строковое значение количества
минут
Min$ = MID$(TIME$,4,2)
' Рисуем изображение часов
Face Min$
' Ждем пока не изменится минута или пока
не будет нажата клавиша
DO
' Печатаем время вверху экрана
LOCATE 2,37
PRINT TIME$
' Проверяем нажатие клавиши
Test$ = INKEY$
LOOP WHILE Min$ = MID$(TIME$,4,2) AND Test$ = ""
' Конец программы если нажата клавиша
LOOP WHILE Test$ = ""
END
'
' Процедура рисования часов
SUB Face (Min$) STATIC
LOCATE 23,30
PRINT "Press any key to end"
CIRCLE (320,100),175
' Преобразовываем строку в число
Hr = VAL(TIME$)
Min = VAL(Min$)
' Преобразовываем число в угол
Little = 360 - (30 * Hr + Min/2)
Big = 360 - (6*Min)
' Рисуем стрелки
DRAW "TA=" + VARPTR$(Little) + "NU40"
DRAW "TA=" + VARPTR$(Big) + "NU70"
END SUB
INKEY$ считывает символ
с клавиатуры.
Пример:
PRINT "Для выхода
нажмите Esc..."
DO
LOOP UNTIL INKEY$ = CHR$(27) '27 - это ASCII код для клавиши
Esc.
- INKEY$ возвращает нулевую строку символов,
если нет символа для
возврата.
- Для стандартных клавиш INKEY$ возвращает
1-байтовую строку символов,
содержащую считанный символ.
- Для расширенных клавиш INKEY$
возвращает 2-байтовую строку символов,
состоящую из символа нуля (ASCII 0) и скан-кода
клавиатуры.
Несложно осуществить
не просто движение объекта, а управляемое
движение.
Пример 5: Художник (входит в состав примеров
QBasic). Управление художников клавишами
со стрелками.
' Значение для клавиш
управления и пробела:
CONST UP = 72, DOWN = 80, LFT = 75, RGHT = 77
CONST UPLFT = 71, UPRGHT = 73, DOWNLFT = 79, DOWNRGHT = 81
CONST SPACEBAR = " "
' Null$ это первый байт(символ) 2-байтовой
строки символов
' для расширенных клавиш (таких, например,
как ВВЕРХ и ВНИЗ)
' значение которой возвращает INKEY$
Null$ = CHR$(0)
' Plot$ = "" рисование линий; Plot$ = "B"
только перемещение
' Перемещаемся, но не рисуем линии:
Plot$ = ""
PRINT "Use the cursor movement keys to draw lines."
PRINT "Press the spacebar to toggle line drawing on and off."
PRINT "Press <ENTER> to begin. Press q to end the program."
' ждем нажатие клавиши для начала рисования
DO: LOOP WHILE INKEY$ = ""
SCREEN 1
CLS
DO
SELECT CASE KeyVal$
CASE Null$ + CHR$(UP)
DRAW Plot$ + "C1 U2"
CASE Null$ + CHR$(DOWN)
DRAW Plot$ + "C1 D2"
CASE Null$ + CHR$(LFT)
DRAW Plot$ + "C2 L2"
CASE Null$ + CHR$(RGHT)
DRAW Plot$ + "C2 R2"
CASE Null$ + CHR$(UPLFT)
DRAW Plot$ + "C3 H2"
CASE Null$ + CHR$(UPRGHT)
DRAW Plot$ + "C3 E2"
CASE Null$ + CHR$(DOWNLFT)
DRAW Plot$ + "C3 G2"
CASE Null$ + CHR$(DOWNRGHT)
DRAW Plot$ + "C3 F2"
CASE SPACEBAR
IF Plot$ = "" THEN Plot$ = "B " ELSE Plot$ = ""
CASE ELSE
' Пользователь нажал какую-то из клавиш,
' кроме клавиш управления (вверх, вниз,
вправо, влево, пробел, выход(q))
' так что ничего не делаем
END SELECT
KeyVal$ = INKEY$
LOOP UNTIL KeyVal$ = "q"
END
Учимся программировать!
Конспекты школьника.
Файлы широко применяются для решения различных задач. В них размещаются данные, предназначенные для длительного хранения. Каждому файлу присваивается уникальное имя, которое используется для обращения к нему. Использование файлов освобождает разработчика от хранения требуемых данных в тексте программы или многократном вводе их с клавиатуры, что само по себе весьма утомительно и приводит к появлению различных ошибок в программах. Гораздо удобнее ввести эту информацию один раз и сохранить ее в файле на диске.