Всем здравствуйте! С праздничком! Прошу помочь мне разобраться с движением моей машинки. Когда она едет прямо, то почему-то не учитывает угол поворота. Не могу понять почему. Посмотрите, пожалуйста. И еще помогите разобраться как сделать так, чтоб при одновременном нажатии на стрелочки, например вверх и вправо, осуществлялось такое движение. Заранее благодарна.
Код:
#include <vcl.h>
#include <iostream.h>
#include <conio.h>
#include <stdio.h>
#include <math.h>
#define PI 3.14159265358979323846264338327950288419716939937510582097494459230781640628620899862803482534211706
#pragma hdrstop
#include "Car2.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
// create class point'ov
class Car
{
public:
TPoint points[8];
double a,b,ygol,ugl;
void init(double ia, double ib, double iugl, double iygol);
virtual void show();
virtual void hide();
virtual void moveStraight();
virtual void moveBack();
virtual void moveRight();
virtual void moveLeft();
};
int n,i=1;
Car car1[8];
TXolst *Xolst;
//---------------------------------------------------------------------------
__fastcall TXolst::TXolst(TComponent* Owner)
: TForm(Owner)
{
}
void Car::init(double ia, double ib, double iugl, double iygol)
{a=ia;
b=ib;
ygol=iygol;
ugl=iugl;
double x0=32+a;
double y0=545+b;
points[0].x = (y0/10000-16)*cos(ugl)+(x0/10000+48)*sin(ugl)+x0;
points[0].y = -(y0/10000-16)* sin(ugl) +(x0/10000+48)*cos(ugl)+y0;
points[1].x = (y0/10000-24)*cos(ugl)+(x0/10000+40)*sin(ugl)+x0;
points[1].y = -(y0/10000-24)*sin(ugl) +(x0/10000+40)*cos(ugl)+y0;
points[2].x = (y0/10000-24)*cos(ugl)+(x0/10000-32)*sin(ugl)+x0;
points[2].y = -(y0/10000-24)* sin(ugl) +(x0/10000-32)*cos(ugl)+y0;
points[3].x = (y0/10000-16)*cos(ugl)+(x0/10000-56)*sin(ugl)+x0;
points[3].y = -(y0/10000-16)* sin(ugl) +(x0/10000-56)*cos(ugl)+y0;
points[4].x = (y0/10000+16)*cos(ugl)+(x0/10000-56)*sin(ugl)+x0;
points[4].y = -(y0/10000+16)* sin(ugl) +(x0/10000-56)*cos(ugl)+y0;
points[5].x = (y0/10000+24)*cos(ugl)+(x0/10000-32)*sin(ugl)+x0;
points[5].y = -(y0/10000+24)* sin(ugl) +(x0/10000-32)*cos(ugl)+y0;
points[6].x = (y0/10000+24)*cos(ugl)+(x0/10000+40)*sin(ugl)+x0;
points[6].y = -(y0/10000+24)* sin(ugl) +(x0/10000+40)*cos(ugl)+y0;
points[7].x = (y0/10000+16)*cos(ugl)+(x0/10000+48)*sin(ugl)+x0;
points[7].y = -(y0/10000+16)* sin(ugl) +(x0/10000+48)*cos(ugl)+y0;
points[8].x = (y0/10000-16)*cos(ugl)+(x0/10000+48)*sin(ugl)+x0;
points[8].y = -(y0/10000-16)* sin(ugl) +(x0/10000+48)*cos(ugl)+y0;
}
void Car::show()
{
Xolst->Canvas->Brush->Color=clBlue;
Xolst->Canvas->Polygon(points,8);
}
void Car::hide()
{
Xolst->Canvas->Brush->Color=clBlack;
Xolst->Canvas->Polygon(points,8);
}
void Car::moveStraight()
{ hide();
b=b-4*sin((90-ygol)*PI/180);
a=a-4*cos((90+ygol)*PI/180);
init(a, b, ugl,ygol);
show();
}
void Car::moveBack()
{ hide();
b=b+4*sin((90-ygol)*PI/180);
a=a+4*cos((90+ygol)*PI/180);
init(a, b, ugl,ygol);
show();
}
void Car::moveRight()
{
hide();
ugl=ugl-0.053;
ygol=ygol+3;
init(a, b, ugl,ygol);
show();
}
void Car::moveLeft()
{
hide();
ugl=ugl+0.053;
ygol=ygol-3;
init(a, b, ugl,ygol);
show();
}
void __fastcall TXolst::Car1Click(TObject *Sender)
{
car1[i].init(0,0,0,0);
car1[i].show();
}
void __fastcall TXolst::FormKeyDown(TObject *Sender, WORD &Key,
TShiftState Shift)
{
switch (Key)
{
case 38 : { car1[i].moveStraight() ; break;}
case 40 : { car1[i].moveBack() ; break;}
case 37 : { car1[i].moveLeft() ; break;}
case 39 : { car1[i].moveRight() ; break;}
}
}
void __fastcall TXolst::Exit1Click(TObject *Sender)
{
if (MessageDlg("Вы действительно хотите выйти из программы?",mtConfirmation, mbYesNoCancel,0)==mrYes)
Xolst->Close();
}