Массивы. Анимация нескольких объектов

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

Анимация на си нескольких объектов.

Рассмотрим программу на си, которая будет отображать движение или анимацию нескольких графических объектов. В программе мы будем отображать перемещение нескольких автомобилей, которые находятся на разных уровнях по оси y и движутся слева направо. В начале программы задается процедура рисования и стирания изображения автомобиля.
Чтобы  реализовать анимацию нескольких объектов на си, удобно использовать массивы для всех параметров. Размерности этих массивов(количество элементов) равняется количеству объектов. У каждого графического объекта (автомобиля) есть следующие параметры:координата по оси x,координата по оси y, скорость.Для каждого типа параметров введем свой массив. Подробно о работе с массивами в си можно ознакомится на уроке Массивы в Си.
Например если объектов 3 то
int x[3]; // массив координат x автомобилей
int y[3];// массив координат  y автомобилей 
int v[3]; // массив скоростей  автомобилей
int c[3]; // массив цветов автомобилей

Соответственно координата x  для 1 автомобиля будет x[1].
Далее необходимо определить начальные значения для всех массивов.
// задаем начальные координаты x 
x[1]=50;
x[2]=50;
x[3]=50;
// задаем начальные координаты y 
y[1]=100;
y[2]=170;
y[3]=270;
// задаем скорости
v[1]=5;
v[2]=10;
v[3]=15;
// задаем цвета автомобилей
c[1]=2;
c[2]=3;
c[3]=4;

Для  реализации движения нескольких объектов необходимо в цикле for  выполнять следующие действия
Рисуем все объекты
Пауза
Стираем все объекты
Изменяем координаты всех объектов

Чтобы  нарисовать все объекты,  необходимо использовать цикл for в котором необходимо  “пробежаться” по всем элементам
 // рисуем автомобили с текущими координатами
    for (j=1;j<=3;j++)
    {
// вызываем функцию рисования  объекта с номером j,  используя  значения массивов для данного объекта
       avto(x[j],y[j], c[j]);
    }

Пример полного решения:

#include <graphics.h>
#include <conio.h>
// процедура отображения автомобиля с координатами левого верхнего угла x, y  и цвет  cvet

void avto (int x, int y, int cvet)
{
setfillstyle (1,cvet );  //  устанавливаем  вид заливки 1 -полный,  цвет заливки  cvet
bar(x, y, x+100, y+20);// закрашенный прямоугольник  нижняя часть кузова
bar(x+20, y, x+70, y-20);// закрашенный прямоугольник верхняя часть кузова
setcolor(cvet); // устанавливаем  цвет  колеса
circle(x+20, y+30, 10); //  левое колесо окружность ниже кузова
circle(x+70, y+30, 10); // правое колесо окружность  ниже кузова
setfillstyle (1,cvet);  //  устанавливаем  вид заливки полный - 1 цвет cvet
floodfill(x+20,y+30,cvet); // закрашиваем круг левого колеса до границы круга  цветом cvet
floodfill(x+70,y+30,cvet); // закрашиваем круг левого колеса до границы круга  цветом cvet
}

main()
{
int i,j; // переменные счетчиков цикла
int x[3]; // массив координат x автомобилей
int y[3];// массив координат  y автомобилей 
int v[3]; // массив скоростей  автомобилей
int c[3]; // массив цветов автомобилей

// задаем начальные координаты x 
x[1]=50;
x[2]=50;
x[3]=50;

// задаем начальные координаты y 
y[1]=100;
y[2]=170;
y[3]=270;

// задаем скорости
v[1]=5;
v[2]=10;
v[3]=15;

// задаем цвета автомобилей
c[1]=2;
c[2]=3;
c[3]=4;

initwindow(500, 500);// инициализируем графическое окно
// основной цикл движения
for (i=1; i<20; i++)

{
    // изменяем координаты x автомобилей 
    for (j=1;j<=3;j++)
    {
        x[j]=x[j]+v[j];
    }
    // рисуем автомобили с текущими координатами
    for (j=1;j<=3;j++)
    {
       avto(x[j],y[j], c[j]);
    }
    //пауза
    delay(100);
    // стираем автомобили
    for (j=1;j<=3;j++)
    {
       avto(x[j],y[j], 0);
    }   
}  

// рисуем автомобили с текущими координатами
 for (j=1;j<=3;j++)
    {
       avto(x[j],y[j], c[j]);
    }
getch();
closegraph();
}

На заметку:
1. Чтобы нарисовать все объекты  необходимо использовать цикл for, переменная цикла и будет номером объекта. Параметры текущего объекта (координаты, скорость, цвет)  это элементы массивов с индексом  равным номеру  объекта.
Задания для самостоятельной работы:
1. Задайте свою процедуру рисования объекта(например корабль или человек). Измените  количество объектов, сделайте движение объектов ускоренное или замедленное.

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

Полезно почитать по теме массивы в си
Массивы в Си
Сортировка массива на Си

Поделиться

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

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