Przerobiłem troszkę program z 10 kursu obiektowego c++ według wskazówek mały'ego z tego postu
http://forum.pasja-informatyki.pl/140558/cr-obiektowy-c-%239-tic-tac-toe-gra-w-kolko-i-krzyzyk.
Zastąpiłem 12 krotne przepisywanie tego samego kodu dwoma prostymi pętlami. W tym celu stworzyłem tablicę obiektów TImage *cegly []. Kiedy umieściłem definicje tablicy cegly[] na samej górze pliku cpp jako tablicę globalną wtedy kompilator wyrzucał jakiś błąd. Aby bez problemu program się kompilował musiałem powtórzyć definicje tablicy w funkcji Timet_ballTimer oraz button1Click. Moje pytanie jest takie: co muszę zrobić aby nie powtarzać kodu z definicją tablicy. Jak musiałaby wyglądać definicja tablicy jako obiekt globalny?
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
int ile = 4;
int x = -ile;
int y = -ile;
int do_wygranej = 12;
int ile_cegiel = 12;
bool kolizja(TImage *pilka, TImage *cegla)
{
if(cegla->Visible &&
pilka->Left + pilka->Width > cegla->Left &&
pilka->Left < cegla->Left + cegla->Width &&
pilka->Top + pilka->Height > cegla->Top &&
pilka->Top < cegla->Top + cegla->Height)
return true;
else return false;
}
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Timer_ballTimer(TObject *Sender)
{
ball->Left += x;
ball->Top += y;
//odbij od lewej sciany
if(ball->Left <= tlo->Left) x = -x;
//odbij od gornej sciany
if(ball->Top <= tlo->Top) y = -y;
//odbij od prawej sciany
if(ball->Left + ball->Width >= tlo->Width) x = -x;
//skucha!
if(ball->Top > paddle->Top + paddle->Height)
{
Timer_ball->Enabled = false;
ball->Visible = false;
button1->Caption = "Porażka. Ok by zresetowac.";
button1->Visible = true;
}else
if(ball->Top + ball->Height > paddle->Top &&
ball->Left + ball->Width/2 > paddle->Left &&
ball->Left < paddle->Left + paddle->Width)
if(y>0) y = -y;
//odbij od paletki
if(do_wygranej <= 0)
{
Timer_ball->Enabled = false;
ball->Visible = false;
button1->Caption = "Wygrana. Ok by zresetowac.";
button1->Visible = true;
}
TImage * cegly[] = {Image1, Image2, Image3, Image4,
Image5, Image6, Image7, Image8,
Image9, Image10, Image11, Image12};
for(int i=0; i<ile_cegiel; i++)
{
if(kolizja(ball, cegly[i]))
{
x = -x;
y = -y;
cegly[i]->Visible = false;
do_wygranej--;
}
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::lewoTimer(TObject *Sender)
{
if(paddle->Left > tlo->Left + 10)
paddle->Left -= 10;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::prawoTimer(TObject *Sender)
{
if(paddle->Left + paddle->Width < tlo->Width - 10)
paddle->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;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::button1Click(TObject *Sender)
{
ball->Visible = true;
paddle->Left = tlo->Width/2 - paddle->Width/2;
ball->Top = paddle->Top - 30;
ball->Left = paddle->Left + paddle->Width/2;
do_wygranej = 12;
button1->Visible = false;
Timer_ball->Enabled = true;
x = -ile;
y = -ile;
TImage * cegly[] = {Image1, Image2, Image3, Image4,
Image5, Image6, Image7, Image8,
Image9, Image10, Image11, Image12};
for(int i=0; i<12; i++)
cegly[i]->Visible = true;
}
//---------------------------------------------------------------------------