如何利用python實現生命遊戲

2020-12-17 小短腿花花

英國數學家約翰·何頓·康威在1970年發明了 the game of life,今天番茄加速就來分享下如何利用python實現生命遊戲,規則如下:

每個細胞有兩種狀態 - 存活或死亡

每個細胞與以自身為中心的周圍八格細胞產生互動

當前細胞為存活狀態時,當周圍的存活細胞低於2個時(不包含2個),該細胞變成死亡狀態。(模擬生命數量稀少)

當前細胞為存活狀態時,當周圍有2個或3個存活細胞時,該細胞保持原樣。

當前細胞為存活狀態時,當周圍有超過3個存活細胞時,該細胞變成死亡狀態。(模擬生命數量過多)

當前細胞為死亡狀態時,當周圍有3個存活細胞時,該細胞變成存活狀態。(模擬繁殖)

拿個例子闡述上述狀態,如下種子時代:

[0, 0, 1, 0, 0]

[0, 1, 1, 0, 0]

[0, 0, 1, 1, 0]

[0, 1, 1, 1, 0]

[0, 0, 0, 0, 0]

坐標[0,2]為一個存活的細胞,因為周圍細胞個數為2,所以繁衍後依然存活;

坐標[1,2]的存活細胞,因為周圍有4個存活細胞,所以繁衍後死亡;

坐標[0,1]死亡細胞,因為周圍恰好有3個存活細胞,所以[0,1]處出現生命,

繁衍一代後的,完整圖如下:

[0, 1, 1, 0, 0]

[0, 1, 0, 0, 0]

[0, 0, 0, 0, 0]

[0, 1, 0, 1, 0]

[0, 0, 1, 0, 0]

第二代:

[0, 1, 1, 0, 0]

[0, 1, 1, 0, 0]

[0, 0, 1, 0, 0]

[0, 0, 1, 0, 0]

[0, 0, 1, 0, 0]

...

能到第幾代結束呢?借用 Python 模擬了生命遊戲,整個代碼一共 60 行。

首先生成生命網格:

def get_board(size, alive_cons):

return [[1 if (i, j) in alive_cons else 0

for j in range(size)]

for i in range(size)]

獲得細胞的鄰域:

def get_neighbors(con):

x, y = con

neighbors = [(x + i, y + j)

for i in range(-1, 2)

for j in range(-1, 2)

if not i == j == 0]

return neighbors

判斷下一代是否存活:

def is_alive_con(con, alive_cons):

alive_neighbors = calculate_alive_neighbors(con, alive_cons)

if (alive_neighbors == 3 or

(alive_neighbors == 2 and con in alive_cons)):

return True

return False

生成下一代完整的生命網格:

def new_step(alive_cons):

board = itertools.chain(*map(get_neighbors, alive_cons))

new_board = set([con

for con in board

if is_alive_con(con, alive_cons)])

return list(new_board)

以上就是幾個核心的函數,下面主函數:

def main():

size = 5

board = [(0, 2), (1, 1), (1, 2), (2, 2), (2, 3), (3, 1), (3, 2), (3, 3)]

print_board(get_board(size, board))

for _ in range(10):

board = correct_cons(size, new_step(board))

print_board(get_board(size, board))

終止狀態:所有網格細胞狀態都為0

