亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Python生命游戲實現原理及過程解析(附源代碼)

 更新時間:2019年08月01日 11:39:34   作者:Pleiades  
這篇文章主要介紹了Python生命游戲實現原理及過程解析(附源代碼),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

1. 生命游戲是什么

生命游戲是英國數學家約翰·何頓·康威在1970年發(fā)明的細胞自動機。它包括一個二維矩形世界,這個世界中的每個方格居住著一個活著的或死了的細胞。一個細胞在下一個時刻生死取決于相鄰八個方格中活著的或死了的細胞的數量。如果相鄰方格活著的細胞數量過多,這個細胞會因為資源匱乏而在下一個時刻死去;相反,如果周圍活細胞過少,這個細胞會因太孤單而死去。

規(guī)則看起來很簡單,但卻能演繹出無窮無盡的內容。

滑翔者:每4個回合"它"會向右下角走一格。雖然細胞早就是不同的細胞了,但它能保持原本的形態(tài)。

輕量級飛船:它的周期是4,每2個回合會向右邊走一格。

脈沖星:它的周期為3,看起來像一顆周期爆發(fā)的星星。

更復雜的圖案。

來體會一下這些作品的腦洞以及震撼:

史詩般的生命游戲 http://www.iqiyi.com/w_19rsq435c9.html

用生命游戲實現生命游戲:http://www.bilibili.com/video/av616329/index.html

2. Console版:一個簡單的Python實現

生命游戲的規(guī)則其實很簡單。我們可以把計算機中的宇宙想象成是一堆方格子構成的封閉空間,尺寸為N的空間就有N*N個格子。

而每一個格子都可以看成是一個生命體,每個生命都有生和死兩種狀態(tài),如果該格子生就顯示藍色,死則顯示白色。每一個格子旁邊都有鄰居格子存在,如果我們把3*3的9個格子構成的正方形看成一個基本單位的話,那么這個正方形中心的格子的鄰居就是它旁邊的8個格子。

每個格子的生死遵循下面的原則:

1. 如果一個細胞周圍有3個細胞為生(一個細胞周圍共有8個細胞),則該細胞為生(即該細胞若原先為死,則轉為生,若原先為生,則保持不變) 。

2. 如果一個細胞周圍有2個細胞為生,則該細胞的生死狀態(tài)保持不變;

3. 在其它情況下,該細胞為死(即該細胞若原先為生,則轉為死,若原先為死,則保持不變)

設定圖像中每個像素的初始狀態(tài)后依據上述的游戲規(guī)則演繹生命的變化,由于初始狀態(tài)和迭代次數不同,將會得到令人嘆服的優(yōu)美圖案。

我們用#代表活的細胞,空格表示死的細胞,那么我們可以用控制臺打印字符、清屏來模擬生命游戲。我的代碼在github上:

https://github.com/Pleiades0428/GameOfLife/blob/master/Demo/gameOfLife.py

游戲世界尺寸為60x20,隨機生成初始狀態(tài),循環(huán)邊界,按任意鍵進入下一幀,q退出。

單純的看這段程序,好像并沒有什么問題,代碼邏輯正確、清晰。

效果圖:

3. Python列表生成式

我們來嘗試一些python的高級特性,比如列表生成式。

例如,在生成初始值時,我們一般這樣寫:

screen = []
width = 60
height = 20
def Init():
 for i in range(height):
  line = []
  for j in range(width):
   if random.random() > 0.8:
    line.append('#')
   else:
    line.append(' ')
  screen.append(line)

如果用列表生成式,我們可以這樣寫:

 def Init():
  global screen
  screen = [['#' if random.random() > 0.8 else ' ' for i in range(width)] for j in range(height)]

注意這里必須用global聲明,否則screen將默認作為函數內的局部變量。這里用了兩層列表生成式來生成一個二維數組。

