首先在說明之前先給大家看兩張圖,圖一是原始的狀態,圖案的樣子很像一個鼻子,圖二是經過數次演化後所產生的穩定圖案,它的樣子長的很像眼睛,所以結論眼睛是由鼻子演化而來(當然是開玩笑的)。
圖一:演化之前的圖案
圖二:演化到最終穩定的圖案
這樣一個東西在1970年的時候就已經被提出來,這個東西是細胞的自動機,根據一些簡單的條件,去確認細胞的狀態改變,要生存下來或是死亡。這樣的一個遊戲叫Life Game,這樣的一個東西在經過幾次狀態的改變之後,可能造成所有細胞都消失,一個點都不剩,也可能像我上面的例子,從一個排列的樣子變成另一個排列的樣子。事實上這樣資料改變的規則很簡單,但是運算量卻相當的大。
Python
def CheckLife(self):
for col in range(0, self.grid1.GetNumberCols()):
for row in range(0, self.grid1.GetNumberRows()):
curColor = self.grid1.GetCellBackgroundColour(row, col)
neighbours = self.GetNeighbours(row, col)
if curColor == wx.Colour(255, 255, 255):
if neighbours < 2 or neighbours > 3:
self.changeCell.append((row,col,wx.Colour(0, 0, 0)))
else:
if neighbours == 3:
self.changeCell.append((row,col,wx.Colour(255, 255, 255)))
for col in range(0, self.grid1.GetNumberCols()):
for row in range(0, self.grid1.GetNumberRows()):
curColor = self.grid1.GetCellBackgroundColour(row, col)
neighbours = self.GetNeighbours(row, col)
if curColor == wx.Colour(255, 255, 255):
if neighbours < 2 or neighbours > 3:
self.changeCell.append((row,col,wx.Colour(0, 0, 0)))
else:
if neighbours == 3:
self.changeCell.append((row,col,wx.Colour(255, 255, 255)))
只要上面幾行程式就可以決定所有細胞的生死,只要一個細胞的周圍沒有兩個或三個鄰居在下一次的計算過程中就判它死刑。所以鄰居太多或鄰居太少對細胞的生存是很不利的。
全站熱搜
留言列表