Главная страница
Навигация по странице:

  • «4»: Используя одну процедуру, построить фигуру. Задания

  • Тема 12. Анимация Анимация Анимация

  • (x,y) Принцип анимации: рисуем объект в точке (x,y) задержка на несколько миллисекунд стираем объект изменяем координаты (x,y)

  • Как «поймать» нажатие клавиши kbhit()

  • c = getch(); printf("Код клавиши %d", c); } int c; if ( kbhit() != 0 )

  • if ( kbhit() ) if ( getch() == 27 ) break; ... } ... }

  • kbhit() и getch() пока не вышли за границу синего квадрата Как не допустить выход за границу поля

  • initwindow (500, 500); setfillstyle(1, COLOR(0,0,255)); bar (0, 0, 399, 399); x = 0; y = 240; /* анимация */ closegraph();

  • Задания

  • Язык Си. Алгоритм Свойства алгоритма дискретность состоит из отдельных шагов (команд) понятность


    Скачать 4.66 Mb.
    НазваниеАлгоритм Свойства алгоритма дискретность состоит из отдельных шагов (команд) понятность
    Дата05.02.2023
    Размер4.66 Mb.
    Формат файлаppt
    Имя файлаЯзык Си.ppt
    ТипПрограмма
    #921318
    страница10 из 11
    1   2   3   4   5   6   7   8   9   10   11

    Задания





    «3»: Используя одну процедуру, построить фигуру.
    «4»: Используя одну процедуру, построить фигуру.

    Задания





    «5»: Используя одну процедуру, построить фигуру.


    Тема 12. Анимация





    Анимация


    Анимация (англ. animation) – оживление изображения на экране.
    Задача: внутри синего квадрата 400 на 400 пикселей слева направо двигается желтый квадрат 20 на 20 пикселей. Программа останавливается, если нажата клавиша Esc или квадрат дошел до границы синей области.


    Проблема: как изобразить перемещение объекта на экране?
    Привязка: состояние объекта задается координатами (x,y)
    Принцип анимации:
      рисуем объект в точке (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»: Два квадрата двигаются в противоположных направлениях:

    1   2   3   4   5   6   7   8   9   10   11


    написать администратору сайта