Computer >> Máy Tính >  >> Lập trình >> Python

Conway’s Game Of Life sử dụng Python?

Một nhà toán học người Anh vào khoảng năm 1970 đã tạo ra "Trò chơi của cuộc sống" - về cơ bản là một tập hợp các quy tắc mô tả sự phát triển hỗn loạn nhưng có khuôn mẫu của một quần thể sinh vật. "Trò chơi của cuộc sống" là một lưới hai chiều bao gồm các ô "sống" và "chết".

Quy tắc trò chơi của cuộc sống

  • Dân số quá đông :Một tế bào chết (tắt) nếu xung quanh nó có nhiều hơn ba tế bào sống.

  • Tĩnh :Một tế bào sống (bật) nếu nó được bao quanh bởi hai hoặc ba tế bào sống.

  • Dân số thấp :Một tế bào chết (tắt) nếu xung quanh nó có ít hơn hai tế bào sống.

  • Sao chép :Một ô trở nên sống (bật) nếu một ô chết được bao quanh bởi chính xác ba ô.

Conway’s Game Of Life sử dụng Python?

Conway’s Game Of Life sử dụng Python? Tế bào sẽ chết trong dấu thời gian tiếp theo

Conway’s Game Of Life sử dụng Python? Ô sẽ tồn tại trong dấu thời gian tiếp theo

Conway’s Game Of Life sử dụng Python? Ô còn sống

Conway’s Game Of Life sử dụng Python? Tế bào đã chết

Bằng cách áp dụng bộ quy tắc trên theo các bước tuần tự, chúng tôi sẽ có được những mẫu đẹp và bất ngờ.

Các bước thực hiện:

i. Initialise an empty universe
ii. Fill the universe with the seed
iii. Calculate if the current cell survives to the next timestamps, based on its neighbours
iv. Repeat this survival function(like step-iii) over all the cells in the universe neighbours.
v. Repeat steps iii-iv for the desired number of generations.

Cài đặt:

Để tạo ra trò chơi conways của cuộc sống, chúng tôi sẽ sử dụng thư viện mảng matplotlib và numpy. Để cài đặt numpy và matplolib, hãy sử dụng pip-

$pip install numpy, matplolib

Chương trình thực hiện trò chơi conways của cuộc sống:

Bây giờ đã đến lúc viết chương trình theo bộ quy tắc ở trên của chúng tôi. Dưới đây là chương trình thực hiện trò chơi của cuộc sống,

#Import required library

import numpy as np
import matplotlib.pyplot as plt

import argparse
import time

#-------------------------------------------------------------------------
class Board(object):
   def __init__(self, size, seed = 'Random'):
      if seed == 'Random':
         self.state = np.random.randint(2, size = size)
      self.engine = Engine(self)
      self.iteration = 0
   def animate(self):
      i = self.iteration
      im = None
      plt.title("Conway's Game of Life")
      while True:
         if i == 0:
            plt.ion()
            im = plt.imshow(self.state, vmin = 0, vmax = 2, cmap = plt.cm.gray)
         else:
            im.set_data(self.state)
         i += 1
         self.engine.applyRules()
         print('Life Cycle: {} Birth: {} Survive: {}'.format(i, self.engine.nBirth, self.engine.nSurvive))
         plt.pause(0.01)
         yield self

#-------------------------------------------------------------------------

class Engine(object):
   def __init__(self, board):
      self.state = board.state
   def countNeighbors(self):
      state = self.state
      n = (state[0:-2,0:-2] + state[0:-2,1:-1] + state[0:-2,2:] +
          state[1:-1,0:-2] + state[1:-1,2:] + state[2:,0:-2] +
          state[2:,1:-1] + state[2:,2:])
      return n
   def applyRules(self):
      n = self.countNeighbors()
      state = self.state
      birth = (n == 3) & (state[1:-1,1:-1] == 0)
      survive = ((n == 2) | (n == 3)) & (state[1:-1,1:-1] == 1)
      state[...] = 0
      state[1:-1,1:-1][birth | survive] = 1
      nBirth = np.sum(birth)
      self.nBirth = nBirth
      nSurvive = np.sum(survive)
      self.nSurvive = nSurvive
   return state

#-------------------------------------------------------------------------

def main():
   ap = argparse.ArgumentParser(add_help = False) # Intilialize Argument Parser
   ap.add_argument('-h', '--height', help = 'Board Height', default = 256)
   ap.add_argument('-w', '--width', help = 'Board Width', default = 256)
   args = vars(ap.parse_args()) # Gather Arguments
   bHeight = int(args['height'])
   bWidth = int(args['width'])
   board = Board((bHeight,bWidth))
   for _ in board.animate():
      pass
#-------------------------------------------------------------------------

if __name__ == '__main__':
   main()

Đầu ra

Console:
Life Cycle: 1 Birth: 7166 Survive: 10621
Life Cycle: 2 Birth: 7930 Survive: 8409
Life Cycle: 3 Birth: 7574 Survive: 8756
Life Cycle: 4 Birth: 7114 Survive: 8406
Life Cycle: 5 Birth: 7005 Survive: 8126
Life Cycle: 6 Birth: 6644 Survive: 7926
Life Cycle: 7 Birth: 6266 Survive: 7711
Life Cycle: 8 Birth: 6132 Survive: 7427
Life Cycle: 9 Birth: 5957 Survive: 7322
Life Cycle: 10 Birth: 5769 Survive: 7290
Life Cycle: 11 Birth: 5585 Survive: 6937
Life Cycle: 12 Birth: 5381 Survive: 6791
Life Cycle: 13 Birth: 5208 Survive: 6686
Life Cycle: 14 Birth: 5063 Survive: 6563
….
…

Các kết quả trên sẽ tiếp tục xuất hiện cho đến khi chúng ta nhấn Ctrl-C trong thiết bị đầu cuối để dừng chương trình.

Hiển thị đồ họa:

Conway’s Game Of Life sử dụng Python?

Các ô sẽ tiếp tục thay đổi và sẽ mô phỏng các mô hình rất đẹp.

Bạn có thể thay đổi ô con ở trên bằng cách thay đổi cài đặt và thay đổi giá trị thanh trượt:

Conway’s Game Of Life sử dụng Python?