Страница 1 из 1

Изменение Цвета В Функции Speedbutton1click

Добавлено: 03 июн 2014, 07:03
dypel
Функции StringGrid1Click и StringGrid1DrawCell обеспечивают закрашивания ячейки нажатием.
SpeedButton1Click должна по алгоритму изменять цвет других ячеек, но она это делает неправильно.
Алгоритм завязан на проверке 0 и 1 при закраске, то есть, следуя логике вещей, должно работать корректно.
В консоле в Visual Studio 2012 все работает как надо. В чем может быть проблема?

По сути все отрисовывается раз в ход(пока переменная "поколение" не достигнет 100).

Код: Выделить всё

#define H 20
#define L 10

bool k[H][L];

TForm2 *Form2;


struct live
{
bool fGeneration;
bool sGeneration;
int neigborhood;
};

live machine[H][L];

void neighborhoodCount(live a[H][L], int i, int j){
int up, down, left, right;
if (j == L - 1) right = 0;
else right = j + 1;
if (j == 0) left = L - 1;
else left = j - 1;
if (i == H - 1) down = 0;
else down = i + 1;
if (i == 0) up = H - 1;
else up = i - 1;
if (a[up][align=left].fGeneration) a[i][j].neigborhood++;
if (a[up][align=right].fGeneration) a[i][j].neigborhood++;
if (a[up][j].fGeneration) a[i][j].neigborhood++;
if (a[i][align=left].fGeneration) a[i][j].neigborhood++;
if (a[i][align=right].fGeneration) a[i][j].neigborhood++;
if (a[down][j].fGeneration) a[i][j].neigborhood++;
if (a[down][align=left].fGeneration) a[i][j].neigborhood++;
if (a[down][align=right].fGeneration) a[i][j].neigborhood++;
}

__fastcall TForm2::TForm2(TComponent* Owner)
: TForm(Owner)
{
TPngImage *PNG = new TPngImage();
PNG->LoadFromFile("C:\\png.png");
SpeedButton1->Glyph->Assign(PNG);
delete PNG;
PNG = NULL;
}

void __fastcall TForm2::StringGrid1Click(TObject *Sender)
{

if(StringGrid1->Cells[StringGrid1->Col][StringGrid1->Row] == "1")
{
StringGrid1->Cells[StringGrid1->Col][StringGrid1->Row] = "0";
machine[StringGrid1->Col][StringGrid1->Row].fGeneration = false;
}
else
{
StringGrid1->Cells[StringGrid1->Col][StringGrid1->Row] = "1";
machine[StringGrid1->Col][StringGrid1->Row].fGeneration = true;
}

}

void __fastcall TForm2::StringGrid1DrawCell(TObject *Sender, int ACol, int ARow, TRect &Rect,
TGridDrawState State)
{
if(StringGrid1->Cells[ACol][ARow] == "1")
StringGrid1->Canvas->Brush->Color = clGreen;
else
StringGrid1->Canvas->Brush->Color = clGray;
StringGrid1->Canvas->FillRect(Rect);

}

void __fastcall TForm2::SpeedButton1Click(TObject *Sender)
{
int generation = 1;
while (generation!=100){
for (int i = 0; i < H; i++){
for (int j = 0; j < L; j++){
neighborhoodCount(machine, i, j);
machine[i][j].sGeneration = machine[i][j].fGeneration;
if (machine[i][j].fGeneration){
if (machine[i][j].neigborhood != 2 && machine[i][j].neigborhood != 3)
{
machine[i][j].sGeneration = false;
StringGrid1->Cells[i][j]="0";
}

}
if (machine[i][j].fGeneration == false){
if (machine[i][j].neigborhood == 3)
{
machine[i][j].sGeneration = true;
StringGrid1->Cells[i][j]="1";
}

}
}
}
for (int i = 0; i < H; i++){
for (int j = 0; j < L; j++)
{
machine[i][j].fGeneration = machine[i][j].sGeneration;
}
}


for(int i=0;i<H;i++)
{for(int j=0;j<L;j++)
{
if(machine[i][j].fGeneration==true)
{StringGrid1->Cells[i][j]="1";}
else
{StringGrid1->Cells[i][j]="0";}
}
}
generation++;
//Sleep(400);
}

}

Re: Изменение Цвета В Функции Speedbutton1click

Добавлено: 03 июн 2014, 17:14
Romeo
Кода много. Оттестировать его не получится, так как нету проекта. Если есть консольный вариант, который можно запустить на любом компиляторе и если в нём тоже проявляется та же ошибка - выкладывай. Если в консольном проекте ошибки нету, значит смотри на разницу между консольным и гуишном проектах - проблема именно в разнице.

Ну а вообще, если уж на то пошло, то старого доброго дебагера никто не отменял :)

Re: Изменение Цвета В Функции Speedbutton1click

Добавлено: 03 июн 2014, 19:20
dypel
Romeo писал(а):Кода много. Оттестировать его не получится, так как нету проекта. Если есть консольный вариант, который можно запустить на любом компиляторе и если в нём тоже проявляется та же ошибка - выкладывай. Если в консольном проекте ошибки нету, значит смотри на разницу между консольным и гуишном проектах - проблема именно в разнице.

Ну а вообще, если уж на то пошло, то старого доброго дебагера никто не отменял :)

Разница будет именно в функциях Builder'a.
В консоле работает все прекрасно.

Не позволяет прикрепить архив(слишком большой пишет), кидаю ссылку на Я.Д.
http://yadi.sk/d/c6JFHFIKS9HQ2 и http://yadi.sk/d/Oi4JehynS9Hkr

Re: Изменение Цвета В Функции Speedbutton1click

Добавлено: 03 июн 2014, 20:57
dypel
Romeo писал(а):Кода много. Оттестировать его не получится, так как нету проекта. Если есть консольный вариант, который можно запустить на любом компиляторе и если в нём тоже проявляется та же ошибка - выкладывай. Если в консольном проекте ошибки нету, значит смотри на разницу между консольным и гуишном проектах - проблема именно в разнице.

Ну а вообще, если уж на то пошло, то старого доброго дебагера никто не отменял :)

В консоле работает прекрасно.
Разница, по моему, только в функциях Builder'a
Архив не прикрепляется, размер слишком большой

http://yadi.sk/d/c6JFHFIKS9HQ2
http://yadi.sk/d/Oi4JehynS9Hkr