Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/43: Рейтинг темы: голосов - 43, средняя оценка - 5.00
2 / 2 / 0
Регистрация: 22.12.2009
Сообщений: 16

Игра "Жизнь" под Windows

12.05.2010, 19:04. Показов 8782. Ответов 19
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет! Нужна помощь с исходником игры "Жизнь" под Dos. Нужно переделать его под Windows. Вот исходник 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
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
#include <dos.h>
#include <iostream.h>
#include <conio.h>
#include <mouse.h>
#include <stdio.h>
#include <stdlib.h>
#define VIDEO 0x10
#define LX  (X=1;X<60;X++)
#define LY  (Y=1;Y<48;Y++)
#define NS  (NA[X+1][Y]+NA[X-1][Y]+NA[X][Y+1]+NA[X][Y-1])
#define NS8 (NA[X+1][Y]+NA[X-1][Y]+NA[X][Y+1]+NA[X][Y-1] +NA[X+1][Y+1]+NA[X+1][Y-1]+NA[X-1][Y+1]+NA[X-1][Y-1])
void movetoxy(int x, int y)
{
   union REGS regs;
   regs.h.ah = 2;  /* set cursor position */
   regs.h.dh = y;
   regs.h.dl = x;
   regs.h.bh = 0;  /* video page 0 */
   int86(VIDEO, &regs, &regs);
}
 
 
void Box(int X,int Y,int W,int H)
{
char LU[1],LD[1],RU[1],RD[1],R[1],U[1],A,B;
sprintf (LU,"%c",201);
sprintf (LD,"%c",187);
sprintf (RU,"%c",200);
sprintf (RD,"%c",188);
sprintf (R,"%c",186);
sprintf (U,"%c",205);
movetoxy(X,Y);     cprintf (LU);
movetoxy(X+W,Y);   cprintf (LD);
movetoxy(X,Y+H);   cprintf (RU);
movetoxy(X+W,Y+H); cprintf (RD);
for (A=1;A<H;A++){movetoxy(X,Y+A);cprintf (R);}
for (A=1;A<H;A++){movetoxy(X+W,Y+A);cprintf (R);}
for (A=1;A<W;A++){movetoxy(X+A,Y);cprintf (U);}
for (A=1;A<W;A++){movetoxy(X+A,Y+H);cprintf (U);}
 
}
 