列表生成式很好很強大,如果用好能大大提高效率。但會犧牲一定的可讀性,如果單個表達式寫的過于復雜,那就變成write-only了。尤其是在團隊開發(fā)情況下,可讀性日益重要。

重寫后的代碼:

https://github.com/Pleiades0428/GameOfLife/blob/master/Demo/gameOfLife.1.py

如果僅僅是作為練習,這樣就已經足夠好了,簡潔易讀。

4. 重構:面向對象與重用

可是我們還不能滿足,我們來給生命插上面向對象的翅膀,在模塊化的天空中翱翔。對,就是讓他跟別的模塊搞對象!

先來定義一個類GameOfLifeWorld,之前那些丑陋的全局變量,讓他們統統變成成員變量,再也不能在外興風作浪。

class GameOfLifeWorld:

 width = 100
 height = 100
 cells = []
…略

然后把UI層剝離,只保留游戲的核心邏輯。

代碼:

https://github.com/Pleiades0428/GameOfLife/blob/master/Demo/gameOfLifeWorld.py

5. GUI:Tkinter的調用

有了上一步的鋪墊,我們終于可以讓Tkinter粉墨登場了。Tkinter是著名的UI庫,Python自帶的Tkinter是一個精簡版,不過也夠我們用的了。

我們這里用到的主要是Canvas,Button控件。Canvas畫布用來繪制游戲區(qū),Button用來交互。

代碼:

https://github.com/Pleiades0428/GameOfLife/blob/master/Demo/gameOfLifeWorld.py

效果:

以上就是這樣,項目我還會繼續(xù)改進,希望大家喜歡。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • pytorch之關于PyTorch結構介紹

    pytorch之關于PyTorch結構介紹

    這篇文章主要介紹了pytorch之關于PyTorch結構的使用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • 淺談keras中自定義二分類任務評價指標metrics的方法以及代碼

    淺談keras中自定義二分類任務評價指標metrics的方法以及代碼

    這篇文章主要介紹了淺談keras中自定義二分類任務評價指標metrics的方法以及代碼,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • python遠程連接服務器MySQL數據庫

    python遠程連接服務器MySQL數據庫

    這篇文章主要為大家詳細介紹了python遠程連接服務器MySQL數據庫,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • 基于Python實現粒子濾波效果

    基于Python實現粒子濾波效果

    這篇文章主要介紹了基于Python實現粒子濾波效果,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-12-12
  • Python中將變量按行寫入txt文本中的方法

    Python中將變量按行寫入txt文本中的方法

    下面小編就為大家分享一篇Python中將變量按行寫入txt文本中的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-04-04
  • 磁盤垃圾文件清理器python代碼實現

    磁盤垃圾文件清理器python代碼實現

    幾行Python代碼打造自己的磁盤垃圾文件清理器,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • Python中使用PyQt把網頁轉換成PDF操作代碼實例

    Python中使用PyQt把網頁轉換成PDF操作代碼實例

    這篇文章主要介紹了Python中使用PyQt把網頁轉換成PDF操作代碼實例,本文直接給出實現代碼,需要的朋友可以參考下
    2015-04-04
  • Windows上使用virtualenv搭建Python+Flask開發(fā)環(huán)境

    Windows上使用virtualenv搭建Python+Flask開發(fā)環(huán)境

    在自己本機的開發(fā)環(huán)境下,我們完全可以使用virtualenv來hold住多個Python環(huán)境,這樣就可以留出一個專門服役于Flask框架,哈哈,這里我們就來看看如何在Windows系統上使用virtualenv搭建Python+Flask開發(fā)環(huán)境
    2016-06-06
  • Django之模板層的實現代碼

    Django之模板層的實現代碼

    這篇文章主要介紹了Django之模板層的實現代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-09-09
  • 使用python查找windows系統中所有程序的安裝信息

    使用python查找windows系統中所有程序的安裝信息

    這篇文章主要為大家介紹了使用python查找windows系統中所有程序的安裝信息示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-07-07

最新評論