Бейсик

Автор работы: Пользователь скрыл имя, 14 Ноября 2010 в 08:37, Не определен

Описание работы

Лекции

Файлы: 1 файл

Бейсик.doc

— 354.00 Кб (Скачать файл)

Учимся программировать! 
Конспекты школьника.

Графический режим работы.

Ну и теперь, наверное, самое интересное. Будем рисовать. Кто же не любит это занятие?!

Программы могут  выводит данные на экран в текстовом  и графическом режиме работы. Для  перехода в графический режим  работы служит оператор:

SCREEN <mode>

<mode> - целочисленная  константа, указывающая режим  работы для данного экрана и адаптера.

Пример:

SCREEN 1 
SCREEN 2 
... 
SCREEN 11 
...

Для рисования можно  использовать следующие операторы:

CLS Очистка экрана
PSET(X,Y),C Изобразить точку. X,Y - координаты точки, С -цвет.
PSET STEP(X,Y),C Изобразить точку. X,Y - смешение от данной точки, С - цвет.
LINE(X1,Y1)-(X2,Y2),C Прямая линия.X1,Y2 и X2,Y2- координаты концов линии, С - цвет.
LINE -(X2,Y2),C Прямая линия.  От текущего положения курсора до X2,Y2- координаты конца линии, С - цвет.
LINE(X1,Y1)-(X2,Y2),C,B Прямоугольник. X1,Y2 и X2,Y2- координаты концов диагонали, С - цвет.
LINE(X1,Y1)-(X2,Y2),C,BR Закрашенный прямоугольник. X1,Y2 и X2,Y2- координаты концов диагонали, С - цвет.
CIRCLE(X,Y),R,C Окружность. X,Y - координаты центра, С -цвет.
CIRCLE STEP(X,Y),R,C Окружность. X,Y - смешение от данной точки, С -цвет.
CIRCLE(X,Y),R,C,A1,A2 Дуга окружности. X,Y - координаты центра, С -цвет, А1,А2 - угловые  меры начальной и конечной точки  дуги.
CIRCLE(X,Y),R,C,,,K 
CIRCLE(X,Y),R,C,А1,А2,K
Элипс. К - коэффициент сжатия.
PAINT(X,Y),C1,C2 Закрасить область. С1 - цвет закраски, С2 - цвет границы.
LOCATE T1,T2 Установка курсора  в данную позицию. Т1, Т2 - номер строки и столбца.
PRINT Оператор вывода текста
 

 Пример: использования  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=x

 
 
Результат работы программы для y=x3-2.5 

Оператор DRAW позволяет выполнять разнообразные графические операции.

    ·         Команды черчения по восьми направлениям: U, D, L, R, E, F, G, H.

H U E
L
R
G D F
  • Команда М чертит от текущей точки до точки с координатами x, y. Если перед координатами стоит знак плюс или минус, то координаты относительные, а не абсолютные.
  • Команда S изменяет масштаб черчения.
  • Команда А поворачивает изображение (А0-0, А1-90, А2-180, А3-270 градусов).

Пример: Рисование  флагов.

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

Учимся программировать! 
Конспекты школьника.

Работа  с файлами.

Файлы широко применяются  для решения различных задач. В них размещаются данные, предназначенные для длительного хранения. Каждому файлу присваивается уникальное имя, которое используется для обращения к нему. Использование файлов освобождает разработчика от хранения требуемых данных в тексте программы или многократном вводе их с клавиатуры, что само по себе весьма утомительно и приводит к появлению различных ошибок в программах. Гораздо удобнее ввести эту информацию один раз и сохранить ее в файле на диске. 

Информация о работе Бейсик