<reponame>ethansaxenian/RosettaDecode<filename>lang/Python/conways-game-of-life-3.py<gh_stars>0
import numpy as np
from pandas import DataFrame
import matplotlib.pyplot as plt
#import time

def conway_life(len=10, wid=10, gen=5):

    curr_gen = DataFrame(np.random.randint(0, 2, (len+2, wid+2)),
                         index = list(range(len+2)),
                         columns = list(range(wid+2)))
    curr_gen[0] = 0
    curr_gen[wid+1] = 0
    curr_gen[0: 1] = 0
    curr_gen[len+1: len+2] = 0

    for i in range(gen):

        fig, ax = plt.subplots()
        draw = curr_gen[1:len+1].drop([0, wid+1], axis=1)
        # 画图

        image = draw
        ax.imshow(image, cmap=plt.cm.cool, interpolation='nearest')
        ax.set_title("Conway's game of life.")

        # Move left and bottom spines outward by 10 points
        ax.spines['left'].set_position(('outward', 10))
        ax.spines['bottom'].set_position(('outward', 10))
        # Hide the right and top spines
        ax.spines['right'].set_visible(False)
        ax.spines['top'].set_visible(False)
        # Only show ticks on the left and bottom spines
        ax.yaxis.set_ticks_position('left')
        ax.xaxis.set_ticks_position('bottom')

        plt.show()
        # time.sleep(1)


        # 初始化空表
        next_gen = DataFrame(np.random.randint(0, 1, (len+2, wid+2)),
                             index = list(range(len+2)),
                             columns = list(range(wid+2)))


        # 生成下一代
        for x in range(1, wid+1):
            for y in range(1, len+1):
                env = (curr_gen[x-1][y-1] + curr_gen[x][y-1] +
                       curr_gen[x+1][y-1]+ curr_gen[x-1][y] +
                       curr_gen[x+1][y] + curr_gen[x-1][y+1] +
                       curr_gen[x][y+1] + curr_gen[x+1][y+1])

                if (not curr_gen[x][y] and env == 3):
                    next_gen[x][y] = 1
                if (curr_gen[x][y] and env in (2, 3)):
                    next_gen[x][y] = 1

        curr_gen = next_gen


conway_life()
