實現乙個簡單的元胞自動機,可以自定義初始狀態、執行規則。以此基礎實現乙個能自動繪製大量萬花筒影象的程式。
注:為了防止二維陣列輸出時畫面閃爍,採取雙螢幕緩衝區輪流顯示。將緩衝區寫好後一次性輸出可以防止陣列迴圈輸出方式會導致的畫面閃爍。
效果生命遊戲中的「滑翔機(gliders)」:
萬花筒:
//控制台螢幕緩衝區控制代碼
coord coord=
;word att;
dword bytes=0;
char data[col]
[raw]
;int clr[8]
=;int a[col]
[raw]
=,b[col]
[raw]=;
unsigned
int counts=0;
char str[11]
;voidf0(
)//規則0:空心萬花筒
for(i=
0;i)for
(j=0
;jvoidf1(
)//規則1:萬花筒
for(i=
0;i)for
(j=0
;jvoid
f2p(
)//滑翔機初始化
voidf2(
)//規則2:生命遊戲
for(i=
0;i)for
(j=0
;jvoid
show()
//顯示
else
writeconsoleoutputcharactera
(houtbuf,
" ",2
,coord,
&bytes)
;writeconsoleoutputattribute
(houtbuf,
&att,
1,coord,
&bytes)
; coord.x++
;writeconsoleoutputattribute
(houtbuf,
&att,
1,coord,
&bytes);}
}itoa
(counts,str,10)
; coord.x=
0;coord.y=41;
writeconsoleoutputcharactera
(houtbuf,str,
sizeof
(str)
,coord,
&bytes)
; att=white;
writeconsoleoutputattribute
(houtbuf,
&att,
1,coord,
&bytes)
;setconsoleactivescreenbuffer
(houtbuf);f1
();//規則替換處
//sleep(50);
getch()
;//任意鍵繼續
counts++
;for
(i=0
;i)else
writeconsoleoutputcharactera
(houtput,
" ",2
,coord,
&bytes)
;writeconsoleoutputattribute
(houtput,
&att,
1,coord,
&bytes)
; coord.x++
;writeconsoleoutputattribute
(houtput,
&att,
1,coord,
&bytes);}
}itoa
(counts,str,10)
; coord.x=
0;coord.y=41;
writeconsoleoutputcharactera
(houtput,str,
sizeof
(str)
,coord,
&bytes)
; att=white;
writeconsoleoutputattribute
(houtput,
&att,
1,coord,
&bytes)
;setconsoleactivescreenbuffer
(houtput);f1
();//規則替換處
//sleep(50);
getch()
;counts++;}
intmain()
一些比較好看的:
元胞自動機
即生命遊戲,今天下午迅雷的筆試程式設計題。簡單的版本,給定當前的狀態,給出下乙個時刻的狀態。status函式獲取某點當時周圍的活的細胞數量,寫的比較渣 include include include using namespace std define max 10010 int status ve...
元胞自動機
這 幾個關於元胞自動機的問題 元胞自動機 森林火災模型 規則 1 正在燃燒的樹變成空格位 2 如果綠樹格位的最近鄰居中有乙個樹在燃燒,則它變成正在燃燒的樹 3 在空格位,樹以概率p生長 4 在最近的鄰居中沒有正在燃燒的樹的情況下樹在每一時步以概率f 閃 電 變為正在燃燒的樹。參考文獻 祝玉學,趙學龍...
元胞自動機
元胞自動機 ca 是一種用來 區域性規則和區域性聯絡的方法。典型的元胞自動機是定義在網格上的,每乙個點上的網格代表乙個元胞與一種有限的狀態。變化規則適用於每乙個元胞並且同時進行。典型的變化規則,決定於元胞的狀態,以及其 4 或 8 鄰居的狀態。森林火災元胞自動機模型 一片森林由於自然或人為原因,有一...