ManFromSyberian
08-06-2015, 08:33
Скоро сдавать курсовую, времени вплотную разбираться в билдере уже не. Нужно создать игру ЖИЗНЬ.
Программу для консоли я уже давно написал
#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--; } */
}
//---------------------------------------------------------------------------
Заранее спасибо.
Программу для консоли я уже давно написал
#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--; } */
}
//---------------------------------------------------------------------------
Заранее спасибо.