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

Odbicie od paletki w grze.|C++ Builder.

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

Proszę tylko bez zbędnych komentarzy.Pytanie te jest normalne i chcę się dowiedzieć tylko jednej rzeczy kombinowałem i mi nie wychodziło więc postanowiłem zapytać się tutaj:)
Proszę bez ,,HEJTÓW"

c++ Builder
------------------------------------------------------------------------------
Witam, jako iż zaczynam i chcę stworzyć prostą grę to mam pytanie do bardziej doświadczonych, oraz posiadających wiedzę odemnie.
Może wyjaśnie najpierw o co chodzi w tej grze aby wszystko było jasne.
A więc w tej prostej grze mamy dwie paletki na dole i na górze (cała akcja rozgrywa się na boisku:D)oraz mamy piłkę którą odbijamy (paletki to p1 oraz p2).
Dobra może przejdę do konkretów , główny problem polega na tym że paletka p1 odbija i jest wszystko ok lecz nie wiem jak zrobić aby paletka p2 także odbijała ;c. Bardzo proszę o pomoc,chciałbym zrobić wkońcu jakąś gre :).
Linijka z odbijaniem piłki paletki (p1):
-----------------------------------------------------------------------------

if(b->Left > p1->Left-b->Width/2 && b->Left < p1->Left+p1->Width &&
       b->Top+b->Height > p1->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;
int y=8;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------



void __fastcall TForm1::timerpilkaTimer(TObject *Sender)
{
b->Left+=x;
b->Top +=y;
//lewa sciana
if(b->Left-5<=tlo->Left) x=-x;
//prawa sciana
if(b->Left+b->Width+5>=tlo->Width)x=-x;
//gol1
if(b->Top>=p1->Top+p1->Height+15)
if(b->Top>=p2->Top+p2->Height+15)
{
timerpilka->Enabled=false;
b->Visible=false;
}


if(b->Left > p1->Left-b->Width/2 && b->Left < p1->Left+p1->Width &&
       b->Top+b->Height > p1->Top)
       {
               if (y>0) y=-y;
       }  
  
}
//---------------------------------------------------------------------------
void __fastcall TForm1::gora1Timer(TObject *Sender)
{
 if(p1->Left>10)p1->Left-=10;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::dol1Timer(TObject *Sender)
{
if(p1->Left+p1->Width<tlo->Width-10)p1->Left+=10;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::gora2Timer(TObject *Sender)
{
  if(p2->Left>10)p2->Left-=10;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::dol2Timer(TObject *Sender)
{
 if(p2->Left+p2->Width<tlo->Width-10)p2->Left+=10;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormKeyDown(TObject *Sender, WORD &Key,
      TShiftState Shift)
{
if(Key==0x4A)gora1->Enabled=true;
if(Key==0x4C)dol1->Enabled=true;
if(Key==0x41)gora2->Enabled=true;
if(Key==0x44)dol2->Enabled=true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormKeyUp(TObject *Sender, WORD &Key,
      TShiftState Shift)
{
if(Key==0x4A)gora1->Enabled=false;
if(Key==0x4C)dol1->Enabled=false;
if(Key==0x41)gora2->Enabled=false;
if(Key==0x44)dol2->Enabled=false;
}
//---------------------------------------------------------------------------

 

1 odpowiedź

+2 głosów
odpowiedź 1 października 2015 przez niezalogowany
No przecież robisz to analogocznie do paletki 1:
if(b->Left>p2->Left-b->Width/2&&b->LeftLeft+p2->Width&&b->TopTop+p2->Height)
{
    if(y>0)
        y=-y;
}
Zakładam, że ten kod będzie działać. Jedyne co zmieniłem, to wszystkie p1 na p2 (musisz tak nazwać drugą paletkę oczywiście ;)) i kod odbijania się od paletki, ale tylko po ostatnim &&, czyli jeśli Top piłki będzie mniejszy niż Top+wysokośćPaletki (wysokośćPaletki to Height, prawda?). Pozostałe rzeczy powinny być dobre ;)

PS: jak skończysz robić tego Ponga i pobawisz się trochę Builderem, to do robienia gier bardzo ci polecam bibliotekę graficzną SFML ;)
komentarz 1 października 2015 przez Куба Янчевски Początkujący (390 p.)
Mam pytanie skoro tak to gdzie tego ifa wstawić ?

Pod tym z p1 ? Jak tak zrobie to pilka leci mi w drugim kierunku ;/...
komentarz 1 października 2015 przez niezalogowany
Ale co, że leci w drugim kierunku?
komentarz 1 października 2015 przez Куба Янчевски Początkujący (390 p.)
Piłka zawsze leciała w dół teraz poleciała w górę i nadal nie odbija ;/

P.S

Najpierw tak samo pomyślałem jak ty i właśnie nie działało, kurcze szkoda bo bardzo by mi się to przydało ;/

Podobne pytania

0 głosów
1 odpowiedź 766 wizyt
pytanie zadane 2 października 2015 w C i C++ przez Куба Янчевски Początkujący (390 p.)
0 głosów
0 odpowiedzi 547 wizyt
pytanie zadane 25 października 2016 w C i C++ przez MrFraxis Początkujący (390 p.)
0 głosów
1 odpowiedź 161 wizyt

92,455 zapytań

141,263 odpowiedzi

319,099 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...