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

Rozbudowa gry "Arkanoid".

Object Storage Arubacloud
0 głosów
339 wizyt
pytanie zadane 17 września 2016 w C i C++ przez Masorro Nowicjusz (160 p.)

Witam,

 Stworzyłem ( a raczej ładnie przepisałem) kod gry "Arkanoid" z poradnika na YouTube(https://www.youtube.com/watch?v=I_vW4KQ99Yk) , w ramach ćwiczeń postanowiłem nieco rozbudować tą aplikacje, dodając do niej między innymi kolejne poziomy. ( Korzystam z programu C++ Builder, jak w poradniku)  Stworzyłem więc w projekcie drugą formę, obiekty na niej z nazwami analogicznymi do tych w pierwotnej wersji, oraz do funkcji drugiej formy skopiowałem kod z pierwszej, no bo miało się tam dziać dokładnie to samo co na formie pierwszej, z jedyną modyfikacją ilości elementów do strącenia, no i oczywiście z poleceniem pokazania formy 2, po wygranej rundzie na formie 1, oraz uruchomienie tam timerów poruszających piłkę. No i tutaj po uruchomieniu wystąpił problem, a mianowicie - sterowanie kompletnie nie działa, klikam ustalone przyciski i nic - paletka stoi nieruchomo. I tutaj moje pytanie, czym to może być spowodowane?

 

Kod z formy pierwszej, w drugiej jest analogiczny z wyjątkiem oczywiście wywołania drugiego okienka i przycisku.

//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Palety.h"
#include "Unit2.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;

int y=-8,x=-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;
 //gorna
 if(b->Top-5 <=tlo->Top) y=-y;
 // prawa
 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="Porazka!Jeszcze raz!";
    Button1->Visible=true;

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


 }
 if(do_wygranej <=0)
 {
 Timer_pilka ->Enabled == false;
 b->Visible=false;
 Button1->Caption="Wygrana! Przejdz do nastepnego poziomu!!";
 Button1->Visible=true;
 Form2->Visible=true;
 Form2->Timer_pilka->Enabled=true;
 }

 //--------------
 if(kolizja(b,Image1)  && Image1->Visible== true)
 {
   x=-x;
   y=-y;
   Image1->Visible= false;
   do_wygranej--;
 }
 //------------------
 //--------------
 if(kolizja(b,Image2)  && Image2->Visible== true)
 {
   x=-x;
   y=-y;
   Image2->Visible= false;
   do_wygranej--;
 }
 //------------------
 //--------------
 if(kolizja(b,Image3)  && Image3->Visible== true)
 {
   x=-x;
   y=-y;
   Image3->Visible= false;
   do_wygranej--;
 }
 //------------------
 //--------------
 if(kolizja(b,Image4)  && Image4->Visible== true)
 {
   x=-x;
   y=-y;
   Image4->Visible= false;
   do_wygranej--;
 }
 //------------------
 //--------------
 if(kolizja(b,Image5)  && Image5->Visible== true)
 {
   x=-x;
   y=-y;
   Image5->Visible= false;
   do_wygranej--;
 }
 //------------------
 //--------------
 if(kolizja(b,Image6)  && Image6->Visible== true)
 {
   x=-x;
   y=-y;
   Image6->Visible= false;
   do_wygranej--;
 }
 //------------------
 //--------------
 if(kolizja(b,Image7)  && Image7->Visible== true)
 {
   x=-x;
   y=-y;
   Image7->Visible= false;
   do_wygranej--;
 }
 //------------------
 //--------------
 if(kolizja(b,Image8)  && Image8->Visible== true)
 {
   x=-x;
   y=-y;
   Image8->Visible= false;
   do_wygranej--;
 }
 //------------------
 //--------------
 if(kolizja(b,Image9)  && Image9->Visible== true)
 {
   x=-x;
   y=-y;
   Image9->Visible= false;
   do_wygranej--;
 }
 //------------------
 //--------------
 if(kolizja(b,Image10)  && Image10->Visible== true)
 {
   x=-x;
   y=-y;
   Image10->Visible= false;
   do_wygranej--;
 }
 //------------------
 //--------------
 if(kolizja(b,Image11)  && Image11->Visible== true)
 {
   x=-x;
   y=-y;
   Image11->Visible= false;
   do_wygranej--;
 }
 //------------------
 //--------------
 if(kolizja(b,Image12)  && Image12->Visible== true)
 {
   x=-x;
   y=-y;
   Image12->Visible= false;
   do_wygranej--;
 }
 //------------------
}
//---------------------------------------------------------------------------
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::FormKeyDown(TObject *Sender, WORD &Key,
      TShiftState Shift)
{
 if(Key == VK_LEFT) lewo->Enabled=true;
 if(Key == VK_RIGHT) prawo->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;
}
//---------------------------------------------------------------------------

