Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 03.06.2011
Сообщений: 8
1

Клеточный автомат, треугольная решетка

29.05.2014, 11:47. Показов 1105. Ответов 3
Метки нет (Все метки)

треугольная решетка:

Название: 1877-25_1.png
Просмотров: 73

Размер: 4.5 Кб

в ней сделать игру жизнь

решила построить треугольник с помощью функции полигон, но выдает ошибку

файл lab1.cpp

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
#include <vcl.h>
#pragma hdrstop
 
#include "Lab1.h"
#include "Lab01_2.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::N3Click(TObject *Sender)
{
  Close();
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::N4Click(TObject *Sender)
{
Form2->ShowModal();
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::FormCreate(TObject *Sender)
{
   int i,j;
for (i=0; i<NX; i++)
  {
   for (j=0; j<NY; j++)
      { Grid[i][j] =0;}
  }
  CellSize = 3;
  Image1->Width=NX*CellSize;
  Image1->Height=NY*CellSize;
  randomize();
  i=random(NX-1);
  j=random(NY-1);
 // Grid[i][j]=1;
  Plot();
}
//---------------------------------------------------------------------------
 
 
__fastcall TForm1::Plot()
{
 int i,j;
 TRect p3;
 
 for ( i=0; i<NX; i++)
{
for ( j=0; j<NY; j++)
{ p3.Left=CellSize*i;
  p3.Top=CellSize*j;
  p3.Right=p3.Left+CellSize;
  p3.Bottom=p3.Top+CellSize;
  if (Grid[i][j]>0)
     {
       Image1->Canvas->Brush->Color=clBlack;
       Image1->Canvas->Polygon(p3);
       }
   else
     {
      Image1->Canvas->Brush->Color=clWhite;
       Image1->Canvas->Polygon(p3);
       }
   }
}
}
void __fastcall TForm1::Image1MouseDown(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y)
{
   int i,j;
i=X/CellSize;
j=Y/CellSize;
if ( (i>=0)&&(i<NX)&&(j>=0)&&(j<NY) )
   { if (Button==mbLeft)
       { Grid[i][j]=1;}
     else { Grid[i][j]=0;}
   }
 
 Plot();
}
//---------------------------------------------------------------------------
 
 
void __fastcall TForm1::Step()
{
        //TODO: Add your source code here
        int k,x,y;
 
for(x=0;x<NX;x++)
{ for (y=0;y<NY;y++)
   { GridNew[x][y]=0;
     GridDead[x][y]=0;
   }
}
 
for(x=0;x<NX; x++)
  {for (y=0;y<NY;y++)
    { k=Calc(x,y);
    if (Grid[x][y])
      {  if(k<2||k>3)
         GridDead[x][y]=1;
      }
      else {
           if(k==3)
           GridNew[x][y]=1;
           }
    }
  }
 
 
  for (x=0;x<NX;x++)
   {for (y=0;y<NY;y++)
     { if (GridDead[x][y]&&Grid[x][y])
       { Grid[x][y]=0; }
       if (GridNew[x][y])
          { Grid[x][y]=1;}
       }
     }
}
 
 
int __fastcall TForm1::Calc(int x,int y)
{
        //TODO: Add your source code here
 int i,j,n=0;
 for(i=x-1; i<=x+1; i++)
  { for (j=y-1; j<=y+1; j++)
   { if (i==x&& j==y)
     {}
     else if ( (i>=0)&&(i<NX)&&(j>=0)&&(j<NY) )
        {  if (Grid[i][j]) n++;  }
     }
   }
  return(n);}
 
void __fastcall TForm1::N6Click(TObject *Sender)
{
   Step();
 Plot();
 h++  ;
   Label1->Caption=IntToStr(h);
}
//---------------------------------------------------------------------------
 
 
 
int __fastcall TForm1::Clean()
{
       int i,j;
   h=0;
  for (i=0;i<NX;i++)
   {for (j=0;j<NY;j++)
    {Grid[i][j]=0; }
    }
    Plot();  //TODO: Add your source code here
}
void __fastcall TForm1::N7Click(TObject *Sender)
{
  Clean();
Plot();
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::N8Click(TObject *Sender)
{
   int i,j;
  for (i=0;i<NX;i++)
  {for (j=0;j<NY;j++)
    {Grid[i][j]=random(2); }
  }
  Plot();
}
//---------------------------------------------------------------------------




файл lab1.h

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#ifndef Lab1H
#define Lab1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <Menus.hpp>
#include <ExtCtrls.hpp>
 
 #define NX 100
#define NY 100
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:    // IDE-managed Components
        TMainMenu *MainMenu1;
        TMenuItem *N1;
        TMenuItem *N2;
        TMenuItem *N3;
        TMenuItem *N4;
        TImage *Image1;
        TMenuItem *N5;
        TMenuItem *N6;
        TLabel *Label1;
        TMenuItem *N7;
        TMenuItem *N8;
        void __fastcall N3Click(TObject *Sender);
        void __fastcall N4Click(TObject *Sender);
        void __fastcall FormCreate(TObject *Sender);
        void __fastcall Image1MouseDown(TObject *Sender,
          TMouseButton Button, TShiftState Shift, int X, int Y);
        void __fastcall N6Click(TObject *Sender);
        void __fastcall N7Click(TObject *Sender);
        void __fastcall N8Click(TObject *Sender);
      //   void __fastcall FormCreate(TObject *Sender);
 
 
 
private:    // User declarations
public:     // User declarations
        char Grid[NX][NY];   //   ðåøåòêà
        char CellSize;   // ðàçìåð îäíîé êëåòêè ðåøåòêè
         char GridNew[NX][NY];
         char GridDead[NX][NY];
        __fastcall TForm1(TComponent* Owner);
        __fastcall Plot();
        void __fastcall TForm1::Step();
        int __fastcall TForm1::Calc(int x,int y);
        int h;
        int __fastcall Clean();
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif


файл Lab01_2.h

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#ifndef Lab01_2H
#define Lab01_2H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
//---------------------------------------------------------------------------
class TForm2 : public TForm
{
__published:    // IDE-managed Components
        TLabel *Label1;
        TLabel *Label2;
        TLabel *Label3;
        TButton *Button1;
        void __fastcall Button1Click(TObject *Sender);
private:    // User declarations
public:     // User declarations
        __fastcall TForm2(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm2 *Form2;
//---------------------------------------------------------------------------
#endif

файл Lab01_2.cpp

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
 
#include "Lab01_2.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm2 *Form2;
//---------------------------------------------------------------------------
__fastcall TForm2::TForm2(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm2::Button1Click(TObject *Sender)
{
   Close();
}
//-------------------------------------------------------------
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.05.2014, 11:47
Ответы с готовыми решениями:

Клеточный автомат
Добрый день! Проблема: не знаю как сделать так, чтобы программа работала со StringGrig следующем...

Доработать клеточный автомат
Здравствуйте. Есть задание сделать клеточный автомат. Проект прикреплю. Как сделать так , чтобы по...

Клеточный автомат блуждания частицы по поверхности фуллерена C60
всем доброго времени суток))) приехали в провинцию умные дяди из Москвы и задали создать клеточный...

Подправить клеточный автомат "Жизнь" (Builder 2007)
Имеется программа клеточного автомата. Принцип следующий: -пустая (мёртвая) клетка,...

3
699 / 491 / 126
Регистрация: 31.05.2013
Сообщений: 2,739
Записей в блоге: 3
30.05.2014, 10:58 2
Доброго, Вы не правильно работаете с полигоном. Это должен быть массив,каждый элемент которого должен состоять из двух координат...ниже пример функции

C
1
2
3
4
5
6
7
8
9
10
11
12
13
//---------------------------------------------------------------------------
void __fastcall TForm1::triangle(int x1,int y1,int x2,int y2,int x3,int y3,int color)
{
// рисует закрашенный треугольник по трём координатам
  TPoint points[2];
  points[0] = Point(x1,y1);
  points[1] = Point(x2,y2);
  points[2] = Point(x3,y3);
 
  Image1->Canvas->Brush->Color = color;
  Image1->Canvas->Polygon(points, 2);
}
//---------------------------------------------------------------------------
0
713 / 46 / 15
Регистрация: 18.07.2010
Сообщений: 615
30.05.2014, 14:10 3
C++
1
2
3
4
TPoint points[2];
  points[0] = Point(x1,y1);
  points[1] = Point(x2,y2);
  points[2] = Point(x3,y3);
разве за пределы массива не выйдет?
Может так
C++
1
2
3
4
5
6
TPoint points[3];
  points[0] = Point(x1,y1);
  points[1] = Point(x2,y2);
  points[2] = Point(x3,y3);
  Image1->Canvas->Brush->Color = color;
  Image1->Canvas->Polygon(points, 2);
0
699 / 491 / 126
Регистрация: 31.05.2013
Сообщений: 2,739
Записей в блоге: 3
30.05.2014, 14:27 4
Цитата Сообщение от Xank Посмотреть сообщение
разве за пределы массива не выйдет?
Может так
Отобразил по факту рабочий вариант...хотя Вы правы во многих случаях был бы выход за пределы массива, но не в этом
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.05.2014, 14:27

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Клеточный автомат
Никак не могу написать прогу. Если кто знает help me пожалуйста. А вот собственно и текст проги: ...

Клеточный автомат
Ребят снова я со своим лабвью. Задача отброзить клеточный автомат 2D диффузии. Кто подскажет...

Одномерный клеточный автомат
На рисунке показано несколько поколений одномерного клеточного автомата. У каждой клетки только два...

Клеточный автомат на торе
Добрый день! Нужно сделать клеточный автомат, который натянут на тор. Движок уже имеется (с учёт...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.