|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - C++Builder XE7, цикл в StringGrid |
|
C/C++ - C++Builder XE7, цикл в StringGrid
|
Новый участник Сообщения: 1 |
Профиль | Отправить PM | Цитировать Скоро сдавать курсовую, времени вплотную разбираться в билдере уже не. Нужно создать игру ЖИЗНЬ.
Программу для консоли я уже давно написал В консоли:
#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--; } */ } //--------------------------------------------------------------------------- Заранее спасибо. |
|
Отправлено: 08:33, 08-06-2015 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Delphi - StringGrid | Валентин_Будэйко@vk | Программирование и базы данных | 9 | 01-06-2015 12:31 | |
C/C++ - C++ Builder - Таблица StringGrid | Dark_Delphin | Программирование и базы данных | 1 | 14-03-2013 19:50 | |
Delphi - Сравнение ячеек StringGrid | Snake750 | Программирование и базы данных | 2 | 21-03-2010 09:32 | |
Delphi - Раскраска ячеек StringGrid | pirojok750 | Программирование и базы данных | 10 | 26-10-2009 17:26 | |
Delphi - StringGrid в Delphi 6 | LedWorm | Программирование и базы данных | 1 | 16-02-2004 08:02 |
|