Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   C++Builder XE7, цикл в StringGrid (http://forum.oszone.net/showthread.php?t=300879)

ManFromSyberian 08-06-2015 08:33 2515882

C++Builder XE7, цикл в StringGrid
 
Скоро сдавать курсовую, времени вплотную разбираться в билдере уже не. Нужно создать игру ЖИЗНЬ.
Программу для консоли я уже давно написал
В консоли:
Код:

#include<iostream>
#include<math.h>
#include<stdlib.h>
#include<time.h>
#include<locale.h>
#include "windows.h"
using namespace std;
int ** mat(int m, int n)
{
    int** t;
    t = new int*[m];
    for (int i = 0; i < m; i++)
    {
        t[i] = new int[n];
        for (int j = 0; j < n; j++)
            t[i][j] = 0;
    }
    return t;
}
int ** mat2(int m, int n)
{
    int** t;
    t = new int*[m];
    for (int i = 0; i < m; i++)
    {
        t[i] = new int[n];
        for (int j = 0; j < n; j++)
            t[i][j] = 0;
    }
    return t;
}
void init(int m, int n, int N, int H)
{
    int** matr;
    matr = mat(m, n);
    int** matr2;
    matr2 = mat2(m, n);
    srand(time(NULL));
    for (int z = 0; z < N; z++)
    {
        int a, b;
        a = 1 + rand() % (m - 2);
        b = 1 + rand() % (n - 2);
        //cout << a << "  " << b << endl;
        for (int i = 0; i < m; i++)
        for (int j = 0; j < n; j++)
        {
            matr[a][b] = 1;
        }
    }
        {
            cout << endl;
            for (int i = 1; i < m - 1; i++)
            {
                for (int j = 1; j < n - 1; j++)
                {
                    cout << matr[i][j] << "  ";
                }
                cout << endl << endl;
            }
        }
        Sleep(1000);
        system("cls");
        while (H>0)
        {  //для середины матрицы
            { int k = 0;
            for (int i = 1; i < m - 1; i++)
            {
                for (int j = 1; j < n - 1; j++)
                {
                    k = matr[i - 1][j - 1] + matr[i - 1][j] + matr[i - 1][j + 1] + matr[i][j - 1] + matr[i][j + 1] + matr[i + 1][j - 1] + matr[i + 1][j] + matr[i + 1][j + 1];
 
                    {if (((k<2) || (k>3)) && (matr[i][j] == 1))
                        matr2[i][j] = 0;
                    else
                    if (((k == 2) || (k == 3)) && (matr[i][j] == 1))
                        matr2[i][j] = 1;
                    }
                    {
                        if ((k == 3) && (matr[i][j] == 0))
                            matr2[i][j] = 1; }
 
                }
            }
            for (int i = 1; i < m - 1; i++)
            {
                for (int j = 1; j < n - 1; j++)
                {
                    matr[i][j] = matr2[i][j];
 
                }
            }
            }
            {
            cout << endl;
            for (int i = 1; i < m - 1; i++)
            {
                for (int j = 1; j < n - 1; j++)
                {
                    if (matr[i][j] == 1)
                        cout << "@" << "  ";
                    else
                        cout << "." << "  ";
                }
                cout << endl << endl;
            }
            cout << endl << endl << endl << endl;
        }
            H--;
            Sleep(1000);
            system("cls");
        }
}
 
 
int main()
{
    setlocale(LC_ALL, "Russian");
    int m, n, N, H;
    cout << "ВВЕДИТЕ РАЗМЕРНОСТЬ m, n =" << endl;
    cin >> m >> n;
    m = m + 2;
    n = n + 2;
    cout << endl << "ВВЕДИТЕ НАЧАЛЬНОЕ КОЛ-ВО КЛЕТОК N =" << endl;
    cin >> N;
    cout << endl << "ВВЕДИТЕ КОЛ-ВО ИТЕРАЦИЙ H =" << endl;
    cin >> H;
    cout << endl;
    init(m, n, N, H);
    system("pause ");
    return 0;

}

А вот билдере столкнулся с несколькими проблемами:
1)Не знаю в какие элементы интефейса какие писать куски кода.
2)Пробовал основной цикл заполнения сделать в Stringgrid - не получается затирать после каждой итерации и вообще он очень медленный получился.
Вывод первого заполнения:
Код:

