Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабы / С++Builder / Laba3 / Task2 / Unit1

.cpp
Скачиваний:
13
Добавлен:
17.04.2013
Размер:
4.65 Кб
Скачать
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
#include "Ball.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
CSupport* lin;
CBall* ball;
double An,An0,w=0,w0;
int x,y;
float g=9.8,g0;
int t=0;
int t0,t1;
int dt=1;
double vx,vy;
int yy;

//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
ball=new CBall(Image1);
lin=new CSupport(Form1->Image1);
lin->Draw(lin->CurAngle);
An=M_PI+0.2;
x=ball->R*cos(lin->CurAngle);
        y=ball->ComputeBallY(x,lin->CurAngle);
ball->MoveToXY(x, y);
}
//---------------------------------------------------------------------------




void __fastcall TForm1::TrackBar3Change(TObject *Sender)
{
An=M_PI + 0.2 + ((double)(TrackBar3->Position))/TrackBar3->Max/3;
lin->Draw(An);
ball->MoveToXY(ball->R*cos(An),ball->ComputeBallY(x,lin->CurAngle));
//y=ball->ComputeBallY(x,lin->CurAngle)
if (!(Timer1->Enabled))
        {
        x=ball->R*cos(An);
        y=ball->ComputeBallY(x,lin->CurAngle);
        }
}
//---------------------------------------------------------------------------

void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{
x=ball->R*cos(An);//82;
t=-1;
t0=ball->GetX();
An0=An;
g0=g;
w0=w;
Timer1->Enabled=true;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::BitBtn2Click(TObject *Sender)
{
Timer1->Enabled=!Timer1->Enabled;
}
//---------------------------------------------------------------------------


void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
t+=dt;
//x=(x0*sqrt(g/ball->R)*cos(sqrt(g/ball->R)*t/10+An)+v0)*t/10;
x=-t0*(1+w0)*cos(sqrt(g0/ball->R)*t/5+An0);

/*
x++;*/

lin->Draw(An);
try
        {
        y=ball->ComputeBallY(x,lin->CurAngle);
        }
catch (int d)
        {
        if (d==0)
                {
                Timer1->Enabled=false;
                t1=-t0*(1+w0)*cos(sqrt(g0/ball->R)*t/5+An0);
double                h=ball->R*sin(An+M_PI);
double                v=sqrt(2*g0*h);
                vx=v*cos(An+M_PI);
                t=0;
                vy=v*sin(An+M_PI);
                yy=ball->GetY();
                Timer2->Enabled=true;
                }
        }
        ball->MoveToXY(x,y);

}
//---------------------------------------------------------------------------


void __fastcall TForm1::TrackBar2Change(TObject *Sender)
{
g=9.8 + ((double)(TrackBar2->Position))/TrackBar2->Max*100;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::TrackBar4Change(TObject *Sender)
{
//dt=1 + ((double)TrackBar4->Position)/TrackBar4->Max*4;
Timer1->Interval=100-((double)TrackBar4->Position)/TrackBar4->Max*75;
Timer2->Interval=100-((double)TrackBar4->Position)/TrackBar4->Max*75;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::TrackBar1Change(TObject *Sender)
{
w=0 + ((double)(TrackBar1->Position))/TrackBar1->Max*0.05;
}
//---------------------------------------------------------------------------


void __fastcall TForm1::Timer2Timer(TObject *Sender)
{

t+=dt;
x=t1+vx*t/5;
y=yy+vy*t/5-g0*t*t/5/2;

lin->Draw(An);
try
        {
        ball->MoveToXY(x,y);
lin->Check(x);
        }
catch (int d)
        {
        if (d==1)
                {
                Timer2->Enabled=false;
                ShowMessage("Бум !!!");
                ////////////////////////////
                lin->Draw(lin->CurAngle);
//                An=M_PI+0.2;
                x=ball->R*cos(lin->CurAngle);
                y=ball->ComputeBallY(x,lin->CurAngle);
                ball->MoveToXY(x, y);
                TRect rr;
                for (int i=0; i<=300; i+=60)
                        {
                        if (i%120) Image1->Canvas->Brush->Color = clBlack;
                        else Image1->Canvas->Brush->Color = clAqua;
                        rr.Left=330;
                        rr.Right=340;
                        rr.Bottom=20+i;
                        rr.Top=80+i;
                        Image1->Canvas->FillRect(rr);
                        }
                /////////////////

                }
        }
        ball->MoveToXY(x,y);

}
//---------------------------------------------------------------------------

Соседние файлы в папке Task2