Witam.
Może najpierw wyjaśnie na czym polega gra...
W grze mam dwa pady (p i p2) którymi sterujemy w boki .
Jeden pad jest na górze drugi na dole.(na dole jest p) i od ODBIJA piłkę.
Lecz mam jeszcze jednego pada (p2)w którym nie wiem ja zrobić odbijanie piłki :/
Jeśli ktoś wie jak to zrobić to proszę o odpowiedzi :) Z góry dzięki .
Proszę bez zbędnych komentarzy i bez votów w dół poniewarz jest to zwyczajne pytanie.
P.S próbowałem zrobić to analogicznie i działa tylko wtedy kiedy paletke (p2) dam na dól bo odbija się tylko od góry paletki..
Takie coś to jest analogiczne :
if(b->Left > p2->Left-b->Width/2 && b->Left < p2->Left+p2->Width &&
b->Top+b->Height > p->Top)
{
if (y>0) y=-y;
}
Kodzik:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
int x=-8, y=-8;
int do_wygranej=1;
bool kolizja(TImage *pilka, TImage *cegla)
{
if( pilka->Left >= cegla->Left-pilka->Width && pilka->Left <= cegla->Left+cegla->Width &&
pilka->Top >= cegla->Top-pilka->Height && pilka->Top <= cegla->Top+cegla->Height)
return true;
else return false;
}
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Timer_pilkaTimer(TObject *Sender)
{
b->Left+=x; b->Top+=y;
//odbij od lewej sciany
if (b->Left-5 <= tlo->Left) x=-x;
//odbij od górnej sciany
if (b->Top <= p2->Top) y=-y;
//odbij od prawej sciany
if (b->Left+b->Width+5 >= tlo->Width) x=-x;
//skucha!
if (b->Top >= p->Top+p->Height+15)
{
Timer_pilka->Enabled = false;
b->Visible=false;
Button1->Caption = "GOOL!";
Button1->Visible=true;
}
//odbicie pilki (b) od paletki (p)
else if(b->Left > p->Left-b->Width/2 && b->Left < p->Left+p->Width &&
b->Top+b->Height > p->Top)
{
if (y>0) y=-y;
}
//wygrana = zlikwidowanie wsyzstkich blokow
if (do_wygranej<=0)
{
Timer_pilka->Enabled = false;
b->Visible=false;
Button1->Caption = "GOOL! ";
Button1->Visible=true;
}
//blok1
if (kolizja(b,Image1) && Image1->Visible==true) {x=-x; y=-y; do_wygranej--; Image1->Visible=false;}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormKeyDown(TObject *Sender, WORD &Key,
TShiftState Shift)
{
if(Key==VK_LEFT) lewo->Enabled=true;
if(Key==VK_RIGHT) prawo->Enabled=true;
if(Key==0x41) lewo1->Enabled=true;
if(Key==0x44) prawo1->Enabled=true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormKeyUp(TObject *Sender, WORD &Key,
TShiftState Shift)
{
if(Key==VK_LEFT) lewo->Enabled=false;
if(Key==VK_RIGHT) prawo->Enabled=false;
if(Key==0x41) lewo1->Enabled=false;
if(Key==0x44) prawo1->Enabled=false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::lewoTimer(TObject *Sender)
{
if (p->Left>10) p->Left-=10;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::prawoTimer(TObject *Sender)
{
if (p->Left+p->Width<tlo->Width-10) p->Left+=10;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
b->Left=100; b->Top=100;
p->Left=320;
b->Visible=true;
x=-8;
y=-8;
Timer_pilka->Enabled=true;
Button1->Visible=false;
do_wygranej=1;
Image1->Visible=true; }
//---------------------------------------------------------------------------
void __fastcall TForm1::prawo1Timer(TObject *Sender)
{
if (p2->Left+p2->Width<tlo->Width-10) p2->Left+=10;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::lewo1Timer(TObject *Sender)
{
if (p2->Left>10) p2->Left-=10;
}
//---------------------------------------------------------------------------