int ** mat(int m, int n)
{  int** t;
        t = new int*[m];
        for (int i = 0; i < m; i++)
        {          t[i] = new int[n];
                for (int j = 0; j < n; j++)
                        t[i][j] = 0; }
        return t;
}
//---------------------------------------------------------------------------
int ** mat2(int m, int n)
{          int** t;
        t = new int*[m];
        for (int i = 0; i < m; i++)
        {  t[i] = new int[n];
                for (int j = 0; j < n; j++)
                        t[i][j] = 0;        }
        return t;
}
void __fastcall TForm8::StringGrid1DrawCell(TObject *Sender, int ACol, int ARow, TRect &Rect,
          TGridDrawState State)
{
int m=52, n=52;
int a=0, b=0;
 int** matr;
        matr = mat(m, n);
 int** matr2;
        matr2 = mat2(m, n);
srand(time(NULL));
        for (int z = 0; z < 1500; z++)
        {
                a = 1 + rand() % (m-2);
                b = 1 + rand() % (n-2);
                for (int i = 1; i < m-1; i++)
                        for (int j = 1; j < n-1; j++)
                        {          matr[a][b] = 1;  }
        }
        {for (int i = 1; i < m-1; i++)
        {for (int j = 1; j < n-1; j++)
                {  if (matr[i][j] ==1)
                        {  a=i-1;
                          b=j-1;
                          if((ARow == a) && (ACol == b)) // определяем конкретную ячейку
                                        {  StringGrid1->Canvas->Brush->Color = clGreen;
                                                StringGrid1->Canvas->FillRect(Rect);        }
                        }
                }} }
//Ниже попытки организовать основной цикл с затиранием и задержкой
        /* {        for(int i = 0; i < StringGrid1->RowCount; i++)
  for(int j = 0; j < StringGrid1->ColCount; j++)
        StringGrid1->Cells[j][i] = ""; }
{StringGrid1->ColCount=0;
StringGrid1->RowCount=0;}
int H=10;
                while (H>0)
                {  { int k = 0;
                        for (int i = 1; i < m; i++)
                        {  for (int j = 1; j < n; j++)
                                {  k = matr[i - 1][j - 1] + matr[i - 1][j] + matr[i - 1][j + 1] + matr[i][j - 1] + matr[i][j + 1] + matr[i + 1][j - 1] + matr[i + 1][j] + matr[i + 1][j + 1];
                                        {if (((k<2) || (k>3)) && (matr[i][j] == 1))
                                                matr2[i][j] = 0;
                                        else
                                        if (((k == 2) || (k == 3)) && (matr[i][j] == 1))
                                                matr2[i][j] = 1;          }
                                        {  if ((k == 3) && (matr[i][j] == 0))
                                                        matr2[i][j] = 1; }
                                }
                        }
                        for (int i = 1; i <m; i++)
                        {  for (int j = 1; j < n; j++)
                                {  matr[i][j] = matr2[i][j]; }
                        }}
                        {
                        for (int i = 1; i < m; i++)
                        {  for (int j = 1; j < n; j++)
                                { if (matr[i][j] ==1)
                                        {          a=i-1;
                                                b=j-1;
                                                if((ARow == a) && (ACol == b))
                                        {  StringGrid1->Canvas->Brush->Color = clGreen;
                                                StringGrid1->Canvas->FillRect(Rect); }
                                        }
                                }
                        }
                        } H--;        }        */
}
//---------------------------------------------------------------------------


Заранее спасибо.


Время: 21:34.

Время: 21:34.
© OSzone.net 2001-