C++ Builder - вопросы программирования




Листинг 3 6



Листинг 3.6.

Простая мультипликация
int х = -68, у = 50; // начальное положение базовой точки // рисует на поверхности формы кораблик void __fastcall TForml::Ship(int x, int y) { int dx=4,dy=4; // шаг сетки // корпус и надстройку будем рисовать // при помощи метода Polygon TPoint pi[7]; // координаты точек корпуса TPoint p2[8]; // координаты точек надстройки TColor pc,bc; // текущий цвет карандаша и кисти // сохраним текущий цвет карандаша и кисти рс = Canvas->Pen->Color; be = Canvas->Brush->Color; // установим нужный цвет карандаша и кисти Canvas->Pen->Color = clBlack; Canvas->Brush->Color = clWhite; // рисуем ... 11 корпус pl[0].x = x; pl[0].y = y; pl[l].x=x; pl[l].y = y-2*dy; pl[2].x = x+10*dx; pi[2].у = y-2*dy; pl[3].x = x+ll*dx; pl[3].y = y-3*dy; pl[4]-x = x+17*dx; pi[4].у =y-3*dy; pl[5].x = x+14*dx; pi[5].у =y; pl[6].x = x; pl[6].y =y; Canvas->Polygon(pl,6); // надстройка p2[0].x = x+3*dx; p2[0].y = y-2*dy; p2[l].x = x+4*dx; p2[l].y = y-3*dy; р2[2].х = x+4*dx; p2[2].y = y-4*dy; р2[3].х = x+13*dx; p2[3].y = y-4*dy; р2[4].х = x+13*dx; p2[4].y = y-3*dy; р2[5].х = x+ll*dx; p2[5].y = y-3*dy; р2[6].х = x+10*dx; p2[6].y = y-2*dy; р2[7].х = x+3*dx; p2[7].y = y-2*dy; Canvas->Polygon(p2,7); Canvas->MoveTo(x+5*dx,y-3*dy); Canvas->LineTo(x+9*dx,y-3*dy); // капитанский мостик Canvas->Rectangle(x+8*dx,y-4*dy,x+ll*dx,y-5*dy); // труба Canvas->Rectangle(x+7*dx,y-4*dy,x+8*dx,y-7*dy); // иллюминаторы Canvas->Ellipse(x+ll*dx,y-2*dy,x+12*dx,y-l*dy); Canvas->Ellipse(x+13*dx,y-2*dy,x+14*dx,y-l*dy); // мачта Canvas->MoveTo(x+10*dx,y-5*dy); Canvas->LineTo(x+10*dx,y-10*dy); // оснастка Canvas->Pen->Color = clWhite; Canvas->MoveTo(x+17*dx,y-3*dy); Canvas->LineTo(x+10*dx, y-10*dy); Canvas->LineTo(x,y-2*dy); // восстановим цвет карандаша и кисти Canvas->Pen->Color = рс; Canvas->Brush->Color = be; } // обработка события OnTimer void__fastcall TForml::TimerlTimer(TObject *Sender) { // стереть кораблик — закрасить цветом, совпадающим // с цветом фона (формы) Canvas->Brush->Color = Forml->Color; Canvas->FillRect(Rect(x-1,y+l,x+68,y-40)); // вычислить координаты базовой точки х+=3; if (x > ClientWidth) { // кораблик "уплыл" за правую границу формы х= -70; // чтобы кораблик "выплывал" из-за левой границы формы y=random(Forml->ClientHeight); } // нарисовать кораблик на новом месте Ship(х, у) ; ) // обработка события OnCreate для формы void__fastcall TForml::FormCreate(TObject *Sender) { /* Таймер можно настроить во время разработки программы (в процессе создания формы) или во время работы программы. */ // настройка и запуск таймера Timerl->Interval = 100; // период события OnTimer —0.1 сек. Timerl->Enabled = true; // пуск таймера }
 











Содержание  Назад  Вперед