main(){
char BUF[80],F[1];
int A,B,S,NA[100][100],NB[100][100],X,Y,PLAY,DL,CS;
int directvideo;
directvideo = 1;
DL=0;
for (X=0;X<61;X++) for (Y=0;Y<49;Y++)
{
NA[X][Y]=0;
NB[X][Y]=0;
}
 
sprintf (F,"%c",219);
 
textmode(C4350);
textbackground(1);
clrscr;
Show_Cursor();
_setcursortype(_NOCURSOR);
 
PLAY=0;
clrscr();
movetoxy(75,0);
textcolor(14);
cprintf("‚›•Ћ„");
movetoxy(68,4);
cprintf("‘’Ђђ’");
movetoxy(68,6);
cprintf("Џ*г§*");
movetoxy(67,10);
cprintf("—ЁбвЁвм");
movetoxy(69,12);
cprintf("+ -");
movetoxy(68,15);
cprintf("˜Ђѓ");
 
movetoxy(61,25);cprintf("Џа*ўЁ«* ?Јал †Ё§*м");
movetoxy(61,27);cprintf("‹Ґў®© Є*®ЇЄ®© ¬лиЁ");
movetoxy(61,28);cprintf("‘в*ўЁ¬ ¦Ё§*м,");
movetoxy(61,29);cprintf("Џа*ў®© гЎЁа*Ґ¬.");
movetoxy(61,30);cprintf("˜*Ј-б«Ґ¤г©й*п Ї®§.");
movetoxy(61,31);cprintf("+ - §*¬Ґ¤«Ґ*ЁҐ(¬б)");
movetoxy(61,33);cprintf("…б«Ё ў®§«Ґ ¦Ё§*Ё");
movetoxy(61,34);cprintf("Ѓ®«миҐ ваҐе Ё«Ё");
movetoxy(61,35);cprintf("ЊҐ*миҐ ¤ўге ¦Ё§*Ґ©");
movetoxy(61,36);cprintf("’® ®** г¬Ёа*Ґв,");
movetoxy(61,37);cprintf("…б«Ё ў®§«Ґ Їгбв®©");
movetoxy(61,38);cprintf("Љ«ҐвЄЁ ваЁ ¦Ё§*Ё");
movetoxy(61,39);cprintf("‚ *Ґ© ஦¤*Ґвбп");
movetoxy(61,40);cprintf("Ќ®ў*п ¦Ё§*м.");
 
movetoxy(61,47);cprintf("STALKER Studio tec.");
movetoxy(61,48);cprintf("2007.9.30 UA AKTOP");
textcolor(7);
sprintf (BUF,"%d  ",DL);
movetoxy(69,13);
cprintf(BUF);
 
movetoxy(0,1);
Box(0,1,60,48);
 
 
do{
movetoxy(0,0);
sprintf (BUF,"%d %d %d  ",CX(),CY(),BP());
cprintf(BUF);
Show_Cursor();
if (CX()>75 && CY()<1 && BP()==1)
return 0;
if (CX()>74 && CY()<1){
movetoxy(29,0);
cprintf("Ќ*¦¬ЁвҐ ¤«п ўл室*");}
else{
textcolor(1);
movetoxy(29,0);
 
cprintf("Ќ*¦¬ЁвҐ ¤«п ўл室*");
textcolor(7);}
 
 
if (CX()>67 && CY()<5  && CX()<73 && CY()>3 && BP()==1)
PLAY=1;
if (CX()>67 && CY()<5  && CX()<73 && CY()>3 ) {
movetoxy(64,2);
 
cprintf("ЏгбвЁвм ¦Ё§*м");}
else{
textcolor(1);
movetoxy(64,2);
cprintf("ЏгбвЁвм ¦Ё§*м");
textcolor(7);}
 
if (CX()>67 && CY()<7  && CX()<73 && CY()>5 ) {
if (BP()==1)
PLAY=0;
movetoxy(62,8);
cprintf("Ћбв**®ўЁвм ¦Ё§*м");}
else{
textcolor(1);
movetoxy(62,8);
cprintf("Ћбв**®ўЁвм ¦Ё§*м");
textcolor(7);}
 
 
if (CX()>66 && CY()<11  && CX()<74 && CY()>9 ) {
if (BP()==1){
PLAY=0;
textcolor(1);
for LY for LX
{
NA[X][Y]=0;
movetoxy(X,Y+1);
cprintf(F);
}
textcolor(7);
}}
 
if (CX()>68 && CY()<13  && CX()<70 && CY()>11 ) {
if (BP()==1){
delay(1);
DL=DL+1;
if (DL>100)DL=100;
sprintf (BUF,"%d",DL);
movetoxy(69,13);
cprintf(BUF);
}}
 
if (CX()>70 && CY()<13  && CX()<72 && CY()>11 ) {
if (BP()==1){
delay(1);
DL=DL-1;
if (DL<0)DL=0;
sprintf (BUF,"%d  ",DL);
movetoxy(69,13);
cprintf(BUF);
}}
 
 
if (CX()>67 && CY()<16  && CX()<71 && CY()>14 ) {
if (BP()==1){
PLAY=0;
for LY for LX
{
   NB[X][Y]=NA[X][Y];
   if (NA[X][Y]==0 && NS8==3) NB[X][Y]=1;
   if (NA[X][Y]==1 && NS8>3 || NA[X][Y]==1 && NS8<2) NB[X][Y]=0;
}
 
for LY for LX
{
NA[X][Y]=NB[X][Y];
if (NA[X][Y]==1)
{
textcolor(7);
movetoxy(X,Y+1);
cprintf(F);
}
else
{
textcolor(1);
movetoxy(X,Y+1);
cprintf(F);
textcolor(7);
}
}
}
delay (40);
 
}
 
 
  if (PLAY==0  )
  {
  if (BP()==1  && CX()>0 && CY()<49  && CX()<60 && CY()>1 )
  {
    Hide_Cursor();
    NA[CX()][CY()-1]=1;
    if  (CX()>0 && CY()<49  && CX()<60 && CY()>1)
    {
    movetoxy(CX(),CY());
    cprintf(F);
    }
    Show_Cursor();
  }
  if (BP()==2 && CX()>0 && CY()<49  && CX()<60 && CY()>1 )
  {
  Hide_Cursor();
  NA[CX()][CY()-1]=0;
      if  (CX()>0 && CY()<49  && CX()<60 && CY()>1)
    {
  movetoxy(CX(),CY());
  textcolor(1);
  cprintf(F);
   }
  textcolor(7);
  Show_Cursor();
 
  }
  }
 
if (PLAY==1){
 
delay(DL);
for LY for LX
{
   NB[X][Y]=NA[X][Y];
   if (NA[X][Y]==0 && NS8==3) NB[X][Y]=1;
   if (NA[X][Y]==1 && NS8>3 || NA[X][Y]==1 && NS8<2) NB[X][Y]=0;
}
 
for LY for LX
{
NA[X][Y]=NB[X][Y];
if (NA[X][Y]==1)
{
textcolor(7);
movetoxy(X,Y+1);
cprintf(F);
}
else
{
textcolor(1);
movetoxy(X,Y+1);
cprintf(F);
textcolor(7);
}
}
}
 
} while(!kbhit());
Hide_Cursor();
return 0;
}
и исходник 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
#include<dos.h>
union REGS reg;
 
    void Show_Cursor()
    {
      reg.x.ax=0x01;
      int86(0x33,&reg,&reg);
    }
    void Hide_Cursor()
    {
      reg.x.ax=0x02;
      int86(0x33,&reg,&reg);
    }
    int CX()
    {
      int A;
      reg.x.ax=0x03;
      int86(0x33,&reg,&reg);
      A=reg.x.cx/8;
      return A;
    }
    int CY()
    {
      int A;
      reg.x.ax=0x03;
      int86(0x33,&reg,&reg);
      A=reg.x.dx/8;
      return A;
    }
    int BP()
    {
      int A;
      reg.x.ax=0x03;
      int86(0x33,&reg,&reg);
      A=reg.x.bx;
      return A;
    }