相關焦點

  • 零基礎學習python,這幾本書少不了
    目前,社會上已經掀起了一波學習python的熱潮,但是很多人由於並沒有python基礎,不知道從哪裡開始學習,小編今天整理了零基礎學習python的一些書籍,希望對大家有所幫助。1.《Python編程快速上手——讓繁瑣工作自動化》這本書致力於教會大家利用Python ,快速高效地完成工作。這本書會一步一步地引導大家完成每個技能的學習,並教你如何利用學到的新技能來實現工作任務的自動化。即使沒有編程基礎,也可以通過這本書的學習,來掌握python的技能,讓自己從繁瑣重複的工作中解脫出來。
  • 如何在Visual Studio開發工具安裝python庫
    那麼,在Visual Studio開發工具中,如何安裝python第三方庫呢?下面利用實例說明:操作步驟:1、打開Visual Studio 2019開發工具,創建python項目打開開發工具,創建python項目2、在項目滑鼠右鍵,添加新建項,然後選擇空python文件
  • 如何安裝python3
    如何安裝python3首先找到python的官網: https://www.python.org/然後點擊Download然後選擇對應的版本,這裡選擇的是windows>跳轉到對應的界面以後,選擇python3.5版本,64位下載即可下載完成以後有一個.exe的可執行文件雙擊這個可執行文件,然後進行選擇安裝。
  • Python一行代碼,能玩這麼多童年的遊戲?
    安裝完之後我們可以使用python -m freegames list來查看所有的遊戲列表貪吃蛇現在我們可以使用一行代碼啟動相關遊戲,比如貪吃蛇snakepython -m freegames.snake
  • 生命遊戲 the Game of Life
    引言 群居性昆蟲是一個生命,魚群、鳥群是一個生命,社會、城市是一個有機體,人類的語言是活的,人類的集體行為也是活的。這些複雜系統是如何設計出來的?
  • 如何用Python實現透視表?
    這麼強大的功能,在Python中怎麼去實現呢?不用擔心,Python的"數據分析小能手"Pandas很貼心地為我們提供了一個快速實現數據透視表功能的方法——pivot_table()。事不宜遲,讓我們趕緊看看如何在Python中實現數據透視表!1.
  • Python視頻教程網課編程零基礎入門數據分析網絡爬蟲全套Python...
    3遊戲循環和鍵盤事件 4精靈和精靈組 5框架搭建 6背景圖像 7敵人飛機 8英雄飛機 9發射子彈以及碰撞檢測 4部分視頻課程 1網絡編程 2多任務 3web伺服器v3.1 4python高級語法v3.1 5mysql資料庫
  • 教你實現一個gif處理軟體(下)
    之前寫過如何實現gif處理工具的案例,演示了效果和分析了實現的步驟,這篇就來講講具體的代碼實現。具有的功能:1.可以一次性選擇多張圖片,選擇後會顯示出第一張圖片的寬和高,默認幀率500。2.轉換界面為python文件代碼利用pyside2-uic將gif.ui轉換成ui_gif.py文件。
  • 如何在Visual Studio創建python文件並運行
    >技術python在Visual Studio開發工具中,創建python項目,根據項目的需要,新建不同的python文件;然後選擇python文件,進行運行。下面利用實例說明:操作步驟:1、打開Visual Studio工具,創建python應用程式
  • 基於python利用AI模型打造在線人臉追蹤系統,實現以及原理講解
    華哥利用炫酷系統在茫茫人海追蹤到了甄子丹的蹤跡。今天我就分享一下我學習製作的在線人臉識別系統的成果,首先我們需要準備一臺帶攝像頭的電腦,成功安裝了python3.5,另外我們還需要安裝人臉識別模型庫,在DOS命令行下利用pip install face_recognition
  • Python如何入門?直接按這個方式玩炸彈超人小遊戲,就能掌握編程
    還在從基礎知識點開始學python嗎?還不如直接玩python小遊戲炸彈超人,跟著詳細教程開始,從不會python到掌握python基礎知識點,並且還有所有源碼,想學不會編程都難。下面講一下開發Python小遊戲炸彈超人的大致步驟(在底部直接拿詳細教程和所有源碼)首先是開發工具Python版本:3.6.4相關模塊:Pygame,以及自帶的模塊然後開始搭建相應所需的環境,安裝python並添加到環境變量,pip安裝需要的相關模塊即可。
  • 0基礎入門Python學習步驟如何安排?
    只有這樣才能朝著目標持續前進,少走彎路,從學習中得到不斷的提升,享受python學習計劃的過程。 雖然目前的程式語言有很多,但是基礎語法上的概念,本質上都是相通的。可以做到一通百通。所以沒有必要為了學哪門語言糾結太多。
  • 如何使用python語言第三方庫獲取CPU信息
    >psutilpythondjango在Visual Studio 2019開發工具中,我們創建python項目,然後新建python文件,安裝psutil第三方庫,接著獲取電腦CPU的相關信息。下面利用實例說明psutil用法以及CPU信息:操作步驟:1、打開Visual Studio 2019開發工具,創建python項目,然後在項目指定文件夾下,新建python文件
  • Blender遊戲引擎的 Python 腳本
    您將學習如何在 Blender 中使用 Python 腳本用腳本調整車輛移動,加速,停車。請記住,汽車只是用作使用 Python 的示例。本教程將教您 Blender 遊戲引擎的 Python 腳本基礎知識,包括通過腳本訪問和更改邏輯信息。即使您對 Python 有所了解,本教程也很容易理解。
  • 如何使用Visual Studio工具創建python項目
    python一般情況下,我們使用Visual Studio進行C#、C++和C語言項目進行開發。隨著工具不斷完善,現在也可以進行python項目開發了。那麼,如何在Visual Studio 2019工具上創建python項目?操作步驟:1、通過快捷方式或電腦開始菜單,雙擊打開Visual Studio 2019工具
  • Python小夥用簡單爬蟲實現成語接龍小遊戲!
    Python實現這個功能非常簡單,當然,這裡我也是寫了個簡單版的,實現了基本功能就好。話不多說,先上乾貨:開發前準備及思路:開發環境:python3.x模塊:requests,time,random,urllib,lxml #除了urllib模塊以外其餘模塊都需要安裝,pip可以解決url:http://chengyu.t086.com/先說一下成語接龍規則:1.接龍的成語的第一個字必須要與前一個成語結尾的字相同
  • Python入門項目,從不會編程到完成這個小遊戲,也就兩天時間
    還在啃書本學python嗎?為什麼不試試用有趣的小遊戲來學編程?自己開發的遊戲,既能活學活用python,又能找回學習的自信。簡單介紹遊戲(完整源碼和教程在底部)今天開發的這款遊戲,名叫八音符,也就是利用聲音控制帶辮子的小黑球不斷前進,就是這樣的:今天主要是做一個低配版的,把用聲音控制小黑球的功能實現。
  • 《小灰教你零基礎學python》-Python入門語言
    電腦(包括手機)由硬體和程序構成:很多硬體 + 很多程序 = 電腦具體硬體和程序如何集成這個咱們不用太了解,這個是計算機設計原理裡面的東西了,咱只需要了解,電腦就是硬體(攝像頭、程式語言有很多,咱們就學簡單強大的python即可。
  • python定時獲取天氣數據並自動發送到郵箱
    自動發送郵件,python幾行代碼來搞定!我們說到如何用python來實現自動發送郵件。這篇文章我們就來談談如何獲取天氣數據,並定時將天氣數據發送到指定的郵箱中?它在python內置模塊的基礎上進行了高度的封裝,從而使得python進行網絡請求時,變得人性化,使用Requests可以輕而易舉地完成瀏覽器可有的任何操作。使用它最重要的一個方法就是get方法,它能獲取到所請求頁面的html信息。
  • python web 部署的那點事
    開發python web的人都知道,我們python是自帶web模塊的,也就是說我們可以不使用其它任何web伺服器,就可以直接訪問我們的web應用,但是實際生產環境我們很少這麼做,這是為什麼呢?生產環境我們又如何部署我們的python項目呢?