Управление движением объекта на Си
Анимация в Си . Управление движением графического объекта в Си.
В данной статье мы познакомимся с анимацией и рассмотрим, как реализовать управление движением графического объекта в Си с помощью клавиатуры.Постановка задачи. Программа должна визуализировать движение объект по плоскости. В данном случае объектом будет являться квадрат, хотя можно и создать свои собственные объекты.Краткий алгоритм. Вводим поле, вводим начальные координаты, скорость движения, при нажатии клавиш меняем направление движения.
Описание алгоритма управления движением в Си.
Для отрисовки графического объекта используется специальная процедура 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(); // закрыть окно для графики
}
Задание для самостоятельной работы.
Замените передвижения квадрата на передвижения машины.
Нет комментариев. Ваш будет первым!