史上最詳細(xì)Excel制作生命游戲,體驗(yàn)生命的演變。
Excel制作生命游戲
目錄
1.游戲界面展示... 1
2.生命游戲概述... 2
3.生命游戲生存規(guī)則... 2
4.使用Excel模擬生命游戲... 3
4.1制作流程... 3
4.2打開(kāi)Excel 3
4.3設(shè)置單元格... 4
4.4繪制演示區(qū)... 4
4.5設(shè)置條件格式... 5
4.6形成雙演示區(qū)域... 5
4.7編輯公式... 6
4.8編寫(xiě)VBA代碼... 7
4.9制作按鈕... 7
4.10自定義迭代次數(shù)... 8
?
?
1.游戲界面展示

2.生命游戲概述
????因?yàn)樗M和顯示的圖像看起來(lái)頗似生命的出生和繁衍過(guò)程而得名為“生命游戲。在游戲進(jìn)行中,雜亂無(wú)序的細(xì)胞會(huì)逐漸演化出各種精致、有形的結(jié)構(gòu);這些結(jié)構(gòu)往往有很好的對(duì)稱(chēng)性,而且每一代都在變化形狀。一些形狀一經(jīng)鎖定就不會(huì)逐代變化。有時(shí),一些已經(jīng)成形的結(jié)構(gòu)會(huì)因?yàn)橐恍o(wú)序細(xì)胞的“入侵”而被破壞。但是形狀和秩序經(jīng)常能從雜亂中產(chǎn)生出來(lái)。
??? 生命游戲是一個(gè)二維網(wǎng)格游戲,這個(gè)網(wǎng)格中每個(gè)方格居住著一個(gè)活著或死了的細(xì)胞。一個(gè)細(xì)胞在下一個(gè)時(shí)刻的生死取決于相鄰8個(gè)方格中活著或死了的細(xì)胞的數(shù)量。如果相鄰方格活著的細(xì)胞數(shù)量過(guò)多,這個(gè)細(xì)胞會(huì)因?yàn)橘Y源匱乏而在下一個(gè)時(shí)刻死去;相反,如果周?chē)罴?xì)胞過(guò)少,這個(gè)細(xì)胞會(huì)因?yàn)楣聠味廊?。在游戲初始階段,玩家可以設(shè)定周?chē)罴?xì)胞(鄰居)的數(shù)目和位置。如果鄰居細(xì)胞數(shù)目設(shè)定過(guò)高,網(wǎng)格中大部分細(xì)胞會(huì)因?yàn)檎也坏劫Y源而死去,直到整個(gè)網(wǎng)格都沒(méi)有生命;如果鄰居細(xì)胞數(shù)目設(shè)定過(guò)低,世界中又會(huì)因?yàn)樯∩俣貌坏椒毖?。?shí)際中,鄰居細(xì)胞數(shù)目一般選取2或者3;這樣整個(gè)生命世界才不至于太過(guò)荒涼或擁擠,而是一種動(dòng)態(tài)平衡。游戲規(guī)則是:當(dāng)一個(gè)方格周?chē)袃蓚€(gè)或3個(gè)活細(xì)胞時(shí),方格中的活細(xì)胞在下一個(gè)時(shí)刻繼續(xù)存活;即使這個(gè)時(shí)刻方格中沒(méi)有活細(xì)胞,在下一個(gè)時(shí)刻也會(huì)“誕生”活細(xì)胞。在這個(gè)游戲中,還可以設(shè)定一些更加復(fù)雜的規(guī)則,例如當(dāng)前方格的狀態(tài)不僅由父一代決定,而且還考慮到祖父一代的情況。
????每個(gè)方格中都可放置一個(gè)生命細(xì)胞,每個(gè)生命細(xì)胞只有兩種狀態(tài):
????“生”或“死”。用黑色方格表示該細(xì)胞為“生”,空格(白色)表示該細(xì)胞為“死”?;蛘哒f(shuō)方格網(wǎng)中黑色部分表示某個(gè)時(shí)候某種“生命”的分布圖。生命游戲想要模擬的是:隨著時(shí)間的流逝,這個(gè)分布圖將如何一代一代地變化。
?
3.生命游戲生存規(guī)則
????游戲開(kāi)始時(shí),每個(gè)細(xì)胞隨機(jī)地設(shè)定為“生”或“死”之一的某個(gè)狀態(tài)。然后,根據(jù)某種規(guī)則,計(jì)算出下一代每個(gè)細(xì)胞的狀態(tài),畫(huà)出下一代細(xì)胞的生死分布圖。
????應(yīng)該規(guī)定什么樣的迭代規(guī)則呢?需要一個(gè)簡(jiǎn)單的,但又反映生命之間既協(xié)同又競(jìng)爭(zhēng)的生存定律。為簡(jiǎn)單起見(jiàn),最基本的考慮是假設(shè)每一個(gè)細(xì)胞都遵循完全一樣的生存定律;再進(jìn)一步,把細(xì)胞之間的相互影響只限制在最靠近該細(xì)胞的8個(gè)鄰居中。
????也就是說(shuō),每個(gè)細(xì)胞迭代后的狀態(tài)由該細(xì)胞及周?chē)?個(gè)細(xì)胞狀態(tài)所決定。作了這些限制后,仍然還有很多方法來(lái)規(guī)定“生存定律”的具體細(xì)節(jié)。例如,在康威的生命游戲中,規(guī)定了如下生存定律。
(1)當(dāng)前細(xì)胞為死亡狀態(tài)時(shí),當(dāng)周?chē)?個(gè)存活細(xì)胞時(shí),則迭代后該細(xì)胞變成存活狀態(tài)(模擬繁殖);若原先為生,則保持不變。
(2)當(dāng)前細(xì)胞為存活狀態(tài)時(shí),當(dāng)周?chē)泥従蛹?xì)胞低于兩個(gè)(不包含兩個(gè))存活時(shí),該細(xì)胞變成死亡狀態(tài)(模擬生命數(shù)量稀少)。
(3)當(dāng)前細(xì)胞為存活狀態(tài)時(shí),當(dāng)周?chē)袃蓚€(gè)或3個(gè)存活細(xì)胞時(shí),該細(xì)胞保持原樣。
(4)當(dāng)前細(xì)胞為存活狀態(tài)時(shí),當(dāng)周?chē)?個(gè)以上的存活細(xì)胞時(shí),該細(xì)胞變成死亡狀態(tài)(模擬生命數(shù)量過(guò)多)。
可以把最初的細(xì)胞結(jié)構(gòu)定義為種子,當(dāng)所有種子細(xì)胞按以上規(guī)則處理后,可以得到第1代細(xì)胞圖。按規(guī)則繼續(xù)處理當(dāng)前的細(xì)胞圖,可以得到下一代的細(xì)胞圖,周而復(fù)始。
上面的生存定律當(dāng)然可以任意改動(dòng),發(fā)明出不同的“生命游戲”。
演示如圖2所示

