Добавил:
korayakov
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Лабы / С++Builder / Laba3 / Task2 / Ball
.cpp//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Ball.h"
#include <math.h>
//---------------------------------------------------------------------------
#pragma package(smart_init)
CBall::CBall(TImage* _Img)
{
x=220;
y=0;
Img=_Img;
xc=(Img->Width) /2;
yc=(Img->Height)/2-200;
R=89;
}
void CBall::MoveToXY(int X, int Y)
{
//Стираем старое положение
Img->Canvas->Pen->Color = clWhite;
Img->Canvas->Brush->Color = clWhite;
Img->Canvas->Ellipse(x-10, y-10, x+10, y+10);
//устанавливаем новое положение
x=X+xc;
y=-Y+yc;
//рисуем в новом положении
Img->Canvas->Pen->Color = clBlue;
Img->Canvas->Brush->Color = clBlue;
Img->Canvas->Ellipse(x-10, y-10, x+10, y+10);
Img->Canvas->Pen->Color = clWhite;
Img->Canvas->Brush->Color = clWhite;
Img->Canvas->Ellipse(x-2-3, y-2-3, x+2-3, y+2-3);
}
CSupport::CSupport(TImage* _Img)
{
Img=_Img;
xc=(Img->Width) /2;
yc=(Img->Height)/2-200;
x1=x2=xc;
y1=y2=yc;
R=100;
CurAngle=M_PI+0.2;
Draw(CurAngle);
Img->Canvas->Brush->Color = clBlack;
TRect rr;
for (int i=0; i<=300; i+=60)
{
if (i%120) Img->Canvas->Brush->Color = clBlack;
else Img->Canvas->Brush->Color = clAqua;
rr.Left=330;
rr.Right=340;
rr.Bottom=20+i;
rr.Top=80+i;
Img->Canvas->FillRect(rr);
}
}
void CSupport::Hide()
{
x1=R*cos(CurAngle);
y1=R*sin(CurAngle);
for( float A=CurAngle;A<=CurAngle+M_PI/2;A+=0.1)
{
x2=R*cos(A);
y2=R*sin(A);
Img->Canvas->Pen->Width=3;
Img->Canvas->Pen->Color = clWhite;
Img->Canvas->MoveTo(xc+x1,yc-y1);
Img->Canvas->LineTo(xc+x2,yc-y2);
Img->Canvas->Pen->Width=1;
x1=x2;
y1=y2;
}
}
void CSupport::Check(int x)
{
if (x>=320-xc) throw (1);
}
void CSupport::Draw(double dA)
{
Hide();
CurAngle=dA;
x1=R*cos(CurAngle);
y1=R*sin(CurAngle);
for( float A=CurAngle;A<=CurAngle+M_PI/2;A+=0.1)
{
x2=R*cos(A);
y2=R*sin(A);
Img->Canvas->Pen->Width=3;
Img->Canvas->Pen->Color = clRed;
Img->Canvas->Brush->Color = clRed;
Img->Canvas->MoveTo(xc+x1,yc-y1);
Img->Canvas->LineTo(xc+x2,yc-y2);
Img->Canvas->Pen->Width=1;
x1=x2;
y1=y2;
}
}
int CBall::ComputeBallY(int X, double AA)
{
if (X>R*cos(AA+M_PI/2)) throw (0);
return -sqrt(R*R-X*X);
}