2016-04-12 4 views
0

私はConwayのGame of Lifeコードを思いつきました。それは最も効率的なものではないかもしれませんが、私は初心者のコーダーであり、物事を単純にしたいと思っていました。私がしたいのは、ゲームをアニメーション化することだけです。ゲームの最後の世代を表示するだけでなく、また、私は、このコードがあらかじめ決められた数の世代を持っているのを見ることができるので、ゲームを無期限に実行する方法を知りたいと思います。あなたの助けを事前に感謝し、ここに私のコードです:配列を画像に変換してからアニメーション化したい

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

無関係、しかし、あなたはすべてのネイバーを取得するためにスライスし使用することができますnumpyのあなたはすでに使用しているため、np.sum 'のような(X [I-1:I + 2 、j-1:j + 2])-x [i、j] 'である。また、同じ数の隣人を2〜3回も計算しないで、変数を代入するだけです。最後に、 '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