Сжатие файлов и программы архиваторы. Служебные программы. Назначение, виды. Выполнение основных операций с файлами в Total Commander, создание архивных файлов. Технология использования антивирусных программ

Вид материалаДокументы

Содержание


Создание движущихся изображений
Подобный материал:
1   2   3   4   5   6   7   8   9   10   11

Создание движущихся изображений


Как нарисовать графический объект вам уже понятно. Но  как заставить его двигаться?

Очень просто!
1. Рисуем объект цветом фона.
2. Изменяем координаты.
3. Рисуем объект цветом отличным от цвета фона.
4. Повторяем 1-3 столько раз сколько потребуется.

Пример: Движущийся круг.

REM Движущийся круг
SCREEN 1
x = 1
y = 1
REM цвет фона - 0(черный), цвет рисунка - 1
c = 1
CIRCLE (x, y), 2, c

FOR i = 1 TO 150

REM Рисуем объект цветом фона
c = 0
CIRCLE (x, y), 2, c
REM Изменяем координаты
x = x + 2
y = y + 1

REM Рисуем объект цветом отличным от цвета фона
c = 1
CIRCLE (x, y), 2, c

REM задержка
FOR j = 1 TO 250000
NEXT j

NEXT i
END

Пример: Усложним траекторию движения. Пусть наш шарик прыгает по поверхности, а когда поверхность закончится - упадет вниз.

REM Прыгающий шарик
SCREEN 1
x = 1
y = 100
c = 1
LINE (0, y + 20)-(220, y + 20)
CIRCLE (x, y), 2, c
PAINT (x, y), c, c

FOR i = 1 TO 140
c = 0
CIRCLE (x, y), 2, c
PAINT (x, y), c, c
c = 1
x = x + 2
IF i < 115 THEN
y = y + 10 * COS(.5 * i)
ELSE
y = y + 4
SOUND 200, 1
END IF
CIRCLE (x, y), 2, c
PAINT (x, y), c, c
FOR j = 1 TO 250000
NEXT j
NEXT i
LOCATE 10, 15: PRINT "GAME OVER :)"
END

Пример: Шарик, заключенный в прямоугольную область. При касании границ отскакивает обратно.

REM Шарик, заключенный в прямоугольную область
SCREEN 1

c = 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 = 0
CIRCLE (x, y), 2, c
PAINT (x, y), c, c
c = 1
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

CIRCLE (x, y), 2, c
PAINT (x, y), c, c

FOR j = 1 TO 150000
NEXT j

LOOP WHILE INKEY$ = ""

LOCATE 10, 15: PRINT "GAME OVER :)"
END

Пример: Идущие часы (входит в состав примеров QBasic).

' *** DRAW_EX.BAS ***
'
' Declare procedure.
DECLARE SUB Face (Min$)
'
' Select 640 x 200 pixel high-resolution graphics screen.
SCREEN 2
DO
CLS
' Get string containing minutes value.
Min$ = MID$(TIME$,4,2)
' Draw clock face.
Face Min$
' Wait until minute changes or a key is pressed.
DO
' Print time at top of screen.
LOCATE 2,37
PRINT TIME$
' Test for a key press.
Test$ = INKEY$
LOOP WHILE Min$ = MID$(TIME$,4,2) AND Test$ = ""
' End program when a key is pressed.
LOOP WHILE Test$ = ""
END
'
' Draw the clock face.
SUB Face (Min$) STATIC
LOCATE 23,30
PRINT "Press any key to end"
CIRCLE (320,100),175
' Convert strings to numbers.
Hr = VAL(TIME$)
Min = VAL(Min$)
' Convert numbers to angles.
Little = 360 - (30 * Hr + Min/2)
Big = 360 - (6*Min)
' Draw the hands.
DRAW "TA=" + VARPTR$(Little) + "NU40"
DRAW "TA=" + VARPTR$(Big) + "NU70"
END SUB

Несложно осуществить не просто движение объекта, а управляемое движение.
Пример: Художник (входит в состав примеров QBasic). Управление художников клавишами со стрелками.

' Values for keys on the numeric keypad and the spacebar:
CONST UP = 72, DOWN = 80, LFT = 75, RGHT = 77
CONST UPLFT = 71, UPRGHT = 73, DOWNLFT = 79, DOWNRGHT = 81
CONST SPACEBAR = " "

' Null$ is the first character of the two-character INKEY$
' value returned for direction keys such as UP and DOWN:
Null$ = CHR$(0)

' Plot$ = "" means draw lines; Plot$ = "B" means move
' graphics cursor, but don't draw lines:
Plot$ = ""

PRINT "Use the cursor movement keys to draw lines."
PRINT "Press the spacebar to toggle line drawing on and off."
PRINT "Press 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
' The user pressed some key other than one of the
' direction keys, the spacebar, or "q", so
' don't do anything.
END SELECT

KeyVal$ = INKEY$

LOOP UNTIL KeyVal$ = "q"

SCREEN 0, 0
WIDTH 80
END


Задачи:
  1. В заданной строке подсчитать отдельно количество букв «а» и «в»
  2. Определить номер позиции заданной строки, в которой встречается буква «а». Если таковой буквы нет, вывести соответствующее сообщение.
  3. Определить номер позиции заданной строки, в которой буква «а» встречается в третий раз. Если такой позиции нет, вывести соответствующее сообщение.
  4. В данном числовом массиве размерности N подсчитать количество четных чисел.
  5. В заданном слове подсчитать количество всех цифр
  6. Рост учеников класса представлен в виде массива. Рост девочек представлен числом со знаком «+», рост мальчиков – со знаком «-». Определить средний рост мальчиков и средний рост девочек.
  7. Найти минимальное число в двумерном массиве.
  8. «Замедлить» процесс рисования линии (используется только команда PSET)
  9. Создать программу передвижения точки по горизонтали.