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

       

рисует на поверхности формы кораблик



Листинг 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; // пуск таймера }
 


Содержание раздела