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

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

12.05.2010, 19:04. Просмотров 7860. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.05.2010, 19:04
Ответы с готовыми решениями:

Как сделать так, чтобы при нажатии на кнопку "Новая игра" игра начиналась заново?
Как сделать так, чтобы при нажатии на кнопку &quot;Новая игра&quot; игра начиналась...

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

Корректировка алгоритма игры "Жизнь"
Здравствуйте. У меня некорректно работает игра &quot;жизнь&quot;. Работает всё по...

Задание - написать игру "Жизнь".
Добрый день всем программистам! Нужна Ваша помощь, очень нужна. Задание -...

MessageBox - чтобы вместо "Yes" и "No" показывало "Да" и "Нет"
Доброе время суток, как переделать int Key= Application-&gt;MessageBox(L&quot;Text&quot;,...

19
NiTan
Покинул форум
3167 / 1351 / 109
Регистрация: 29.01.2010
Сообщений: 2,887
12.05.2010, 19:06 2
Попробуйте обратится сюда (вам там что угодно сделают):http://www.cyberforum.ru/order-program/.
0
Grey
Тутошний я
1609 / 796 / 134
Регистрация: 03.11.2009
Сообщений: 2,325
Записей в блоге: 1
13.05.2010, 01:36 3
нужно переделать код
не проще заново создать?
Создаём массив 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
NiTan
13.05.2010, 13:31
  #4

Не по теме:

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

0
NIch
400 / 311 / 74
Регистрация: 17.03.2010
Сообщений: 1,120
13.05.2010, 14:13 5
У меня есть свой вариант игры "Жизнь" на Delphi...Если хочешь поделюсь...
Оригинальный вариант по задумке Конуэй работает на ура...
http://www.beluch.ru/life/conway.htm
В данный момент практикую с едой и хищниками с травоядными, а так же циклом жизни больше 1...
0
BeZone
2 / 2 / 0
Регистрация: 22.12.2009
Сообщений: 16
13.05.2010, 19:11  [ТС] 6
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
Тутошний я
1609 / 796 / 134
Регистрация: 03.11.2009
Сообщений: 2,325
Записей в блоге: 1
13.05.2010, 22:52 7
а как исправить эти ошибки?
BeZone, код нужно не просто вставлять.
В Object Inspector, выбираешь Image1. На вкладке Events, в строке OnMouseDown делаешь двойной клик. И уже потом в Unit вставляешь код.
Для кнопки тоже так, только строка OnClick. Или двойной клик по кнопке.
И точки из кода поубирай. Это предположительно пропущенный код.

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

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

Добавлено через 6 минут
бактерия занимает 1 клетку
Даже в клетках получились
1
BeZone
2 / 2 / 0
Регистрация: 22.12.2009
Сообщений: 16
16.05.2010, 22:55  [ТС] 12
о, вообще круто) да еще и все расписано)
только можешь объяснить вот этот код:
Код
  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++;
и вот этот кусочек:
Код
 Form1->Image1->Canvas->Rectangle((x+z)*10,(y+c)*10,(x+z)*10+10,(y+c)*10+10
0
Grey
Тутошний я
1609 / 796 / 134
Регистрация: 03.11.2009
Сообщений: 2,325
Записей в блоге: 1
17.05.2010, 00:56 13
Первый код проверяет ячейки массива, вокруг ячейки POLE[x][y]. Если значение равны единице(наличие еды и соответственно свободная клетка), то переменная eda увеличивается на 1.

Второй код рисует прямоугольник на имаге. z и c могут принимать значение -1,0 и 1.
Код
(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
BeZone
2 / 2 / 0
Регистрация: 22.12.2009
Сообщений: 16
25.05.2010, 23:59  [ТС] 14
Grey можешь написать что значит
L:
z=random(3)-1;
c=random(3)-1;
и вообще что это за переменная L?
0
Grey
Тутошний я
1609 / 796 / 134
Регистрация: 03.11.2009
Сообщений: 2,325
Записей в блоге: 1
26.05.2010, 00:42 15
L не переменная, а метка для перехода goto. Букву можно любую поставить.

Добавлено через 12 минут
В рандоме получаешь случайное число от 0-1 до 3-1. Прибавляешь их к х, у. Проверяешь ячейку массива с этими координатами. Если занято, берёшь в рандоме новые числа.
1
BeZone
2 / 2 / 0
Регистрация: 22.12.2009
Сообщений: 16
26.05.2010, 23:37  [ТС] 16
понятно!
а как отображаются на форме такие элементы как
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
Тутошний я
1609 / 796 / 134
Регистрация: 03.11.2009
Сообщений: 2,325
Записей в блоге: 1
27.05.2010, 23:44 17
N4 и N2 это пункты mainmenu. N4 закрывает программу. N2 заполняет массив единицами(едой) и прорисовывает это на имаге(зелёный цвет).
FormCreate это один из процессов создания формы. В ней прописывают настройки необходимые при создании формы. Для включения этой процедуры в код, двойной клик по форме или в инспекторе объектов выбрать Form1, вкладка Events, двойной клик в строчке OnCreate. Работа как в N2.
Button1Click(TObject *Sender) - это BitBtn1
Button это Button. Вкладка Standart. Она мне привычней, а так можешь любую ставить. Кнопка много чего делает, в основном, в цикле проверяет ячейки массива.

P.S. У Архангельского есть книга "C++Builder 6". Рекомендую.
2
BeZone
2 / 2 / 0
Регистрация: 22.12.2009
Сообщений: 16
31.05.2010, 22:42  [ТС] 18
Grey z и c что за переменные?
0
Grey
Тутошний я
1609 / 796 / 134
Регистрация: 03.11.2009
Сообщений: 2,325
Записей в блоге: 1
31.05.2010, 23:18 19
14 сообщение
Цитата Сообщение от BeZone Посмотреть сообщение
Grey можешь написать что значит
L:
z=random(3)-1;
c=random(3)-1;
и вообще что это за переменная L?
и 15.
х и у берёшь из цикла. z и c случайные от -1 до +1.
А сами буквы z и c, мне нравятся симметричным расположением вокруг х.
1
BeZone
2 / 2 / 0
Регистрация: 22.12.2009
Сообщений: 16
01.06.2010, 16:33  [ТС] 20
пасиб за помощь
0
01.06.2010, 16:33
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.06.2010, 16:33

Игра "пятнашки" - адаптировать готовый код к новому проекту
Помогите или объясните как создать в форме эту игру по этому коду: Fifteen.cpp...

Игра "Мозаика", просмотр исходного изображения во время игры
Разрабативаемое преложение представляет собой программную реализацию популярной...

Игра "морской бой" - как закрасить определенные клеточки
Делаю морской бой, у меня на форме два картинки игрового поля(клеточки 10х10). ...


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

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

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