Язык Си. Алгоритм Свойства алгоритма дискретность состоит из отдельных шагов (команд) понятность
Скачать 4.66 Mb.
|
Задания«3»: Используя одну процедуру, построить фигуру. «4»: Используя одну процедуру, построить фигуру. Задания«5»: Используя одну процедуру, построить фигуру. Тема 12. Анимация Анимация Анимация (англ. animation) – оживление изображения на экране. Задача: внутри синего квадрата 400 на 400 пикселей слева направо двигается желтый квадрат 20 на 20 пикселей. Программа останавливается, если нажата клавиша Esc или квадрат дошел до границы синей области. Проблема: как изобразить перемещение объекта на экране? Привязка: состояние объекта задается координатами (x,y) Принцип анимации:
задержка на несколько миллисекунд стираем объект изменяем координаты (x,y) переходим к шагу 1 Как «поймать» нажатие клавиши? kbhit() – функция, определяет, было ли нажатие на (любую!) клавишу (0 – не было, не 0 – было). getch() – функция, которая определяет код нажатой клавиши: 27 = Esc, 13 = Enter, 32 = пробел, … if ( kbhit() ) printf("Нажата какая-то клавиша..."); else printf("Нет нажатия..."); if ( kbhit() ) { printf("Нажата какая-то клавиша..."); c = getch(); printf("Код клавиши %d", c); } int c; if ( kbhit() != 0 ) Как выйти из цикла? #include main() { ... while ( x + 20 < 400 ) { if ( kbhit() ) if ( getch() == 27 ) break; ... } ... } если нажата клавиша ... если нажата клавиша с кодом 27 (Esc), выйти из цикла для kbhit() и getch() пока не вышли за границу синего квадрата Как не допустить выход за границу поля? ? x + 20 < 400 Процедура (рисование и стирание) void Draw( int x, int y, int color ) { setfillstyle ( 1, color ); bar ( x, y, x+20, y+20 ); } (x, y) (x+20, y+20) Идеи
цвет: желтым рисуем, синим стираем сплошная заливка цветом color залитый прямоугольник Полная программа #include #include void Draw ( int x, int y, int color ) { ... } main() { int x, y; initwindow (500, 500); setfillstyle(1, COLOR(0,0,255)); bar (0, 0, 399, 399); x = 0; y = 240; /* анимация */ closegraph(); } процедура начальные координаты синий фон Цикл анимации while ( x + 20 < 400 ) { if ( kbhit() ) if ( getch() == 27 ) break; Draw ( x, y, COLOR(255,255,0) ); delay ( 20 ); Draw ( x, y, COLOR(0,0,255) ); x ++; } выход по клавише Esc ждем 20 мс пока не вышли из синего квадрата Задания«3»: Квадрат двигается справа налево: «4»: Два квадрата двигаются в противоположных направлениях: |