摘要:當(dāng)前細(xì)胞為存活狀態(tài)時,當(dāng)周圍有個以上的存活細(xì)胞時,該細(xì)胞變成死亡狀態(tài)??低螒虻淖杂捎辛撕诵牡乃惴ㄓ螒蛞?guī)則,康威生命就是一個具有生命的自由游戲。文件導(dǎo)出導(dǎo)入當(dāng)然加了擴展功能,保存自己喜歡的細(xì)胞自動機成文件。
細(xì)胞自動機
備注:文末有自己用Javascript簡單實現(xiàn)的網(wǎng)頁版細(xì)胞自動機(還挺好玩)
什么是細(xì)胞自動機細(xì)胞自動機(英語:Cellular automaton),又稱格狀自動機、元胞自動機,它是由無限個有規(guī)律、堅硬的方格組成,每格均處于一種有限狀態(tài)。每格于t時的態(tài)由t-1時的一集有限格(這集叫那格的鄰域)的態(tài)決定。每一格的“鄰居”都是已被固定的。每次演進(jìn)時,每格均遵從同一規(guī)矩一齊演進(jìn)。
當(dāng)然這個細(xì)胞自動機有一個游戲?qū)崿F(xiàn) ------康威生命游戲(英語:Conway"s Game of Life)
康威生命游戲規(guī)則生命游戲中,對于任意細(xì)胞,規(guī)則如下:
每個細(xì)胞有兩種狀態(tài)-存活或死亡,每個細(xì)胞與以自身為中心的周圍八格細(xì)胞產(chǎn)生互動。(如圖,黑色為存活,白色為死亡)
當(dāng)前細(xì)胞為存活狀態(tài)時,當(dāng)周圍低于2個(不包含2個)存活細(xì)胞時, 該細(xì)胞變成死亡狀態(tài)。(模擬生命數(shù)量稀少)
當(dāng)前細(xì)胞為存活狀態(tài)時,當(dāng)周圍有2個或3個存活細(xì)胞時, 該細(xì)胞保持原樣。
當(dāng)前細(xì)胞為存活狀態(tài)時,當(dāng)周圍有3個以上的存活細(xì)胞時,該細(xì)胞變成死亡狀態(tài)。(模擬生命數(shù)量過多)
當(dāng)前細(xì)胞為死亡狀態(tài)時,當(dāng)周圍有3個存活細(xì)胞時,該細(xì)胞變成存活狀態(tài)。 (模擬繁殖)
可以把最初的細(xì)胞結(jié)構(gòu)定義為種子,當(dāng)所有在種子中的細(xì)胞同時被以上規(guī)則處理后, 可以得到第一代細(xì)胞圖。按規(guī)則繼續(xù)處理當(dāng)前的細(xì)胞圖,可以得到下一代的細(xì)胞圖,周而復(fù)始。
康威生命游戲的自由有了核心的算法(游戲規(guī)則),康威生命就是一個具有生命的自由游戲。你可以在游戲中創(chuàng)造出自己的細(xì)胞世界。周而復(fù)始。
自己實現(xiàn)的一個生命游戲生命游戲其實并不是很復(fù)雜,自己實現(xiàn)一個還是挺好玩的。所以自己就用Vue實現(xiàn)了一個小小的生命游戲
核心思想
下一步要做什么,生命游戲最重要就是下一步,不管游戲規(guī)則是如何,下一步狀態(tài)是這個游戲發(fā)展的動力。
function nextStep(map) { let newMap; //@TODO對newMap進(jìn)行核心算法的編寫 return newMap; }
此函數(shù)就是游戲的生命,將游戲規(guī)則編寫進(jìn)這個函數(shù),Vue只負(fù)責(zé)渲染這個newMap就好了。
?
所以我們有以下函數(shù)
function nextStep(map) { let new_map = Array(52).fill(Array(52).fill(0)).map((i) => i.map((j) => 0)); let countAlive = 0; for (let i = 1; i < 51; i++) { for (let j = 1; j < 51; j++) { countAlive = map[i + 1][j] + map[i - 1][j] + map[i][j + 1] + map[i][j - 1] + map[i + 1][j + 1] + map[i + 1][j - 1] + map[i - 1][j + 1] + map[i - 1][j - 1]; if (map[i][j] === 0 && countAlive < 3) { new_map[i][j] = 0; } if (map[i][j] === 1 && 2 <= countAlive && countAlive <= 3) { new_map[i][j] = 1; } if (map[i][j] === 1 && (countAlive > 3 || countAlive < 2)) { new_map[i][j] = 0; } if (map[i][j] == 0 && countAlive === 3) { new_map[i][j] = 1; } countAlive = 0; } } return new_map; }
?
地圖擴展,我們的Map默認(rèn)定了一個50*50的二位數(shù)組,可是考慮到邊界對細(xì)胞算法影響,我們擴展地圖,將地圖作為52*52的二位數(shù)組。這樣然這個50*50的二位數(shù)組最外面包多一層,看控制邊界對細(xì)胞算法影響。細(xì)胞只在內(nèi)層50*50數(shù)組內(nèi)繁衍。
?
let new_map = Array(52).fill(Array(52).fill(0)).map((i) => i.map((j) => 0));
?
文件導(dǎo)出導(dǎo)入 當(dāng)然加了擴展功能,保存自己喜歡的細(xì)胞自動機成文件。
速度的調(diào)整 擴展功能,調(diào)整下一步的速度。
實現(xiàn)的效果 Gayhub源代碼,喜歡就給個Star戳=>>>>>>>>>>細(xì)胞自動機
最新版本的細(xì)胞自動機用了koa2進(jìn)行了重構(gòu)噢!
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/81375.html
摘要:生命游戲,數(shù)學(xué)家發(fā)明的一個游戲,又稱康威生命演化,生命棋,細(xì)胞自動機??低性S多好玩有趣的發(fā)明,最廣為人知的一個是外觀數(shù)列,這里不多說,另一個就是生命游戲。生命游戲模擬的是二維平面上生命的演化過程。 生命游戲,數(shù)學(xué)家 John Conway 發(fā)明的一個游戲,又稱康威生命演化,生命棋,細(xì)胞自動機。 康威有許多好玩有趣的發(fā)明,最廣為人知的一個是外觀數(shù)列(Look-and-Say),這里不多...
摘要:生命游戲規(guī)則生命游戲中,對于任意細(xì)胞每個細(xì)胞有兩種狀態(tài)存活或死亡。每個細(xì)胞與以自身為中心的周圍八格細(xì)胞產(chǎn)生互動。繁衍函數(shù)死亡函數(shù)生存和死亡函數(shù),由函數(shù)調(diào)用。 生命游...
摘要:地址是主要用到了來畫,實現(xiàn)很簡單,分享如下一個圓,中心點坐標(biāo),半徑給自己綁定一個點擊事件,刪除自己,創(chuàng)建四個新圓,中心點位置分別是當(dāng)前半徑四種組合,半徑設(shè)為一半 地址是http://codepen.io/fishenal/full/EDxGL 主要用到了raphael.js來畫svg,實現(xiàn)很簡單,分享如下 var paper = Raphael(0, 0, 1000, 1000) ...
摘要:作者微信公眾號的皮卡丘歡迎大家搜索關(guān)注知乎機器學(xué)習(xí)美顏簡單品讀小說實現(xiàn)顏值預(yù)測預(yù)測比賽結(jié)果制作且版飛機大戰(zhàn)實現(xiàn)簡單的換臉術(shù)遺傳算法擬合圖像實現(xiàn)貓臉檢測分析個人音樂收藏垃圾郵件識別深度學(xué)習(xí)強化學(xué)習(xí)玩破解游戲?qū)崿F(xiàn)簡單的機器翻譯模型學(xué)寫作實現(xiàn)文本 作者:Charles微信公眾號:Charles的皮卡丘(歡迎大家搜索關(guān)注)知乎:https://zhuanlan.zhihu.com/p/... ...
閱讀 1373·2021-11-24 09:39
閱讀 1630·2021-09-07 09:59
閱讀 3545·2019-08-30 15:54
閱讀 2534·2019-08-30 11:00
閱讀 2740·2019-08-29 15:06
閱讀 2217·2019-08-26 13:52
閱讀 491·2019-08-26 13:24
閱讀 2573·2019-08-26 12:20