JavaScript 模擬一維康威宇宙(2020年8月21日)

制作背景
大一結(jié)束了,疫情還沒有結(jié)束,暑假在家里呆著,學(xué)習(xí)了html,css,還有一點點的JavaScript,以前寫過一個python版本的一維康威宇宙的程序,現(xiàn)在想到既然js這么方便,可視化渲染很輕松就能做到,為什么不用js來寫一個呢?已經(jīng)有了python基礎(chǔ)的我感覺直接用js來寫應(yīng)該也不會太難,先用python的思路做,js對應(yīng)不會的就直接從網(wǎng)上搜就可以,于是我就做了一個。(未參考任何其他相關(guān)康威宇宙的程序代碼,純自己寫的)
相關(guān)介紹
康威宇宙其實是二維的,我簡化成了一維。對于原版康威宇宙,可以看 https://zhuanlan.zhihu.com/p/45026142
這個一維的康威宇宙就是:在一個一維的宇宙中,有一堆細胞排列在這個宇宙所在的直線上,有點細胞是活細胞,有的細胞是死細胞。每過一個時刻,整個宇宙就會變化一次。怎么變化呢?規(guī)則是這樣的:
就是遍歷判斷每一個細胞,每個細胞會根據(jù)周圍四個細胞的狀態(tài)來改變自己接下來的狀態(tài),(周圍四個細胞是指:自己左邊的左邊,左邊,右邊,右邊的右邊,一共四個鄰居細胞),這樣下來,宇宙中的每一個死細胞可能會變成活細胞,每一個活細胞也可能會變成死細胞。具體判斷規(guī)則是這樣的:
對于活細胞:如果周圍四個細胞的活細胞數(shù)量在 [1, 2] 內(nèi),那么該活細胞在下一時刻繼續(xù)存活,否則因為擁擠或者孤獨而死亡。
對于死細胞:如果周圍四個細胞的活細胞數(shù)量在 [2, 3] 內(nèi),那么該死細胞在下一時刻復(fù)活,否則繼續(xù)保持死亡狀態(tài)。
遍歷的順序不影響結(jié)果
效果截圖

源代碼
額外發(fā)現(xiàn)
修改上面程序中的這四個數(shù)據(jù),會改變宇宙的規(guī)則。下面的發(fā)現(xiàn)是 2020年2月25日 做python的對應(yīng)的程序的時候發(fā)現(xiàn)的。
var live_min = 1
var live_max = 2
var birth_min = 2
var birth_max = 3
當(dāng)前宇宙的規(guī)則是 1223 把每一時刻的狀態(tài)從上到下打印在屏幕上,就會呈現(xiàn)大片大片的謝爾賓斯基三角形的樣子,但是如果把四個變量依次修改成以下四個數(shù),就會有不同的呈現(xiàn)效果。(初始狀態(tài)是隨機的,死細胞和活細胞出現(xiàn)的概率均為50%)


1223:謝爾賓斯基三角形
1111:稀碎的謝爾賓斯基三角 + 大塊豎向條
1212:內(nèi)部穿插豎向條的謝爾賓斯基三角 + 大塊豎向條
1314:壓扁的謝爾賓斯基三角
1313:像履帶一樣整齊的紋理
2323:車印子
0000:被豎線切斷的橫線
0101:橫向線
0202:橫向線穿插像網(wǎng)
1413:幾條黑豎線
1414:全白
2424:全白
1234:幾條白豎線
1211:含有細微動態(tài)的二維碼
1222:含有鋸齒狀動態(tài)的二維碼
2311:二維碼 + 花式輪胎印
2322:二維碼 + 自行車印
1233:若干白豎線
1244:含有細微動態(tài)的很多白豎線
2222:白色各種自行車印
3434:頂端流下來一點白油,剩下全黑
3333:頂端流下來一點點白油,剩下全黑
4444:頂端流下來一點點點白油,剩下全黑