• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Odbicie piłki od paletki. c++ builder6

Object Storage Arubacloud
0 głosów
772 wizyt
pytanie zadane 2 października 2015 w C i C++ przez Куба Янчевски Początkujący (390 p.)
edycja 2 października 2015 przez Куба Янчевски

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;        
}
//---------------------------------------------------------------------------

 

1 odpowiedź

0 głosów
odpowiedź 2 października 2015 przez s92 Bywalec (2,300 p.)
Masz wszystko zapisane w pierwszej paletce tylko trzeba warunki zmienić. Jeżeli dolna część piłki dotknie górnej części paletki to zmien kierunek piłki itp.
komentarz 2 października 2015 przez niezalogowany
Nie żeby coś, ale on założył to pytanie drugi raz, a w pierwszym mu powiedziałem to samo :| https://forum.pasja-informatyki.pl/65049/odbicie-od-paletki-w-grze-c-builder

PS: jak górna część piłki dotknie dolną część paletki, bo on chce, żeby to była górna paletka ;)
komentarz 2 października 2015 przez s92 Bywalec (2,300 p.)
A to nie widziałem wcześniej tego.

A tak masz racje. Pomieszały mi sie paletki :D
komentarz 2 października 2015 przez Куба Янчевски Początkujący (390 p.)
Jak ma tak :

if(b->Left>p2->Left-b->Width/2&&b->Left+p2->Width&&b->Top+p2->Height)

{

    if(y>0)

        y=-y;

}

To mi nie odbija ;/

Coś źle?

Podobne pytania

0 głosów
1 odpowiedź 817 wizyt
pytanie zadane 1 października 2015 w C i C++ przez Куба Янчевски Początkujący (390 p.)
0 głosów
1 odpowiedź 162 wizyt
0 głosów
1 odpowiedź 335 wizyt
pytanie zadane 4 października 2015 w C i C++ przez Куба Янчевски Początkujący (390 p.)

92,555 zapytań

141,402 odpowiedzi

319,539 komentarzy

61,938 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...