Управление движением объекта на Си

2 декабря 2018 - Администратор

Анимация в Си . Управление движением графического объекта в Си.

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

Описание алгоритма управления движением в Си.

Для отрисовки графического объекта используется  специальная процедура draw ее параметры это координаты объекта и цвет объекта color.  

Если color=0 , то объект будет нарисован цветом фона, т.е будет стерт с экрана.

void Draw ( int x, int y, int color )

  {

  setfillstyle( 1, color );  //  сплошная  заливка, цвет color

  bar ( x-s, y-s, x+s, y+s); //  залитый прямоугольник 

  }

В нашем случае мы для примера рисуем квдарат.

В самой программе в цикле while  мы считываем нажатие клавиш с помощью функции

 

getch(). У каждой клавиши есть свой код .

У стрелок свои  коды:

Стрелка влево имеет код 75

Стрелка вправо  имеет код 77

Стрелка вверх имеет код 72

Стрелка вниз имеет код  80

Обработка нажатия и изменение координат объекта  осуществляется с помощью оператора множественного выбора switch      

switch ( code ) {             //  изменить  направление движения 

      case 75: dx = -1; dy = 0; break;

      case 77: dx = 1;  dy = 0; break;

      case 72: dx = 0;  dy = -1; break;

      case 80: dx = 0;  dy = 1;

      }    

После изменения координат рисуем объект а потом через паузу  , которая зависит от скорости движения стираем  объект. Создается эффект движения объекта по экрану.

Draw (xg, yg, COLOR(255, 255, 0)); //  рисуем квадрат

 delay(200 / vel);                    //  ждем

 Draw (xg, yg, COLOR(0, 0, 0));       //  стираем 

 xg += dx;                            //  изменяем координаты объекта

 yg += dy;

 

Переменные. xm, ym отвечают за ширину и высоту создаваемого окна для графики. vel отвечает за скорость объекта. s – ширина управляемого объекта. xg, yg отвечают за координаты объекта, dx, dy отвечают за направление движения объекта. В code хранится уникальный код нажатой клавиши.

Полный код программы.

#include <conio.h>

#include <graphics.h>

int xm = 400;// ширина экрана

int ym = 400;// высота экрана

int vel = 200; // скорость перемещения квадрата

const int s = 8; // ширина объекта

// рисуем движущийся объект

void Draw ( int x, int y, int color )

  {

  setfillstyle( 1, color );  //  сплошная  заливка, цвет color

  bar ( x-s, y-s, x+s, y+s); //  залитый прямоугольник 

  }

main()

{    

// начальные координаты

int xg = 20;

int yg = 20;

// начальное направления движения: вправо

int dx = 1;

int dy = 0;

// переменная для хранения кода клавиш

int code;

initwindow (xm, ym);        //  открыть окно для  графики  

// бесконечный цикл, пока не выйдем с помощью break при нажатии Esc

while (1) {

if ( kbhit() ) {                  //  если нажата клавиша 

    code = getch();               //  получить  ее код 

    if ( code == 27 ) break;      //  если Esc, то выход 

    switch ( code ) {             //  изменить  направление движения 

      case 75: dx = -1; dy = 0; break;

      case 77: dx = 1;  dy = 0; break;

      case 72: dx = 0;  dy = -1; break;

      case 80: dx = 0;  dy = 1;

      }

   }

 Draw (xg, yg, COLOR(255, 255, 0)); //  рисуем квадрат

 delay(200 / vel);                    //  ждем

 Draw (xg, yg, COLOR(0, 0, 0));       //  стираем 

 xg += dx;                            //  двигаем квадрат

 yg += dy;

}

 closegraph();     //  закрыть окно для  графики

}

Задание для самостоятельной работы.

Замените передвижения квадрата на передвижения машины.

Вернуться к содержанию

Комментарии (0)

Нет комментариев. Ваш будет первым!