1. 程式人生 > >生命遊戲——一個簡單的元胞自動機

生命遊戲——一個簡單的元胞自動機

參考書目《元胞自動機理論研究及其模擬應用》科學出版社

元胞狀態:0——死亡  1——活著

領域半徑:1

鄰居模型:Moore型

演化規則

S(t) 條件 S(t+1)
1 S = 2或3 1
1 S ≠2、3 0
0 S = 3 1
0 S ≠ 3 0

其中S(t)表示t 時刻元胞的狀態,S為8個相鄰元胞中活著的元胞數

#include<graphics.h>
int main()
{
	int orgData[100][100], resData[100][100];
	int nCount, nRows, nCols, i, j, times;
	int GraphDriver = DETECT, GraphMode;
	for (i = 0; i <100; i++)
		for (j = 0; j < 100; j++)
			orgData[i][j] = 1;
	initgraph(&GraphDriver, &GraphMode, "");//初始化螢幕
	setcolor(WHITE);
	rectangle(270, 190, 370, 290);//顯示邊框
	for (times = 1; times < 200; times++)
	{
		for (nRows = 1; nRows < 99; nRows++)
		{
			for (nCols = 1; nCols < 99; nCols++)
			{
				nCount = orgData[nRows - 1][nCols - 1] + orgData[nRows - 1][nCols] + orgData[nRows - 1][nCols + 1] + orgData[nRows][nCols - 1] + orgData[nRows][nCols + 1] + orgData[nRows + 1][nCols - 1] + orgData[nRows + 1][nCols] + orgData[nRows + 1][nCols + 1];
				switch (nCount)
				{
				case(3):putpixel(nCols + 270, 190 + nRows, BLACK);
					resData[nRows][nCols] = 1;
					break;
				case(2):resData[nRows][nCols] = orgData[nRows][nCols];
					break;
				default:resData[nRows][nCols] = 0;
					putpixel(nCols + 270, 190 + nRows, WHITE);
				}
			}
		}
		for (i = 1; i < 99; i++)
			for (j = 1; j < 99; j++)
				orgData[i][j] = resData[i][j];
		
	}
	return 0;
}

注:程式碼摘自參考書目