// Tutaj nie wywaliłem jeszcze niepotrzebnego przycisku resetu
void __fastcall TForm1::Button1Click(TObject *Sender)
{

if(do_wygranej <=0)
 {
   Form2->Visible=true;
   Form2->Timer_pilka->Enabled=true;
 }
 else
 {

 b->Left=20;
 b->Top=20;

 b->Visible=true;
 x=-8;
 y=-8;
 Timer_pilka->Enabled=true;
 Button1->Visible=false;
 do_wygranej=12;
 Image1->Visible=true;
 Image2->Visible=true;
 Image3->Visible=true;
 Image4->Visible=true;
 Image5->Visible=true;
 Image6->Visible=true;
 Image7->Visible=true;
 Image8->Visible=true;
 Image9->Visible=true;
 Image10->Visible=true;
 Image11->Visible=true;
 Image12->Visible=true;
 }



}
//---------------------------------------------------------------------------

 

1 odpowiedź

+1 głos
odpowiedź 18 września 2016 przez JAKUBW Nałogowiec (33,470 p.)
Ech... Pewnie nie będę odkrywcą jak napiszę, że w tworzenie czegokolwiek w Builder 6 a tym bardziej gier nie ma najmniejszego sensu. Naprawdę, oszczędź sobie nerwów. Jeżeli chcesz pisać gry to weź bibliotekę graficzną, a jak aplikacje okienkowe (bądź edytor map do gry) to visual studio i w c#.
komentarz 18 września 2016 przez Masorro Nowicjusz (160 p.)
Zdaje sobie z tego sprawę, dlatego też obecnie miało być to jedynie w celu praktykowania przyswojonej wiedzy, i myślałem że da się to jakoś za pomocą tego środowiska rozbudować, tak żeby jakoś funkcjonowało. Dopiero po małej dawce praktyki miałem zamiar przerzucić się na jakieś środowisko dedykowane do tworzenia gier czy aplikacji. :D Ale dziękuje za odpowiedź! I tak przy okazji, bo się nie orientuję C# bardzo się różni od C++?
komentarz 18 września 2016 przez JAKUBW Nałogowiec (33,470 p.)

Nie, jest bardzo podobny do c(++) i do java. Jest bardzo prosty, szybki, funkcyjny. Łatwo wyłapać błędy. Wadą jest, że działa tylko na Windows, ale to może się zmienić. Ogólnie to jest on bardzo blisko systemu.

Ja zaczynając naukę c# miałem już c++ opanowany, więc było mi bardzo łatwo i tobie też go polecam. Co do różnic to trochę jest najbardziej zauważalne przeze mnie to:

- brak operatorów :: i ->, zamiast nich jest po prostu kropka.

- trochę innych styl enum

- obowiązek przechwytywania wszystkich wyjątków

- (najlepsze) używanie słowa new bez słowa delete

Podobne pytania

0 głosów
0 odpowiedzi 236 wizyt
pytanie zadane 7 października 2016 w C i C++ przez sagan47 Nowicjusz (140 p.)
–2 głosów
1 odpowiedź 291 wizyt
0 głosów
1 odpowiedź 135 wizyt
pytanie zadane 20 stycznia 2018 w Java przez FoNd Nowicjusz (120 p.)

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 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!

...