import random
import time

class life:
    def __init__(self, born, alive, mwidth, mheight):
        self.born = born
        self.alive = alive

        self.mwidth = mwidth
        self.mheight = mheight

        self.field = []
        self.initfield()



    def initfield(self):
        self.field = []
        for i in range(self.mheight):
            self.field.append([])
            for j in range(self.mwidth):
                deadoralive = random.randint(0, 1)
                if deadoralive == 0:
                    self.field[i].append(' ')
                else:
                    self.field[i].append('#')



    def draw(self):
        for i in range(3):
            print()

        for row in self.field:
            print(''.join(row))



    def nextgen(self):
        tempfield = []
        for i in range(self.mheight):
            tempfield.append([])
            for j in range(self.mwidth):
                tempfield[i].append(' ')

        for i in range(1, self.mheight - 1):
            
            for j in range(1, self.mwidth - 1):
                neighbours = 0
                
                if self.field[i][j + 1] == '#':
                    neighbours = neighbours + 1

                if self.field[i][j - 1] == '#':
                    neighbours = neighbours + 1

                if self.field[i + 1][j + 1] == '#':
                    neighbours = neighbours + 1

                if self.field[i + 1][j - 1] == '#':
                    neighbours = neighbours + 1

                if self.field[i - 1][j + 1] == '#':
                    neighbours = neighbours + 1

                if self.field[i - 1][j - 1] == '#':
                    neighbours = neighbours + 1

                if self.field[i + 1][j] == '#':
                    neighbours = neighbours + 1

                if self.field[i - 1][j] == '#':
                    neighbours = neighbours + 1

                if neighbours in self.born:
                    tempfield[i][j] = '#'

                elif neighbours not in self.alive:
                    tempfield[i][j] = ' '

                else:
                    tempfield[i][j] = self.field[i][j]



        for i in range(self.mheight):
            for j in range(self.mwidth):
                if tempfield[i][j] != self.field[i][j]:
                    self.field = tempfield
                    return

        self.initfield()




def main():
    conway_life = life([3], [3, 2], 60, 30)

    while True:
        conway_life.draw()
        conway_life.nextgen()

        time.sleep(0.3)



if __name__ == "__main__":
    main()