Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - C++Builder XE7, цикл в StringGrid

Ответить
Настройки темы
C/C++ - C++Builder XE7, цикл в StringGrid

Новый участник


Сообщения: 1
Благодарности: 0

Профиль | Отправить 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

 


Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - C++Builder XE7, цикл в StringGrid

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
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




 
Переход