Witam, mam problem z tablicami dynamicznymi. Mianowicie przy kompilacji wyskakuje błąd: http://www.fotoload.pl/index.php?id=e4d0f1d072a4de5a17957a1908b9b31c102
W załączniku cały program.
Jakieś pomysły?
Pozdrawiam
Unit1.h :
private: // User declarations
int **TabCase;
int **TabVal;
int NbMine;
int RozPola;
bool wygrana;
void __fastcall Initialisation();
void __fastcall Odkrywaj(int x,int y);
Kod:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Initialisation()
{
int x, y;
wygrana = false ;
TabCase = new int *[RozPola];
TabVal = new int *[RozPola];
for ( int i = 0; i < RozPola; ++i )
{
TabCase[i] = new int [RozPola];
TabVal[i] = new int [RozPola];
}
randomize();
for (int z=0 ; z < NbMine ; z++)
{
x = rand() % RozPola ;
y = rand() % RozPola ;
TabVal[x][y] = 10;
}
for (x=0 ; x < 16; x++)
for (y=0 ; y < 16; y++)
if (TabVal[x][y] >= 10)
{
if(y<=14)
TabVal[x][y+1]++;
if(y>0)
TabVal[x][y-1]++;
if(x<=14)
TabVal[x+1][y]++;
if(x<=14 && y<=14)
TabVal[x+1][y+1]++;
if(x<=14 && y>0)
TabVal[x+1][y-1]++;
if(x>0)
TabVal[x-1][y]++;
if(x>0 && y<=14)
TabVal[x-1][y+1]++;
if(x>0 && y>0)
TabVal[x-1][y-1]++;
}
DrawGrid1->Invalidate();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
NbMine = Edit1->Text.ToInt();
RozPola = Edit2->Text.ToInt();
DrawGrid1->ColCount=RozPola;
DrawGrid1->RowCount=RozPola;
Initialisation();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::DrawGrid1DrawCell(TObject *Sender, int ACol, int ARow, TRect &Rect,
TGridDrawState State)
{
DrawGrid1->Canvas->Font->Style = DrawGrid1->Canvas->Font->Style << fsBold;
if(TabCase[ACol][ARow]==0) //wypełnia tapeblę zakrytymi miejscami
{
DrawGrid1->Canvas->Brush->Color = clBtnFace;
DrawGrid1->Canvas->FillRect(Rect);
DrawEdge(DrawGrid1->Canvas->Handle,&Rect,EDGE_RAISED,BF_RECT);
}
else
{
DrawGrid1->Canvas->Brush->Color = clWindow;
DrawGrid1->Canvas->FillRect(Rect);
if (TabVal[ACol][ARow] >= 10)
DrawGrid1->Canvas->TextRect(Rect, Rect.Left+7, Rect.Top+7, "M");
if(TabVal[ACol][ARow]==1)
DrawGrid1->Canvas->Font->Color = clGreen;
if(TabVal[ACol][ARow]==2)
DrawGrid1->Canvas->Font->Color = clBlue;
if(TabVal[ACol][ARow]>2 && TabVal[ACol][ARow]<9)
DrawGrid1->Canvas->Font->Color = clRed;
if (TabVal[ACol][ARow] >= 0 && TabVal[ACol][ARow] < 9)
DrawGrid1->Canvas->TextRect(Rect, Rect.Left+7, Rect.Top+7,IntToStr(TabVal[ACol][ARow]));
if (TabVal[ACol][ARow] == 0 )
DrawGrid1->Canvas->TextRect(Rect, Rect.Left+7, Rect.Top+7, ""); // kasowanie zer w miejscach bez bomb.
}
if(State.Contains(gdFocused))
DrawGrid1->Canvas->DrawFocusRect(Rect);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::DrawGrid1Click(TObject *Sender)
{
if (wygrana == true)
return;
bool koniec=true;
int x=DrawGrid1->Col;
int y=DrawGrid1->Row;
TabCase[x][y]=1;
if (TabVal[x][y] >=10)
{
for (int x=0 ; x < RozPola; x++)
for (int y=0 ; y < RozPola; y++)
TabCase[x][y]=1 ;
wygrana = true;
DrawGrid1->Invalidate();
ShowMessage("Przegrałeś");
for ( int i=0; i < RozPola; ++i )
{
delete [] TabVal[i];
delete [] TabCase[i];
}
delete [] TabVal;
delete [] TabCase;
return;
}
if (TabVal[x][y] == 0)
Odkrywaj(x,y);
do
{
koniec = false;
x=0;
while (x<RozPola)
{
y=0;
while (y<RozPola)
{
if (TabCase[x][y] == 2)
{
TabCase[x][y] = 1;
Odkrywaj(x,y);
koniec = true;
}
y++;
}
x++;
}
}
while (koniec);
DrawGrid1->Invalidate();
wygrana=true;
for (int x=0 ; x < RozPola; x++)
for (int y=0 ; y < RozPola; y++)
if(TabCase[x][y]==0 && TabVal[x][y]<10)
wygrana = false;
if (wygrana == true)
{
ShowMessage("Gratulacje, wygrałeś!");
for ( int i=0; i < RozPola; ++i )
{
delete [] TabVal[i];
delete [] TabCase[i];
}
delete [] TabVal;
delete [] TabCase;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Odkrywaj(int x,int y)
{
if(y<=RozPola)
if (TabVal[x][y+1]>0 || TabCase[x][y+1]==1)
TabCase[x][y+1]=1;
else
TabCase[x][y+1]=2;
if(y>0)
if (TabVal[x][y-1]>0 || TabCase[x][y-1]==1)
TabCase[x][y-1]=1;
else
TabCase[x][y-1]=2;
if(x<=RozPola)
if (TabVal[x+1][y]>0 || TabCase[x+1][y]==1)
TabCase[x+1][y]=1;
else
TabCase[x+1][y]=2;
if(x<=RozPola && y<=14)
if (TabVal[x+1][y+1]>0 || TabCase[x+1][y+1]==1)
TabCase[x+1][y+1]=1;
else
TabCase[x+1][y+1]=2;
if(x<=RozPola && y>0)
if (TabVal[x+1][y-1]>0 || TabCase[x+1][y-1]==1)
TabCase[x+1][y-1]=1;
else
TabCase[x+1][y-1]=2;
if(x>0)
if (TabVal[x-1][y]>0 || TabCase[x-1][y]==1)
TabCase[x-1][y]=1;
else
TabCase[x-1][y]=2;
if(x>0 && y<=RozPola)
if (TabVal[x-1][y+1]>0 || TabCase[x-1][y+1]==1)
TabCase[x-1][y+1]=1;
else
TabCase[x-1][y+1]=2;
if(x>0 && y>0)
if (TabVal[x-1][y-1]>0 || TabCase[x-1][y-1]==1)
TabCase[x-1][y-1]=1;
else
TabCase[x-1][y-1]=2;
}