2016-04-12 4 views
0

Так что я пытался придумать код игры Конуэй в жизни, и это привело меня к этому. Возможно, он не самый эффективный, но я начинающий кодер, и я хотел, чтобы все было просто. Все, что я хочу сделать, это оживить игру и не только отобразить последнее поколение игры. Кроме того, я хотел бы знать, как запустить игру неопределенно, потому что, как вы видите, этот код имеет предварительно определенное количество поколений. Заранее спасибо за вашу помощь и вот мой код:Я хочу преобразовать массивы в изображение, а затем одушевить его

import numpy as np 
import matplotlib.pyplot as plt 

x=np.random.randint(2, size=(50,50)) 

for b in range (0,100): 
    y=np.zeros((50,50), dtype=np.int) 
    for c in range(1,48): 
     for d in range(1,48): 
      if x[c][d]==1: 
       if x[c][d-1]+x[c][d+1]+x[c-1][d-1]+x[c-1][d]+x[c-1][d+1]+x[c+1][d-1]+x[c+1][d]+x[c+1][d+1]<2 or x[c][d-1]+x[c][d+1]+x[c-1][d-1]+x[c-1][d]+x[c-1][d+1]+x[c+1][d-1]+x[c+1][d]+x[c+1][d+1]>3: 
        y[c][d]=0 
       else: 
        y[c][d]=1 
      if x[c][d]==0: 
       if x[c][d-1]+x[c][d+1]+x[c-1][d-1]+x[c-1][d]+x[c-1][d+1]+x[c+1][d-1]+x[c+1][d]+x[c+1][d+1]==3: 
        y[c][d]=1 
       else: 
        y[c][d]=0 
    x=y.copy() 

plt.imshow(x) 
plt.grid(False) 
plt.show() 
+0

Unrelated, но так как вы уже используете NumPy вы можете использовать нарезку, чтобы все соседи, как 'np.sum (х [я-1: Я + 2 , j-1: j + 2]) - x [i, j] '. Также я бы не стал вычислять одинаковое количество соседей два или три раза, просто назначив ему переменную. Наконец, приведен пример анимации для 'imshow': http://matplotlib.org/examples/animation/dynamic_image.html – roadrunner66

ответ

0

У меня было ужасное везение с различными примерами анимации там (и связанными с ними примерами блокировки/неблокирующими), при работе на Macbook.

Простая вещь, которая работает для меня: ... x=np.random.randint(2, size=(50,50)) p = plt.imshow(x) ... x = y.copy() p.set_data(x) plt.pause(.1)

+0

Это работало красиво. Благодаря! – Rods123Brasil

+0

Считаете ли вы возможным анимировать его без matplotlib? Мне кажется, что этот ресурс немного медленный, и для вычисления и построения изображения требуется некоторое время. – Rods123Brasil

+0

Если не matplotlib, вы можете посмотреть в openCV (это классно сложно установить, удачи). Между тем, вот восхитительный пост по ускорению matplotlib (не все из них работают для меня на Mac, но некоторые делают): http://bastibe.de/2013-05-30-speeding-up-matplotlib.html. Если вам понравился мой ответ, обязательно примите его, чтобы закрыть вопрос. – welch

Смежные вопросы