Могогите доделать игру
Главная задача сделать ее по физическим законам тойсть чтоб мяч двигался реально
Я чёт пробовал но ничего не получаеться
Вот ссылка на мой старания
--
http://fileland.ru/file_id-243146
Код:
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
// стереть изображение мяча
Form1->Canvas->Pen->Color = cBack;
Form1->Canvas->Ellipse(x,y,x+r,y+r);
if ( rd == 3 )
{
jumping = true;
vel_y=100;
}
if (jumping == true) // Джо в воздухе
{
// ** вычислить новое положение мяча **
if ( dx > 0 )
{
// мяч движется вправо
if ( x + dx + r > wp ) dx = - (dx + accel*cos(a)*t);
}
else
// мяч движется влево
if ( x + dx - r < 0 ) dx = -(dx + accel*cos(a)*t);
if ((x == 295) & (y>=200))
{
dx = -(dx + accel*cos(a)*t);
dy = dy + accel*sin(a)*t + g*t*t/2;
jumping=false;
s1++;
}
if ((x == 325) & (y>=200))
{
dx = -(dx + accel*cos(a)*t);
dy = dy + accel*sin(a)*t + g*t*t/2;
jumping=false;
s2++;
}
if ( dy > 0 )
{
// мяч движется вниз
if ((x >= rx1) && (x <= rx2) && (y == ry+45 ))
// мячик попал в ракетку
dy = -( dy + accel*sin(a)*t + g*t*t/2);
else
{ if ( y + dy + r > Form1->ClientHeight )
{ dy = -( dy + accel*sin(a)*t + g*t*t/2);
}
} }
else
{
if ( y + dy - r < 0 ) dy = -( dy + accel*sin(a)*t + g*t*t/2);
}
x += dx;
y += dy;
// нарисовать мяч в новой точке
Form1->Canvas->Pen->Color = cBall;
Form1->Canvas->Ellipse(x,y,x+r,y+r);
// *** ракетка ***
if ( rd != 0 )
{
// игрок нажал и удерживает одну из клавиш
// "стрелка вправо" или "стрелка влево"
// (см. FormKeyDown )
if ( rd == 1 )
{
// вправо
if ( rx2 < wp )
{
// стереть часть слева
Form1->Canvas->Pen->Color = cBack;
Canvas->Pen->Style = psSolid;
Form1->Canvas->Rectangle(rx1, ry, rx1 + rdx, ry+45);
// дорисовать часть справа
Canvas->Pen->Style = psSolid;
Form1->Canvas->Pen->Color = clRed;
Form1->Canvas->Rectangle (rx2, ry, rx2 + rdx, ry+45);
rx1 += rdx;
rx2 += rdx;
}
}
else
// влево
if (rd == 2 )
{ // стереть часть справа
Form1->Canvas->Pen->Color = cBack;
Form1->Canvas->Rectangle (rx2, ry, rx2 - rdx, ry+45);
// дорисовать слева
Form1->Canvas->Pen->Color = clRed;
Form1->Canvas->Rectangle(rx1 - rdx, ry, rx1 + rdx,ry+45);
rx1 -= rdx;
rx2 -= rdx;
}
}
}
if (y <= 450 ) // Проверка, стоит ли Джо на полу
{
vel_y = 0;
jumping = false;
}
Canvas->Pen->Color = (Graphics::TColor) 111;
Canvas->Pen->Style = psSolid;
Canvas->Rectangle(320, 420, 330, 210);
Label2->Caption=s1;
Label1->Caption=s2;
}
//---------------------------------------------------------------------------