2017-09-21 20 views
0

私は、Conwayのゲームを楽しむためにPythonを使って人生のゲームを作ろうとしてきましたが、tkinterに問題がありました。基本的には、すべてのイメージの後でキャンバスを更新しようとしていましたが、アップデートの間にそれを見るのに十分長く待つことができません。ここで(ええ、それはかなり悪いですし、それのいくつかは単なる無用ですが、私と一緒に負担してみてください)私のコードです:私は(サイドノートこの問題を解決するにはどうすればよいTkinterキャンバスを更新する

import random 
from Tkinter import * 
world = [] 
master = Tk() 

w = Canvas(master, width=1000, height=750) 
w.pack() 
def find_adj(a, b): 
#yeah, this is probably the single worst part of my code. 
#when declaring a class like this I do (x,y) instead of (y,x) 
    adjs = 0 
    if world[b][a - 1] == 1: 
     adjs += 1 
    if world[b][a + 1] == 1: 
     adjs += 1 
    if world[b - 1][a] == 1: 
     adjs += 1 
    if b > len(world): 
     if world[b + 1][a] == 1: 
      adjs += 1 
    return adjs 

def select(num1, num2): 
    if find_adj(num1, num2) <= 1 or find_adj(num1, num2,) == 4: 
     world[num2][num1] = 0 
    else: 
     world[num2][num1] = 1 

for n in range(0, 10): 
    world.append([]) 
    for m in range(0, 10): 
     world[n].append(random.randint(0, 1)) 
     if world[n][m]==1: 
      w.create_rectangle(n*10, m * 10, 10 * (n + 1), 10 * (m + 1), 
fill="black") 
      w.pack()#do not know what this is doing down here, I have no idea where to put it 
print(world[0]) 
for o in range(0, 9): 
    print("hello") 
#w.create_rectangle(20,25,100,100, fill="black") 
for y in (0, len(world) - 1): 
    for x in range(0, len(world[y]) - 1): 
      select(x, y) 
      if world[y][x]==1: 
       w = w.update_idletasks 
       w.create_rectangle(y*10,x*10,10*(y+1), 10*(x+1), fill = "black") 
    print(world) 
mainloop() 

:あなたは私がしようとしていると思われる場合私がまだやっていないことをやっていることや、自分のコードが正気な人が正しいことをしようとするのはあまりにも多くのことであり、ちょうどそれを下ろすのではなく "子供を諦める"質問)

+1

このスケールでもっと複雑なものを試す前に、基本的なプログラムから始めておくことをお勧めします。 – SneakyTurtle

+0

は 'python canvas'についてさらに詳しい文書を読む必要があります – dsgdfg

答えて

0

あなたは終わりに向かって(このライン上の問題を抱えている ;-)

を「子供をあきらめてはいけない」):。

w = w.update_idletasks

update_idletaskswでそれを呼び出すための方法である、それは二重のかっこが必要です。このメソッドは何も返しません(Noneを返す)ので、wに割り当ててはいけません。

に置き換える:あなたのプログラムが速すぎて行く、と何が起こっているか見てからあなたを防ぐことはない...何が起こっている:あなたの質問に答えるために、

w.update_idletasks()


次の世代が前の世代に置き換わる部分をまだコーディングしていないということです。

これは今行うべきことです。

たぶんfunctionsについて少し読むことができますか?私はあなたのプロジェクトを完成させるのに役立つと確信しています。

関連する問題