質問
昨日、2次元セルオートマトンの質問をした者ですが、昨日のセルオートマトンのコードを自分なりに編集して、「上下左右」を考えるものから「左右」のみを考える2方向のセルオートマトンのアニメーションを作成しようと試みました。
下がそのコードですが、「♯実行メイン」、「♯セルの初期設定」、「#セルの色設定」、「#実行メイン」のコードを変更して、初期条件が(1,15)の位置が赤色のセルとなり、赤いセルがあった場合、右のセルが赤いセルとなり、左が赤いセルから黒いセルに変わり、赤いセルが右に移動していくプログラムを作成しようとしました。
要するに最初に(1,15)のセルが赤くなると、次は(2,15)のセルが赤くなり、(1,15)のセルが黒に変わって(3,15)のセルが赤くなり・・・という感じです。
しかし、いざ下のコードを実行しようとすると、初期条件の(1,15)のセルが赤くなり、その後、一番右のセルが赤くなり動作が終わってしまいます。多分原因は「for i in range(1,30):」で同時処理されてしまっているからだと思うのですが、どう変更すれば順番に表示してくれるか分かりません。
コード
Python3
1from tkinter import * 2import time 3import tkinter as tk 4#配列の宣言 5def array2(N1,N2): 6 return [[0 for j in range(N2)]for k in range(N1)] 7def array3(N1,N2,N3): 8 return [array2(N2,N3)for k in range(N1)] 9#セルの初期設定 10def initdt(): 11 A=array3(2,31,31); A[0][1][15]=1 12 return A 13#セルオートマトンの実行 14def execCell(A,i1): 15 for i in range(1,30): 16 if A[i1][i][15]==1: 17 A[i1][i+1][15]=1 18 A[i1][i-1][15]=0 19#セルの位置決めとIDの設定 20def drawCell(canvas,A,k): 21 x2=0 22 CID=array2(31,31) 23 for i in range(1,30): 24 x1=x2 25 x2=x1+10 26 y2=0 27 for j in range(1,30): 28 y1=y2 29 y2=y1+10 30 CID[i][j]=canvas.create_rectangle(x1,y1,x2,y2,fill='black') 31 return CID 32#セルの色設定 33def modifyCell(canvas,A,k,CID): 34 CL=['black','#ff0000'] 35 for i in range(1,30): 36 for j in range(1,30): 37 canvas.itemconfig(CID[i][j],fill=CL[A[k][i][j]]) 38 canvas.itemconfig(CID[i][j],outline=CL[A[k][i][j]]) 39#Tk初期設定 40def initTk(): 41 tk=Tk(); tk.title("2D Cell Automaton"); tk.resizable(0,0) 42 return tk 43#画面キャプチャ用 44def leftMouseDown(event): 45 global canvas, A,k,CID 46 modifyCell(canvas,A,k,CID) 47 execCell(A,k) 48#実行メイン 49A=initdt() 50root=initTk() 51canvas=Canvas(root,width=290,height=290,highlightthickness=0) 52canvas.pack() 53CID=drawCell(canvas,A,0) 54k=0 55 56def animate(): 57 global k 58 modifyCell(canvas, A, k, CID) 59 execCell(A,k) 60 root.after(200, animate) 61 62root.after(200, animate) 63root.mainloop()
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/12/04 12:12