Добавлено через 17 минут
либо с delphi на c++:
Delphi
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
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls, Buttons, Spin, XPMan, Grids;
 
  const n=50; // Количество строк и столбцов в поле StringGrid'a
 
type
  TForm1 = class(TForm)
 
    GroupBox1: TGroupBox;
    SpinEdit1: TSpinEdit;
    StringGrid1: TStringGrid;
    Timer1: TTimer;
 
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
 
    SpeedButton1: TSpeedButton;
    SpeedButton2: TSpeedButton;
    SpeedButton4: TSpeedButton;
    SpeedButton5: TSpeedButton;
    SpeedButton6: TSpeedButton;
    SpeedButton7: TSpeedButton;
 
    CheckBox1: TCheckBox;
    CheckBox2: TCheckBox;
 
    Bevel1: TBevel;
    Bevel2: TBevel;
 
    Edit1: TEdit;
 
    procedure SpeedButton1Click(Sender: TObject);
    procedure SpeedButton2Click(Sender: TObject);
    procedure SpeedButton4Click(Sender: TObject);
    procedure SpeedButton5Click(Sender: TObject);
    procedure SpeedButton6Click(Sender: TObject);
    procedure SpeedButton7Click(Sender: TObject);
 
    procedure StringGrid1KeyUp(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure StringGrid1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
 
    procedure Timer1Timer(Sender: TObject);
 
    procedure CheckBox1Click(Sender: TObject);
    procedure CheckBox2Click(Sender: TObject);
 
    procedure SpinEdit1Change(Sender: TObject);
 
    procedure Edit1Change(Sender: TObject);
    procedure Edit1KeyPress(Sender: TObject; var Key: Char);
 
  private
  public
   // Создаётся два массива. В первом храняться * , во втором вычисляется число соседей
   mass_1, mass_2 : Array [1..n, 1..n] of String;
  end;
 
var
  Form1: TForm1;
 
 
implementation
 
{$R *.dfm}
 
// Пользовательская процедура для заполнения ячеек
Procedure Drawing;
 var i, j, k, l : Integer;
begin
 With Form1 do
  begin
 
   For i := 1 to n do
   For j := 1 to n do
    begin
     Mass_2[i,j] := '0'; // Обнуляем,
     Mass_1[i,j] := ''   // очищаем массивы
    end;
 
   For i := 0 to n-1 do
   For j := 0 to n-1 do
    If StringGrid1.Cells[j,i] = '*' then // Если находим * , то в массив mass_1 в те же координаты ставим *
     mass_1[i+1,j+1] := '*';
 
   For i := 1 to n do
   For j := 1 to n do
    begin
     If mass_1[i,j] = '*' then // Если находим *, то в массиве mass_2 увеличиваем все окружные ячейки на единицу
      begin
 
       For k := i-1 to i+1 do
       For l := j-1 to j+1 do
        If (not (( k = i )   and ( l = j ))) and // Не увеливаем ячейку, где находится *
                (( k > 0 )   and ( l > 0 ))  and // Не выходим за границы  StringGrid'a
                (( k < n+1 ) and ( l < n+1 )) then
         mass_2[k,l] := IntToStr ( StrToInt( mass_2[k,l] )+1 )
 
      end
     end;
 
   For i := 1 to n do  // Заполняем ячейки, согласно правилам игры
   For j := 1 to n do
    begin
     If mass_2[i,j] = '3' then StringGrid1.Cells[j-1,i-1] := '*';
     If (StrToInt( mass_2[i,j] ) < 2 ) or (StrToInt( mass_2[i,j] ) > 3 ) then StringGrid1.Cells[j-1,i-1] := ''
    end
  end
end;
 
// Пользовательская процедура для очистки поля игры
Procedure Clearing;
 Var i, j : Integer;
begin
  For i := 0 to n-1 do
  For j := 0 to n-1 do
   begin
 
     With Form1 do
       begin
         StringGrid1.Cells[j,i] := '';
         mass_2[i+1,j+1] := '0';
         mass_1[i+1,j+1] := ''
        end
 
   end
end;
 
// Сворачивание программы с трей
procedure TForm1.SpeedButton5Click(Sender: TObject);
begin
 Application.Minimize
end;
 
// Закрытие программы
procedure TForm1.SpeedButton6Click(Sender: TObject);
begin
 Close
end;
 
// Показывание сообщения об авторе
procedure TForm1.SpeedButton2Click(Sender: TObject);
begin
 ShowMessage('Created by ZEVS'+ #10#13 + 'Злобин Евгений ВТиПО 11'+ #10#13 +'http://tpascal.h15.ru')
end;
 
procedure TForm1.SpeedButton7Click(Sender: TObject);
begin
 SpeedButton7.Caption := 'Play';
 Timer1.Enabled := not ( Timer1.Enabled )
end;
 
// Очистка StringGrid'a
procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
 Clearing
end;
 
// Не зависимо от нажатой клавиши установка в выбранную ячеку *
procedure TForm1.StringGrid1KeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
 With StringGrid1 do 
   Cells[Col,Row] := '*'
end;
 
// Прорисовка прототипа жизни
procedure TForm1.Timer1Timer(Sender: TObject);
begin
 SpeedButton7.Caption := 'Stop';
 Drawing
end;
 
// Убрать\Показать сетку
procedure TForm1.CheckBox1Click(Sender: TObject);
begin
 If CheckBox1.Checked then
  StringGrid1.GridLineWidth := 0
 Else StringGrid1.GridLineWidth := 1
end;
 
// Задается количество случайно заполненных ячеек
procedure TForm1.SpinEdit1Change(Sender: TObject);
begin
 If SpinEdit1.Value > 2550 then SpinEdit1.Value := 2550;
 If SpinEdit1.Value < 3 then SpinEdit1.Value := 3
end;
 
// Красивое появление панельки с настройками
procedure TForm1.CheckBox2Click(Sender: TObject);
begin
 
 If CheckBox2.Checked // Если стоит галочка, то выдвигаем панельку ...
  then
   begin
    While GroupBox1.Height < 97 do
     begin
      GroupBox1.Height := GroupBox1.Height+1; // Приращение высоты панельки
      CheckBox2.Enabled := False; // Делаем ЧекБокс недоступным
      Application.ProcessMessages // Принудительная прорисовка
     end;
   end
 
 Else // иначе - задвигаем панельку.
  begin
    While GroupBox1.Height > 0 do
     begin
      GroupBox1.Height := GroupBox1.Height-1;
      CheckBox2.Enabled := False;
      Application.ProcessMessages
     end
   end;
 
 CheckBox2.Enabled := True // Делаем ЧекБокс доступным
end;
 
 
// Случайное заполнение ячеек
procedure TForm1.SpeedButton4Click(Sender: TObject);
 Label restart;
Var kol_zap, i, j : Integer;
begin
 Randomize;
 If SpeedButton7.Caption<>'Play' then ShowMessage('Тихо! Жизнь в разгаре.')
 
  Else
   begin
    While kol_zap < SpinEdit1.Value do
     begin
 
restart :  i := random(n);
           j := random(n);
 
           If StringGrid1.Cells[i,j] <> '' then goto restart;
            StringGrid1.Cells[i,j] := '*';
           inc(kol_zap)
 
     end
   end
end;
 
// Ставит звездочку, либо пустую строку в позицию клика левой
// кнопкой мыши
procedure TForm1.StringGrid1MouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
 With StringGrid1 do
  If Cells[Col,Row] = '' then Cells[Col,Row] := '*'
   Else Cells[Col,Row] := ''
end;
 
// Задает скорость изменения жизненного процесса
procedure TForm1.Edit1Change(Sender: TObject);
begin
 Timer1.Interval := StrToInt( Edit1.Text )
end;
 
// Запрет на ввод не цифровой информации в компонет Edit
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
 if not (key in ['0'..'9',#8] ) then key := #0
end;
 
end.
Добавлено через 19 часов 30 минут
В данной программе можно просто расставлять бактерии. Если возле бактерии больше 3-х или менее 2-х бактерий, то она умирает. Если возле пустой клетки 3 жизни, в ней рождается новая жизнь.

А мне нужно переделать код так: Разработать программу, которая моделирует жизнедеятельность колонии бактерий таким образом: поле игры 50х50, бактерия занимает 1 клетку, если в соседних клетках есть еда, то бактерия живет, если нет - на протяжении 2 тактов она погибает и сама стает едой. Если не менее чем 3 соседних клетки заполнено едой, то на следующем такте бактерия делится. Следующий такт задается по нажатию кнопки.
1
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
12.05.2010, 19:04
Ответы с готовыми решениями:

Игра жизнь
Помогите пожалуйста с решением. Код нужен на С++ «Жизнь» – компьютерная игра, придуманная английским математиком Джоном Конвеем (John...

игра жизнь
содержимое life.cpp// Life.cpp: определяет точку входа для консольного приложения. // #include &lt;iostream&gt; #include...

Игра Жизнь
Написал вот такую реализацию: #include &quot;stdafx.h&quot; #include &quot;iostream&quot; #include &quot;clocale&quot; using namespace std; int...

19
Покинул форум
3189 / 1368 / 109
Регистрация: 29.01.2010
Сообщений: 2,887
12.05.2010, 19:06
Попробуйте обратится сюда (вам там что угодно сделают):https://www.cyberforum.ru/order-program/.
0
Тутошний я
 Аватар для Grey
2147 / 1202 / 225
Регистрация: 03.11.2009
Сообщений: 4,424
Записей в блоге: 2
13.05.2010, 01:36
нужно переделать код
не проще заново создать?
Создаём массив 50*50 и имаге 50*50 пикселей. Весь массив заполняем 1(едой). Раставляем бактерий(кликаем по имаге).
C++
1
2
3
4
5
void __fastcall TForm1::Image1MouseDown(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y)
{
int POLE[X][Y]=3;//POLE ýò íàø ìàññèâ
}
Начинаем "жить". Кликаем по кнопке. В цикле проверяем значение ячеек массива. Если значение 3 или 2(эт наша бактерия), то проверяем клетки вокруг неё на наличие и количество еды.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void __fastcall TForm1::Button1Click(TObject *Sender)
{
int eda;
...
if ((POLE[x][y]==3)||(POLE==2))
 {
   eda=0;
   if (POLE[x-1][y-1]==1) eda++;
   if (POLE[x][y-1]==1) eda++;
   if (POLE[x+1][y-1]==1) eda++;
   if (POLE[x-1][y]==1) eda++;
   ...                       //è äàëåå
   if (eda>3) POLE[x][y]=4;//бактерия толстеет и на следующем ходу делится
 }
}
Если еды нету, значение в ячейке с 3 падает до 2, а на следующем ходу до единицы(становится едой).
И всё это отображается в имаге.

Добавлено через 14 минут
По мойму всё просто, как в жизни.
Единственное, я не биолог и не знаю куда предпочитают разбегаться бактерии при делении.

Не по теме:

Я б ещё добавил, что при отсутствии еды более сильная может съедать более слабую.Потом дал бы им палки, а там и до бластеров недалеко :D

1
13.05.2010, 13:31

Не по теме:

Цитата Сообщение от Grey Посмотреть сообщение
Я б ещё добавил, что при отсутствии еды более сильная может съедать более слабую.Потом дал бы им палки, а там и до бластеров недалеко
Так начинали создавать компьютерную игру Spore: Сделаем симулятор бактерии в океане, потом: добавим возможность выходить на поверхность........и вылетать в космос.:rofl:

0
 Аватар для NIch
401 / 312 / 74
Регистрация: 17.03.2010
Сообщений: 1,119
13.05.2010, 14:13
У меня есть свой вариант игры "Жизнь" на Delphi...Если хочешь поделюсь...
Оригинальный вариант по задумке Конуэй работает на ура...
http://www.beluch.ru/life/conway.htm
В данный момент практикую с едой и хищниками с травоядными, а так же циклом жизни больше 1...
0
2 / 2 / 0
Регистрация: 22.12.2009
Сообщений: 16
13.05.2010, 19:11  [ТС]
Grey
спасибо огромное)

NIch
мне нужно именно на С++ и в таком варианте как я описал

Добавлено через 1 час 4 минуты
[C++ Error] Unit1.cpp(20): E2316 '_fastcall TForm1::Image1MouseDown(TObject *,TMouseButton,TShiftState,int,int)' is not a member of 'TForm1'
[C++ Error] Unit1.cpp(25): E2316 '_fastcall TForm1::Button1Click(TObject *)' is not a member of 'TForm1

а как исправить эти ошибки?
0
Тутошний я
 Аватар для Grey
2147 / 1202 / 225
Регистрация: 03.11.2009
Сообщений: 4,424
Записей в блоге: 2
13.05.2010, 22:52
а как исправить эти ошибки?
BeZone, код нужно не просто вставлять.
В Object Inspector, выбираешь Image1. На вкладке Events, в строке OnMouseDown делаешь двойной клик. И уже потом в Unit вставляешь код.
Для кнопки тоже так, только строка OnClick. Или двойной клик по кнопке.
И точки из кода поубирай. Это предположительно пропущенный код.

BeZone, ты эту игру для себя или сдать срочно надо?

Добавлено через 30 минут
И сколько уже в билдере программируешь?
1
2 / 2 / 0
Регистрация: 22.12.2009
Сообщений: 16
15.05.2010, 00:21  [ТС]
ну я делаю это не по своей воле) просто это курсак, и мне нужно не только написать код но и понять его содержание. поэтому сюда и обратился.
0
Тутошний я
 Аватар для Grey
2147 / 1202 / 225
Регистрация: 03.11.2009
Сообщений: 4,424
Записей в блоге: 2
15.05.2010, 01:49
BeZone, посмотри Жизнь.
Будут вопросы, в этой теме задавай.
2
2 / 2 / 0
Регистрация: 22.12.2009
Сообщений: 16
15.05.2010, 23:05  [ТС]
а твой вариант игры подходит под мое описание?
Разработать программу, которая моделирует жизнедеятельность колонии бактерий таким образом: поле игры 50х50, бактерия занимает 1 клетку, если в соседних клетках есть еда, то бактерия живет, если нет - на протяжении 2 тактов она погибает и сама стает едой. Если не менее чем 3 соседних клетки заполнено едой, то на следующем такте бактерия делится. Следующий такт задается по нажатию кнопки.
0
Тутошний я
 Аватар для Grey
2147 / 1202 / 225
Регистрация: 03.11.2009
Сообщений: 4,424
Записей в блоге: 2
15.05.2010, 23:35
а твой вариант игры подходит под мое описание?
Подходит.

Добавлено через 6 минут
бактерия занимает 1 клетку
Даже в клетках получились
1
2 / 2 / 0
Регистрация: 22.12.2009
Сообщений: 16
16.05.2010, 22:55  [ТС]
о, вообще круто) да еще и все расписано)
только можешь объяснить вот этот код:
Code
1
2
3
4
5
6
7
8
  if (POLE[x-1][y-1]==1) eda++;
   if (POLE[x][y-1]==1) eda++;
   if (POLE[x+1][y-1]==1) eda++;
   if (POLE[x-1][y]==1) eda++;
   if (POLE[x+1][y]==1) eda++;
   if (POLE[x-1][y+1]==1) eda++;
   if (POLE[x][y+1]==1) eda++;
   if (POLE[x+1][y+1]==1) eda++;
и вот этот кусочек:
Code
1
 Form1->Image1->Canvas->Rectangle((x+z)*10,(y+c)*10,(x+z)*10+10,(y+c)*10+10
0
Тутошний я
 Аватар для Grey
2147 / 1202 / 225
Регистрация: 03.11.2009
Сообщений: 4,424
Записей в блоге: 2
17.05.2010, 00:56
Первый код проверяет ячейки массива, вокруг ячейки POLE[x][y]. Если значение равны единице(наличие еды и соответственно свободная клетка), то переменная eda увеличивается на 1.

Второй код рисует прямоугольник на имаге. z и c могут принимать значение -1,0 и 1.
Code
1
2
3
4
(x+z)*10,(y+c)*10//координаты верхней левой точки квадрата в пикселях
(x+z)*10+10,(y+c)*10+10//координаты нижней правой точки
+10 это ширина и высота квадрата в пикселях
Если x и y=10, a z и c=-1, получаем Image1->Canvas->Rectangle(90,90,100,100);
1
2 / 2 / 0
Регистрация: 22.12.2009
Сообщений: 16
25.05.2010, 23:59  [ТС]
Grey можешь написать что значит
L:
z=random(3)-1;
c=random(3)-1;
и вообще что это за переменная L?
0
Тутошний я
 Аватар для Grey
2147 / 1202 / 225
Регистрация: 03.11.2009
Сообщений: 4,424
Записей в блоге: 2
26.05.2010, 00:42
L не переменная, а метка для перехода goto. Букву можно любую поставить.

Добавлено через 12 минут
В рандоме получаешь случайное число от 0-1 до 3-1. Прибавляешь их к х, у. Проверяешь ячейку массива с этими координатами. Если занято, берёшь в рандоме новые числа.
1
2 / 2 / 0
Регистрация: 22.12.2009
Сообщений: 16
26.05.2010, 23:37  [ТС]
понятно!
а как отображаются на форме такие элементы как
N4Click(TObject *Sender);
N2Click(TObject *Sender);
FormCreate(TObject *Sender);

ну по типу
Image1MouseDown(TObject *Sender - это Image1
Button1Click(TObject *Sender) - это BitBtn1

Добавлено через 5 минут
и лучше напиши что оно из себя представляет или что делает

Добавлено через 10 минут
например:
Image1 – отображает бактерии и еду
BitBtn1 – кнопка следующий ход

void __fastcall Image1MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y); - по нажатию на лкм расставляем бактерии
0
Тутошний я
 Аватар для Grey
2147 / 1202 / 225
Регистрация: 03.11.2009
Сообщений: 4,424
Записей в блоге: 2
27.05.2010, 23:44
N4 и N2 это пункты mainmenu. N4 закрывает программу. N2 заполняет массив единицами(едой) и прорисовывает это на имаге(зелёный цвет).
FormCreate это один из процессов создания формы. В ней прописывают настройки необходимые при создании формы. Для включения этой процедуры в код, двойной клик по форме или в инспекторе объектов выбрать Form1, вкладка Events, двойной клик в строчке OnCreate. Работа как в N2.
Button1Click(TObject *Sender) - это BitBtn1
Button это Button. Вкладка Standart. Она мне привычней, а так можешь любую ставить. Кнопка много чего делает, в основном, в цикле проверяет ячейки массива.

P.S. У Архангельского есть книга "C++Builder 6". Рекомендую.
2
2 / 2 / 0
Регистрация: 22.12.2009
Сообщений: 16
31.05.2010, 22:42  [ТС]
Grey z и c что за переменные?
0
Тутошний я
 Аватар для Grey
2147 / 1202 / 225
Регистрация: 03.11.2009
Сообщений: 4,424
Записей в блоге: 2
31.05.2010, 23:18
14 сообщение
Цитата Сообщение от BeZone Посмотреть сообщение
Grey можешь написать что значит
L:
z=random(3)-1;
c=random(3)-1;
и вообще что это за переменная L?
и 15.
х и у берёшь из цикла. z и c случайные от -1 до +1.
А сами буквы z и c, мне нравятся симметричным расположением вокруг х.
1
2 / 2 / 0
Регистрация: 22.12.2009
Сообщений: 16
01.06.2010, 16:33  [ТС]
пасиб за помощь
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
01.06.2010, 16:33
Помогаю со студенческими работами здесь

Игра жизнь
Нужно написать игру &quot;Жизнь&quot; простым кодом. Только начал изучать c++

Игра жизнь
Помогите пожалуйста с решением. Код нужен на С++ «Жизнь» – компьютерная игра, придуманная английским математиком Джоном Конвеем (John...

Игра Жизнь
Ну, правила игры таковы: - если клетка пустая но имеет ровно 3 соседа (вообще их 8), там появляется жизнь. - если клетка полная, но там...

Игра ( Жизнь Конвея)
Написал код - но во время запуска игра вылетает! Вот исходники, подскажите, что не так?

Игра в жизнь Конвей
Чего то я намудрил помогите разобраться пожалуйста #include&lt;math.h&gt; #include &lt;time.h&gt; #include &lt;stdio.h&gt; #include...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru