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