????1號(hào)從“死亡狀態(tài)”變成“活著狀態(tài)”,3號(hào)和4號(hào)從“活著”變成“死亡”,2號(hào)保持狀態(tài)不變。
?
?
?
4.使用Excel模擬生命游戲
4.1制作流程

4.2打開(kāi)Excel
????打開(kāi)excel,注意是可以運(yùn)行VBA代碼,可以設(shè)置宏的excel。

4.3設(shè)置單元格
將單元格設(shè)置為像素是30x30的單元格,目的是正方形的單元格讓人看著更舒服。先全選所有單元格,接著鼠標(biāo)左鍵點(diǎn)擊拖動(dòng)單元格的邊界即可調(diào)整。

4.4繪制演示區(qū)
繪制生命游戲的演示區(qū)域,劃定邊界,生命只在該區(qū)域內(nèi)演變。

4.5設(shè)置條件格式
為演示區(qū)域設(shè)置條件格式,先全選區(qū)域,再設(shè)置單元格式,1的單元格填充黑色表示活著,0的單元格填充白色表示死亡。

4.6形成雙演示區(qū)域
復(fù)制區(qū)域,形成兩個(gè)演示區(qū)域,因?yàn)楹笃诘牡枰ㄟ^(guò)區(qū)域的復(fù)制粘貼實(shí)現(xiàn)。

4.7編輯公式
?
開(kāi)始利用Excel的公式編寫(xiě)規(guī)則,將單元格分為三個(gè)類(lèi)型,角單元格、邊單元格、內(nèi)部單元格。在右邊演示圖中輸入公式,用左邊的演示圖作為判斷標(biāo)準(zhǔn),分別將相關(guān)的公式羅列如下:


?

4.8編寫(xiě)VBA代碼
開(kāi)始使用VBA實(shí)現(xiàn)迭代功能,編寫(xiě)VBA代碼。

代碼如下:
4.9制作按鈕
制作按鈕,插入圖形,將圖形和宏進(jìn)行關(guān)聯(lián)。
?

4.10自定義迭代次數(shù)
設(shè)置可以自定義的迭代次數(shù)。將迭代次數(shù)填寫(xiě)單元格中,利用代碼讀取該單元格的次數(shù),代碼同上。

繪制初始圖形,設(shè)置迭代次數(shù),點(diǎn)擊運(yùn)行,即可看到運(yùn)行效果。
?
?
?