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

Тема в разделе "Borland C++ Builder & Kylix", создана пользователем dypel, 3 июн 2014.

  1. dypel

    dypel New Member

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

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

    Код (C++):
    #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][left].fGeneration) a[i][j].neigborhood++;
    if (a[up][right].fGeneration) a[i][j].neigborhood++;
    if (a[up][j].fGeneration) a[i][j].neigborhood++;
    if (a[i][left].fGeneration) a[i][j].neigborhood++;
    if (a[i][right].fGeneration) a[i][j].neigborhood++;
    if (a[down][j].fGeneration) a[i][j].neigborhood++;
    if (a[down][left].fGeneration) a[i][j].neigborhood++;
    if (a[down][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);
    }


    }
     
Загрузка...

Поделиться этой страницей