Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.12.2009, 16:02   #1
sone4chko
 
Регистрация: 19.12.2009
Сообщений: 6
Восклицание C++ Builder движение машинки

Всем здравствуйте! С праздничком! Прошу помочь мне разобраться с движением моей машинки. Когда она едет прямо, то почему-то не учитывает угол поворота. Не могу понять почему. Посмотрите, пожалуйста. И еще помогите разобраться как сделать так, чтоб при одновременном нажатии на стрелочки, например вверх и вправо, осуществлялось такое движение. Заранее благодарна.
Код:
#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();
}
sone4chko вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Движение dampirik Общие вопросы C/C++ 15 10.10.2009 18:47
Перенести код из C++ Builder 5 в C++ Builder 2009 Kreadlling C++ Builder 2 13.09.2009 14:00
движение alex(21) Паскаль, Turbo Pascal, PascalABC.NET 9 20.08.2009 00:08
Движение Mickle Общие вопросы Delphi 5 19.04.2007 23:24