[問題] 生命遊戲...
目前正在進行寫生命遊戲的程式
說明
生命遊戲(game of life)為1970年由英國數學家J. H. Conway所提出,某一細胞的鄰居
包括上、下、左、右、左上、左下、右上與右下相鄰之細胞,遊戲規則如下:
孤單死亡:如果細胞的鄰居小於一個,則該細胞在下一次狀態將死亡。
擁擠死亡:如果細胞的鄰居在四個以上,則該細胞在下一次狀態將死亡。
穩定:如果細胞的鄰居為二個或三個,則下一次狀態為穩定存活。
復活:如果某位置原無細胞存活,而該位置的鄰居為三個,則該位置將復活一細胞。
在24*24的方格中模擬各世代生物體的狀態
程式寫出來compile有過
可是生物體都沒有死亡的現象,一直不斷增加到飽和
不曉得是什麼緣故
可以麻煩各位幫忙看看嗎@@
謝謝<(_ _)>
#include "stdafx.h"
#include "consola.h"
#include "iostream"
#include "time.h"
using namespace std;
void showlife ( void );
void nextlife ( void );
int checksquare ( int , int );
void copylife ( void );
int lifeA[24][24] = {0};
int lifeB[24][24] = {0};
int _tmain(int argc, _TCHAR* argv[])
{
srand ( time(NULL) );
// initial life
for ( int i = 0; i < 300; i++ )
{
int x = rand() % 24;
int y = rand() % 24;
lifeA[x][y] = 1;
}
while (1)
{
showlife();
delay(1000);
nextlife();
copylife();
}
gotoxy(40,20);
system("pause");
return 0;
}
void showlife ( void )
{
for ( int i = 0; i < 24; i++ )
{
for ( int j = 0; j < 24; j++ )
{
if( lifeA[i][j] == 1 )
{
gotoxy(i,j);
textcolor( LIGHTGREEN );
cout << "o" ;
}
}
}
}
void nextlife ( void )
{
// There are three conditions:
// Condition 1: born
for ( int i = 0; i < 24; i++ )
{
for ( int j = 0; j < 24; j++ )
{
if ( lifeA[i][j] == 0 && checksquare(i,j) == 3)
{
lifeB[i][j] = 1;
}
}
}
// Condition 2: dead
for ( int i = 0; i < 24; i++ )
{
for ( int j = 0; j < 24; j++ )
{
if ( lifeA[i][j] == 1 && checksquare(i,j) >= 4 || checksquare(i,j) <= 1)
{
lifeB[i][j] = 0;
}
}
}
// Condition 3: live
for ( int i = 0; i < 24; i++ )
{
for ( int j = 0; j < 24; j++ )
{
if ( lifeA[i][j] == 1 && checksquare(i,j) == 2 || checksquare(i,j) == 3 )
{
lifeB[i][j] = 1;
}
}
}
}
int checksquare ( int x, int y )
{
int sum = 0;
if ( lifeA[x-1][y-1] == 1 ) // upper left
{
sum = sum + 1;
}
if ( lifeA[x][y-1] == 1 ) // upper middle
{
sum = sum + 1;
}
if ( lifeA[x+1][y-1] == 1 ) // upper right
{
sum = sum + 1;
}
if ( lifeA[x-1][y] == 1 ) // left
{
sum = sum + 1;
}
if ( lifeA[x+1][y] == 1 ) // right
{
sum = sum + 1;
}
if ( lifeA[x-1][y+1] == 1 ) // lower left
{
sum = sum + 1;
}
if ( lifeA[x][y+1] == 1 ) // lower middle
{
sum = sum + 1;
}
if ( lifeA[x+1][y+1] == 1 ) // lower right
{
sum = sum + 1;
}
return sum;
}
void copylife ( void )
{
for ( int i = 0; i < 24; i++ )
{
for ( int j = 0; j < 24; j++ )
{
lifeA[i][j] = lifeB[i][j];
}
}
}
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.5.44
推
12/08 10:02, , 1F
12/08 10:02, 1F
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章