資料介紹
描述
之前...
2017 年,我做了一個(gè)名為“人工生命”的項(xiàng)目,該項(xiàng)目使用 8x8 獨(dú)角獸矩陣來(lái)顯示人工生命形式的網(wǎng)格,這些生命形式會(huì)相互繁殖和戰(zhàn)斗。
2022 年,我將項(xiàng)目更新為Artificial Life HD——它使用了 16x16 Unicorn 矩陣以及增強(qiáng)代碼、錯(cuò)誤修復(fù)和一些額外功能。
因此,我們將在 2023 年與 64x32 LED 面板兼容,并通過(guò)人工生命 2 進(jìn)行大量額外的錯(cuò)誤修復(fù)、增強(qiáng)/添加功能和優(yōu)化!
讓我們開(kāi)始吧。
安裝
這可以與Unicorn HAT 、Unicorn HAT HD或大型 LED 面板一起使用。
它還內(nèi)置了一個(gè)Unicorn HAT 模擬器,因此它可以在沒(méi)有 LED 硬件的情況下運(yùn)行。
從我的 GitHub克隆 repo 代碼:
git clone https://github.com/LordofBone/Artificial_Life --recurse-submodules
然后運(yùn)行:
pip install -r requirements.txt
然后到這里安裝 Unicorn HAT 。
對(duì)于此處的Unicorn HAT HD 安裝。
最后,這里是 LED 面板安裝。
通過(guò)我在 RPi OS Bullseye 64 位上找到的 LED 面板安裝,我發(fā)現(xiàn)我還必須安裝 Pillow 并更改 python 的調(diào)度權(quán)限:
pip install Pillow
sudo setcap 'cap_sys_nice=eip' /usr/bin/python3.9
然后可以運(yùn)行模擬:
python artifical_life.py
默認(rèn)情況下,這應(yīng)該會(huì)啟動(dòng)一個(gè) 16x16 的模擬獨(dú)角獸帽子。這與模擬的其他參數(shù)一起可以配置。
您可以通過(guò)設(shè)置來(lái)設(shè)置模擬 HAT 的自定義大?。?/font>
hat_model = "CUSTOM"
unicorn_simulator = True
hat_simulator_or_panel_size = x, y
盡管應(yīng)該注意模擬器中存在一個(gè)錯(cuò)誤,該錯(cuò)誤不允許 x 和 y 值彼此不同。
如果您安裝了 Unicorn HAT,您可以更改參數(shù):
hat_model = "HD"
對(duì)于 Unicorn HD:
hat_model = "HD"
獨(dú)角獸帽子迷你:
hat_model = "MINI"
LED面板:
hat_model = "PANEL"
Unicorn HAT 很可能需要以超級(jí)用戶身份運(yùn)行模擬:
sudo python artificial_life.py
這些也都可以通過(guò) args 傳遞——查看所有可用的 args(下面也提供完整的 args 列表):
python artificial_life.py -h
增強(qiáng)/優(yōu)化
保持像素沉著:
我完全重新設(shè)計(jì)了將生命體寫入屏幕/面板/獨(dú)角獸 HAT 的方式——之前的工作方式是:
- 邏輯循環(huán)運(yùn)行
- 每個(gè)循環(huán)在顯示器上寫入一個(gè)實(shí)體位置以及 RGB 值
- 在循環(huán)結(jié)束時(shí),顯示器立即寫出并顯示所有寫入的位置和 RGB 值
當(dāng)事情運(yùn)行順利時(shí),它工作得很好;但是循環(huán)開(kāi)始運(yùn)行緩慢的運(yùn)動(dòng),即任何低于每秒 10 幀的運(yùn)動(dòng),顯示將變得難以看到每個(gè)單獨(dú)實(shí)體的實(shí)際情況,因?yàn)檎麄€(gè)屏幕會(huì)立即改變。
現(xiàn)在有一個(gè)完全不同的子模塊與主程序一起檢出:Pixel Composer 。
注意:使用 Pixel Composer 更改值時(shí)請(qǐng)小心,它可能會(huì)導(dǎo)致閃光,尤其是在非常明亮的 LED 面板上。
這由現(xiàn)在被寫入包含它們的位置和顏色的“世界空間”字典的實(shí)體起作用(現(xiàn)在保存為 R、G、B 的浮點(diǎn)值而不是 0-255),然后將其復(fù)制到“渲染平面”中' 在 Pixel Composer 中,然后異步運(yùn)行以將渲染平面中當(dāng)前的內(nèi)容顯示到幀緩沖區(qū),然后將其寫出到屏幕。
從本質(zhì)上講,這意味著不必等待整個(gè)過(guò)程循環(huán)完成才顯示出來(lái),每個(gè)生命形式的位置將在顯示上同時(shí)移動(dòng),同時(shí)它們?cè)谒猩问降难h(huán)中移動(dòng)——即使整個(gè)循環(huán)需要 10 秒來(lái)處理所有事情,您仍然能夠清楚地看到生命形式的每一個(gè)動(dòng)作,而不是每一個(gè)都同時(shí)移動(dòng)。
最重要的是,這還允許一些很酷的額外效果,例如運(yùn)動(dòng)模糊、照明和背景著色器,例如雨效果和其他類似的時(shí)髦東西。
還有全屏著色器——我無(wú)意中發(fā)現(xiàn)它允許通過(guò)傳遞一個(gè)數(shù)字來(lái)顯示各種很酷的圖案:
class FullScreenPatternShader(ConfigurableShaderSuper):
def __init__(self, count_number=0, count_number_max=32, count_number_step_up=1, count_number_step_down=1,
addition_shader=True, invert_count=True, shader_colour=(0.5, 0.5, 0.5)):
super().__init__(count_number, count_number_max, count_number_step_up, count_number_step_down, addition_shader,
invert_count, shader_colour)
# found this accidentally; I am not entirely sure how this works, but changing the max number that can be stepped
# to will result in various cool effects as well as plus/minus stepping and whether the stepping will reset
# when maxed or count back the other way
def run_shader(self, pixel):
if self.addition_shader:
self.number_count_step_plus()
else:
self.number_count_step_minus()
pixel_alpha = (self.count_number / self.count_number_max) * self.max_float
shaded_colour = self.blend_colour_alpha(pixel, self.shader_colour, pixel_alpha)
return shaded_colour
通過(guò)更改count_number_max變量和 shader_colour,可以從看起來(lái)像惡魔城游戲背景的靜止列中制作出各種很酷的圖案,或者可以產(chǎn)生看起來(lái)像雨等的移動(dòng)圖案。
還有支柱:
還如前所述 - 它現(xiàn)在使用浮點(diǎn)數(shù)來(lái)表示顏色,這基本上允許進(jìn)行 HDR 渲染;例如光照著色器;僅限于計(jì)算 0-255 范圍內(nèi)的照明效果效果不佳。在此處和此處詳細(xì)了解為什么會(huì)發(fā)生這種情況。我想我的實(shí)現(xiàn)與正確的實(shí)現(xiàn)相比有很大的缺陷和簡(jiǎn)單,但它至少允許更好的顏色/照明模型。
這些浮點(diǎn)值被色調(diào)映射到 0-1 范圍內(nèi),并最終從浮點(diǎn)變?yōu)?RGB,以最終輸出到屏幕/LED。這給了它一些非常漂亮的顏色,并允許單獨(dú)設(shè)置亮度 - 總的來(lái)說(shuō)它看起來(lái)更漂亮。
所有這些設(shè)置都可以修改并添加到 artificial_life.py 代碼本身,覆蓋 rasterizer.py 文件中的類
現(xiàn)在可以按下 Shift + F 來(lái)暫停和取消暫停渲染,而邏輯在后臺(tái)繼續(xù)進(jìn)行。
Shift + G 還將在模擬期間啟用/禁用重力。
Thanos 捕捉現(xiàn)在通過(guò) Shift + T 激活,這是一種隨機(jī)移除棋盤上 50% 生命形式的快速方法。
未來(lái)的迭代將添加更多命令。
它是作為一個(gè)單獨(dú)的子模塊制作的,因?yàn)槲艺J(rèn)為這對(duì)其他項(xiàng)目很有幫助,所以我可能會(huì)在某個(gè)時(shí)候?yàn)榇藛为?dú)寫一篇文章,進(jìn)一步詳細(xì)說(shuō)明和修改,以使其更容易集成到其他項(xiàng)目中。
有一種方法可以繞過(guò) Pixel Composer,通過(guò)將 -ff 參數(shù)傳遞到 artificial_life.py 主代碼或進(jìn)入配置/參數(shù)并設(shè)置:
fixed_function = True
這將運(yùn)行得更快,但看起來(lái)不那么漂亮。一旦它們被處理,它將立即保持生命形式的運(yùn)動(dòng)——然而,不必等待所有生命形式循環(huán)處理。
現(xiàn)在還可以通過(guò)按 Shift + S 顯示當(dāng)前統(tǒng)計(jì)數(shù)據(jù),這也將顯示當(dāng)前模擬的開(kāi)始時(shí)間。
即使在 8x8 Unicorn HAT 上,原始 AL 代碼也可能變得非常緩慢和滯后,通過(guò)一系列優(yōu)化,我能夠添加功能并使其即使在 16x16 板上運(yùn)行也更加流暢。現(xiàn)在已經(jīng)進(jìn)行了進(jìn)一步的優(yōu)化,以允許在 64x32 板上更快地運(yùn)行并具有新功能。
一個(gè)主要的優(yōu)化是改變碰撞/生成代碼的工作方式,以前這是通過(guò)以下方式工作的:
- 檢測(cè)到與另一個(gè)生命形式/顯示器邊緣的碰撞
- 隨機(jī)選擇的新方向
- 檢查這個(gè)新的碰撞方向
- 重復(fù)直到找到新的無(wú)碰撞方向或嘗試所有方向
這行得通,但它意味著處理可能會(huì)在一個(gè)生命形式上保留相當(dāng)長(zhǎng)的一段時(shí)間,因?yàn)樗兄饕较蚨急凰阉饕詫ふ乙粋€(gè)可以移動(dòng)到的自由位置。當(dāng)生命體聚集在一個(gè)角落里都在尋找周圍的無(wú)碰撞區(qū)域時(shí),這會(huì)導(dǎo)致一些延遲。這也類似于尋找新的位置來(lái)產(chǎn)生新的生命體。
所以我改變了它,以便將碰撞重新檢查推送到循環(huán)的下一次迭代。這樣一來(lái),無(wú)論生命形式如何聚集,它都不必在每個(gè)循環(huán)中檢查它周圍的所有方向,這會(huì)導(dǎo)致速度減慢,因?yàn)槊總€(gè)生命形式都會(huì)在屏幕上的所有生命形式的循環(huán)中占用處理時(shí)間。
所以現(xiàn)在它像這樣工作:
- 基于當(dāng)前運(yùn)動(dòng)的碰撞檢查
- 如果空閑位置,移動(dòng)到那個(gè)位置
- 如果不是空閑位置,選擇一個(gè)新的方向,下次循環(huán)到達(dá)這個(gè)生命體時(shí)將處理,并繼續(xù)處理隊(duì)列中的下一個(gè)生命體
這意味著循環(huán)將繼續(xù)并且其他生命形式將被處理,從而很好地加快速度并導(dǎo)致更平滑的運(yùn)動(dòng),同時(shí)還保持生命形式碰撞和彈開(kāi)屏幕/其他物體邊緣的能力。反彈功能在功能上是相同的,而且運(yùn)行速度更快。涼爽的。
此外,我還使 DNA 混沌代碼更加高效,以便在繁殖另一種生命形式時(shí),來(lái)自任何一種生命形式的 DNA 仍然是父生命形式的混合體,但希望運(yùn)行速度更快的代碼,從而減少非常繁忙區(qū)域的滯后。
我還嘗試將盡可能多的代碼移動(dòng)到一個(gè)函數(shù)“進(jìn)程”中,以嘗試避免函數(shù)調(diào)用的時(shí)間損失——我相信函數(shù)調(diào)用可以加起來(lái),并且在這樣的程序中,任何時(shí)候都可以進(jìn)行生命形式處理越快越好——雖然我對(duì)這件事可能是錯(cuò)的,但到目前為止,連同其他優(yōu)化,這讓事情運(yùn)行得更好;特別是對(duì)于 64x32 板,它可以完全填充 2048 種生命形式,所有這些都需要處理。
我還刪除了允許生命形式相互堆疊的設(shè)置(因此每個(gè)像素有多個(gè)生命形式),因?yàn)檫@既昂貴又緩慢,但如果我能找到更優(yōu)化的方法,我可能會(huì)返回此功能。
Minecraft 模式也已被刪除,因?yàn)?MC 似乎不再與 Raspberry Pi OS 打包在一起,即便如此,該功能仍需要大量工作和改進(jìn),這是未來(lái)將要研究的內(nèi)容。
我還添加了:
- 可開(kāi)采資源,在棋盤上被視為紅色方塊,包含大量可以開(kāi)采的“資源”,從中開(kāi)采的生命體可以保留資源并用它們建造城墻
- 可以由生命形式建造的墻將保持靜止,除非足夠強(qiáng)大的生命形式將它們擊倒并獲得資源,這些墻也需要資源來(lái)建造;這樣生命形式就可以推倒墻壁并從收集到的資源中建造新的墻壁。如果它們不夠堅(jiān)固,它們會(huì)從墻上彈開(kāi)
- 添加了額外的動(dòng)量和彈跳力,因此當(dāng)重力打開(kāi)并且生命形式從某物上反彈時(shí),動(dòng)量將被考慮在內(nèi),動(dòng)量也會(huì)從一種生命形式轉(zhuǎn)移到另一種
- 此外,我還對(duì)生命形式在嘗試改變方向之前可以移動(dòng)多遠(yuǎn)進(jìn)行了一些更改,以確保它們可以在棋盤空間內(nèi)移動(dòng),而不是僅僅不斷地從墻上彈開(kāi),因?yàn)樗鼈円苿?dòng)變量的時(shí)間設(shè)置得太高了
- 輻射,影響生命形式的生存時(shí)間以及繁殖時(shí)隨機(jī) DNA 變化的機(jī)會(huì)
- 生命形式繁殖的能力,然后等待它們周圍的自由空間,所以你可以讓一個(gè)人在沒(méi)有空間的情況下產(chǎn)生新的生命形式,但是當(dāng)有自由空間時(shí),產(chǎn)生后代;這也適用于墻體建筑
- 現(xiàn)在有一個(gè) BaseEntity 類,生命形式、資源和墻壁用作超類;這意味著將來(lái)當(dāng)我向模擬中添加更多東西時(shí),我可以使用這個(gè)超類并在子類中必要時(shí)覆蓋它
- 如上所述,添加了鍵盤命令,例如能夠引起 Thanos Snap 和隨機(jī)擦除棋盤上 50% 的生命形式(由于 Pixel Composer,還具有很酷的淡入淡出效果)。還有能力提??高/降低輻射、啟用/禁用重力、凍結(jié)渲染和顯示當(dāng)前統(tǒng)計(jì)數(shù)據(jù)
- 有一個(gè)重試功能,以便當(dāng)所有生命形式都過(guò)期時(shí)模擬重新啟動(dòng) - 我現(xiàn)在添加了一個(gè)會(huì)話開(kāi)始日期時(shí)間戳,可以在統(tǒng)計(jì)數(shù)據(jù)中看到。因此,您可以將模擬打開(kāi)一段時(shí)間然后再回來(lái),查看當(dāng)前會(huì)話持續(xù)了多長(zhǎng)時(shí)間以及它是否仍然是您開(kāi)始的原始會(huì)話
- 在我嘗試保存/加載模擬的當(dāng)前狀態(tài)的那一刻,代碼中有一些 WIP 的東西,但事實(shí)證明這很耗時(shí)才能正常工作;這很可能會(huì)添加到下一個(gè)版本中,但請(qǐng)隨時(shí)查看現(xiàn)有代碼
- 一種記憶系統(tǒng),生命形式將在其中繁殖/挖掘/贏得戰(zhàn)斗并記住發(fā)生的位置并嘗試返回到該點(diǎn)。如果在該位置發(fā)生另一個(gè)事件,它將在該點(diǎn)的記憶數(shù)量上加 1,如果沒(méi)有發(fā)生,它將在該點(diǎn)的記憶數(shù)量上減 1。他們總會(huì)回到記憶最積極的那個(gè)點(diǎn)。這是為了給生命體一些更有趣的運(yùn)動(dòng)行為。記憶也會(huì)傳遞給下一代生命體,除非他們‘叛逆’,然后他們從一個(gè)干凈的記憶開(kāi)始;這與“健忘”一起由生命形式的 DNA 決定
- 還有一個(gè)'bad memories' dict 變量,目前未使用,但未來(lái)會(huì)有一個(gè)系統(tǒng),生命形式將嘗試避開(kāi)發(fā)生過(guò)不好事情的區(qū)域
- 將 HAT 控制器和 LED 面板控制器代碼從屏幕輸出代碼分離到單獨(dú)的模塊中——這是為了允許更多的模塊化添加額外的屏幕/LED 顯示器,而無(wú)需更改主代碼/Pixel Composer 中的任何內(nèi)容,并且只有一個(gè)在屏幕控制器中實(shí)例化不同類的小改動(dòng)
新的輻射系統(tǒng)在模擬中增加了另一層,輻射設(shè)置可以通過(guò) args 或通過(guò) parameters.py 文件設(shè)置:
initial_dna_chaos_chance = 10
initial_radiation = 0
max_radiation = 90
change_of_base_radiation_chance = 0.001
radiation_dmg_multiplier = 1000
radiation_change = True
DNA 混沌變量設(shè)置在傳遞給生命形式后代時(shí)存在的 3 個(gè) DNA 片段中隨機(jī)創(chuàng)建新 DNA 的幾率百分比。這現(xiàn)在也受到新輻射水平的影響,輻射越高,隨機(jī) DNA 傳遞的機(jī)會(huì)就越高——基于這個(gè)初始數(shù)字和輻射水平的函數(shù)。
可以設(shè)置最大和初始輻射 - 如果輻射變化處于活動(dòng)狀態(tài),數(shù)字將在這兩個(gè)設(shè)置之間隨機(jī)選擇。在模擬過(guò)程中,可以分別使用 Shift+R 和 R 增加和減少最大輻射。
如果隨機(jī)更改輻射設(shè)置未打開(kāi),則這些鍵將調(diào)整當(dāng)前輻射而不是最大值 - 在這兩種設(shè)置下,當(dāng)前輻射將在曲線內(nèi)上下移動(dòng),根據(jù)當(dāng)前水平給出一點(diǎn)點(diǎn)變化。
更改設(shè)置受更改機(jī)會(huì)變量的影響,在處理所有生命形式的每個(gè)循環(huán)中,輻射都會(huì)發(fā)生變化(保持在最大輻射變量設(shè)置范圍內(nèi))的可能性百分比。
傷害倍數(shù)設(shè)置會(huì)影響輻射對(duì)生命形式造成的傷害程度;每次處理生命形式時(shí),都會(huì)進(jìn)行一次計(jì)算 - 沒(méi)有輻射,生命形式的生命有 1 次起飛。但是,對(duì)于輻射,可以進(jìn)行以下計(jì)算:
self.time_to_live_count -= percentage(current_session.radiation * args.radiation_dmg_multi, 1)
其中當(dāng)前輻射乘以輻射傷害乘數(shù)并用作正常 1 傷害的百分比。例如:100 * 1000 的輻射導(dǎo)致百分比為 100000,默認(rèn)百分比為 1000 - 導(dǎo)致生命形式受到的傷害。
使用以下參數(shù),可以在首次運(yùn)行時(shí)在隨機(jī)位置生成許多墻和資源,以及可供生命形式開(kāi)采的資源——為它們四處導(dǎo)航添加更多有趣的環(huán)境。
在這里你可以看到“采礦設(shè)施”,那里的生命形式群體記得采礦事件發(fā)生的地點(diǎn),并試圖回到那個(gè)地方;所以你會(huì)看到他們成群結(jié)隊(duì)地坐在采礦資源周圍,看到其他一些人在建造圍墻周圍飛來(lái)飛去。
還有一個(gè)設(shè)置可以讓生命形式建造自己的墻以及一個(gè)倍增器——設(shè)置越高,生命形式建造墻的頻率就越高。
walls = 0
resources = 0
entities_build_walls = True
wall_chance_multiplier = 512
An
模擬開(kāi)始時(shí)生成的一些墻的示例:
還有一整套參數(shù),可以編輯以更改模擬中的各種內(nèi)容,這些參數(shù)位于 config/parameters.py 下:
max_trait_number = 1000000
initial_lifeforms_count = 10
population_limit = 50
max_enemy_factor = 8
logging_level = 'INFO'
initial_dna_chaos_chance = 10
initial_radiation = 0
max_radiation = 90
change_of_base_radiation_chance = 0.001
radiation_dmg_multiplier = 1000
retries_on = False
led_brightness = 0.3
hat_model = "HD"
hat_simulator_or_panel_size = 8, 8
hat_buffer_refresh_rate = 60
refresh_logic_link = True
fixed_function = False
unicorn_simulator = False
radiation_change = True
gravity_on = False
trails_on = False
combine_mode = True
walls = 0
resources = 0
entities_build_walls = True
wall_chance_multiplier = 512
所有這些也可以通過(guò)將 args 傳遞給程序來(lái)設(shè)置:
-m MAX_NUM, --max-num MAX_NUM
Maximum number possible for any entity traits
-ilc LIFE_FORM_TOTAL, --initial-lifeforms-count LIFE_FORM_TOTAL
Number of lifeforms to start with
-s LOOP_SPEED, --refresh-rate LOOP_SPEED
The refresh rate for the buffer processing, also sets
a maximum speed for the main loop processing, if sync
is enabled (this is to prevent the display falling
behind the logic loop)
-p POP_LIMIT, --population-limit POP_LIMIT
Limit of the population at any one time
-me MAX_ENEMY_FACTOR, --max-enemy-factor MAX_ENEMY_FACTOR
Factor that calculates into the maximum breed
threshold of an entity
-dc DNA_CHAOS_CHANCE, --dna-chaos DNA_CHAOS_CHANCE
Percentage chance of random DNA upon breeding of
entities
-shs CUSTOM_SIZE_SIMULATOR [CUSTOM_SIZE_SIMULATOR ...], --simulator-hat-size CUSTOM_SIZE_SIMULATOR [CUSTOM_SIZE_SIMULATOR ...]
Size of the simulator HAT in pixels; to use pass in
'-shs 16 16' for 16x16 pixels (x and y)
-c, --combine-mode Enables life forms to combine into bigger ones
-tr, --trails Stops the HAT from being cleared, resulting in trails
of entities
-g, --gravity Gravity enabled, still entities will fall to the floor
-rc, --radiation-change
Whether to adjust radiation levels across the
simulation or not
-w WALL_NUMBER, --walls WALL_NUMBER
Number of walls to randomly spawn that will block
entities
-rs RESOURCES_NUMBER, --resources RESOURCES_NUMBER
Number of resources to begin with that entities can
mine
-r RADIATION, --radiation RADIATION
Radiation enabled, will increase random mutation
chance and damage entities
-mr MAX_RADIATION, --max-radiation MAX_RADIATION
Maximum radiation level possible
-rm RADIATION_DMG_MULTI, --radiation-multi RADIATION_DMG_MULTI
Maximum radiation level possible
-rbc RADIATION_BASE_CHANGE_CHANCE, --radiation-base-change RADIATION_BASE_CHANGE_CHANCE
The percentage chance that the base radiation level
will change randomly.
-be, --building-entities
Whether lifeforms can build static blocks on the board
-wc WALL_CHANCE_MULTIPLIER, --wall-chance WALL_CHANCE_MULTIPLIER
Whether lifeforms can build static blocks on the board
-rt, --retry Whether the loop will automatically restart upon the
expiry of all entities
-sim, --unicorn-hat-sim
Whether to use the Unicorn HAT simulator or not
-hm {SD,HD,MINI,PANEL,CUSTOM}, --hat-model {SD,HD,MINI,PANEL,CUSTOM}
What type of HAT the program is using. CUSTOM only
works with Unicorn HAT Simulator
-l {CRITICAL,ERROR,WARNING,INFO,DEBUG,NOTSET}, --log-level {CRITICAL,ERROR,WARNING,INFO,DEBUG,NOTSET}
Logging level
-sl, --sync-logic Whether to sync the logic loop to the refresh rate of
the screen
-ff, --fixed-function
Whether to bypass pixel composer and use fixed
function for drawing (faster, less pretty)
允許完全自定義體驗(yàn)和更輕松地分發(fā)代碼,而無(wú)需傳遞任何參數(shù),同時(shí)還允許在必要時(shí)通過(guò) args 快速命令行級(jí)別調(diào)整。
更有趣的運(yùn)動(dòng)
隨著新的記憶系統(tǒng)的到位導(dǎo)致生命形式返回“獎(jiǎng)勵(lì)區(qū)域”,運(yùn)動(dòng)變得更加多樣化,而不僅僅是最終變成半可預(yù)測(cè)的結(jié)束狀態(tài)的隨機(jī)模式,生命形式現(xiàn)在移動(dòng)并以真正出乎意料的方式重新安排自己方法。
撞墻
當(dāng)開(kāi)始模擬有墻的地方時(shí),它可以真正改變生命形式的移動(dòng)位置,并可以形成單獨(dú)的區(qū)域,在那里它們被隔離或必須在結(jié)構(gòu)周圍導(dǎo)航。
輻射 23
輻射系統(tǒng)為生命形式提供了另一個(gè)可選級(jí)別,因此現(xiàn)在隨著輻射影響 DNA 的傳遞以及每種生命形式的壽命,模擬比以前更難預(yù)測(cè)。
?
- 使用8x8 LED矩陣制作Magic Eyes
- 如何將字節(jié)發(fā)送到8x8 LED矩陣
- Arduino趕上節(jié)拍8x8 LED矩陣
- 8X8矩陣LED蛇游戲(HTML5 Web Socket)
- 帶有74HC138芯片的五個(gè)矩陣(8x8)鍵盤
- 使用8x8紅/綠LED矩陣構(gòu)建的蛇游戲
- 使用8x8 紅/綠LED矩陣構(gòu)建的突圍游戲
- 8片菊花鏈?zhǔn)絎S2812B 8x8 RGB LED矩陣開(kāi)源
- 行列掃描DIY 8x8 LED矩陣
- 數(shù)碼管順序顯示和8x8點(diǎn)陣及矩陣鍵盤的數(shù)據(jù)庫(kù)資料免費(fèi)下載 6次下載
- 如何使用51單片機(jī)實(shí)現(xiàn)8x8點(diǎn)陣顯示的程序免費(fèi)下載
- 8X8矩陣燈的介紹和C語(yǔ)言源代碼的詳細(xì)資料免費(fèi)下載 24次下載
- 8X8點(diǎn)陣LED顯示屏字模提取軟件(測(cè)試版) 0次下載
- 獨(dú)角獸FPV穿越機(jī)架說(shuō)明書 0次下載
- TEC6122共陰極8X8段LED數(shù)碼管(8X8 點(diǎn)陣)顯示
- LED數(shù)碼管顯示原理詳解 5423次閱讀
- led點(diǎn)陣8×8滾動(dòng)顯示原理_led點(diǎn)陣屏編程 2.2w次閱讀
- 使用單片機(jī)實(shí)現(xiàn)8X8點(diǎn)陣LED顯示技術(shù)的資料說(shuō)明 6307次閱讀
- 使用8X8點(diǎn)陣LED顯示數(shù)字0到9的設(shè)計(jì)說(shuō)明 2.4w次閱讀
- 單片機(jī)點(diǎn)陣式LED簡(jiǎn)單圖形顯示技術(shù)的實(shí)驗(yàn)資料概述 3595次閱讀
- dfrobot8x8 RGB LED Matrix 點(diǎn)陣模塊簡(jiǎn)介 4093次閱讀
- 微雪電子4x4矩陣式按鍵模塊小鍵盤簡(jiǎn)介 2777次閱讀
- 基于MAX7219芯片的LED數(shù)碼顯示電路設(shè)計(jì) 3197次閱讀
- 制作一個(gè)8X8X8光立方的詳細(xì)資料和程序概述 2.2w次閱讀
- 2019年中國(guó)人工智能產(chǎn)業(yè)準(zhǔn)獨(dú)角獸行業(yè)排行榜 1764次閱讀
- AT89S51單片機(jī)對(duì)8X8點(diǎn)陣LED的控制設(shè)計(jì) 4498次閱讀
- 利用Arduino制作8×10 LED矩陣 8489次閱讀
- 一種用 74hc138 和 74hc595 驅(qū)動(dòng) 8x8 點(diǎn)陣顯示技術(shù) 1w次閱讀
- 2017獨(dú)角獸名單第一竟是它_2017獨(dú)角獸企業(yè)排名預(yù)覽 1.2w次閱讀
- 單片機(jī)8x8矩陣鍵盤原理說(shuō)明 2.5w次閱讀
下載排行
本周
- 1山景DSP芯片AP8248A2數(shù)據(jù)手冊(cè)
- 1.06 MB | 532次下載 | 免費(fèi)
- 2RK3399完整板原理圖(支持平板,盒子VR)
- 3.28 MB | 339次下載 | 免費(fèi)
- 3TC358743XBG評(píng)估板參考手冊(cè)
- 1.36 MB | 330次下載 | 免費(fèi)
- 4DFM軟件使用教程
- 0.84 MB | 295次下載 | 免費(fèi)
- 5元宇宙深度解析—未來(lái)的未來(lái)-風(fēng)口還是泡沫
- 6.40 MB | 227次下載 | 免費(fèi)
- 6迪文DGUS開(kāi)發(fā)指南
- 31.67 MB | 194次下載 | 免費(fèi)
- 7元宇宙底層硬件系列報(bào)告
- 13.42 MB | 182次下載 | 免費(fèi)
- 8FP5207XR-G1中文應(yīng)用手冊(cè)
- 1.09 MB | 178次下載 | 免費(fèi)
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 2555集成電路應(yīng)用800例(新編版)
- 0.00 MB | 33566次下載 | 免費(fèi)
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費(fèi)
- 4開(kāi)關(guān)電源設(shè)計(jì)實(shí)例指南
- 未知 | 21549次下載 | 免費(fèi)
- 5電氣工程師手冊(cè)免費(fèi)下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費(fèi)
- 6數(shù)字電路基礎(chǔ)pdf(下載)
- 未知 | 13750次下載 | 免費(fèi)
- 7電子制作實(shí)例集錦 下載
- 未知 | 8113次下載 | 免費(fèi)
- 8《LED驅(qū)動(dòng)電路設(shè)計(jì)》 溫德?tīng)栔?/a>
- 0.00 MB | 6656次下載 | 免費(fèi)
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費(fèi)
- 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
- 78.1 MB | 537798次下載 | 免費(fèi)
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420027次下載 | 免費(fèi)
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費(fèi)
- 6電路仿真軟件multisim 10.0免費(fèi)下載
- 340992 | 191187次下載 | 免費(fèi)
- 7十天學(xué)會(huì)AVR單片機(jī)與C語(yǔ)言視頻教程 下載
- 158M | 183279次下載 | 免費(fèi)
- 8proe5.0野火版下載(中文版免費(fèi)下載)
- 未知 | 138040次下載 | 免費(fèi)
評(píng)論
查看更多