2016-04-12 14 views
0

Bu yüzden bir Conway'in Hayat Bilgisi koduyla gelmeye çalışıyordum ve bu beni buna yönlendiriyor. En verimli olanı olmayabilir, ama ben bir dilenci kodlayıcısıyım ve işleri basit tutmak istedim. Tek istediğim oyunu canlandırmak ve sadece oyunun son neslini göstermek değil. Ayrıca, oyunun sonsuza dek nasıl çalıştırılacağını bilmek isterim, çünkü bu kodun önceden belirlenmiş sayıda nesle sahip olduğunu görebilirsiniz. Bir Macbook çalıştırırken ben orada çeşitli animasyon örneklerle (ve ilgili engelleme/Nonblocking örneklerle) ile korkunç şans yaşadımDizileri bir görüntüye dönüştürmek istiyorum ve o zaman onu canlandırın.

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

İlgisiz, ancak tüm komşuları almak için dilimleme kullanabilirsiniz numpy zaten (np.sum 'gibi, x [i-1 kullandığından: i + 2 , j-1: j + 2]) - x [i, j] '. Ayrıca aynı sayıda komşuyu iki veya üç kez hesaplayamam, sadece bir değişken ata. Son olarak, 'imshow' için bir animasyon örneği burada verilmiştir: http://matplotlib.org/examples/animation/dynamic_image.html – roadrunner66

cevap

0

: Burada Yardımlarınız için şimdiden ve teşekkürler benim kod. benim için çalışıyor

Basit şey: ... x=np.random.randint(2, size=(50,50)) p = plt.imshow(x) ... x = y.copy() p.set_data(x) plt.pause(.1)

+0

Bu çok güzel çalıştı. Teşekkürler! – Rods123Brasil

+0

Matplotlib olmadan canlandırmanın mümkün olduğunu düşünüyor musunuz? Bana göre bu kaynak biraz yavaş ve görüntüyü hesaplamak ve çizmek biraz zaman alıyor. – Rods123Brasil

+0

Eğer matplotlib değilse, openCV'ye bakabilirsin (kurulumu çok zor, iyi şanslar). Bu arada, matplotlib'i hızlandırmak için hoş bir mesaj (tüm bunlar Mac'te benim için değil, bazıları için geçerli): http://bastibe.de/2013-05-30-speeding-up-matplotlib.html. Cevabımı sevdiyseniz, soruyu kapatmak için kabul ettiğinizden emin olun. – welch

İlgili konular