見出し画像

pythonista3でライフゲームを作る

先日“ライフゲーム“というプログラムを知ったので少し調べて実際に実行してみました.

↓書いたコードはこんな感じ(初期値はペンタデカスロンというものです)

import copy

#0が死、1が生
lsize = 9 #行の大きさ
csize = 16 #列の大きさ

mlist = [[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
            [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
    [0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0],
    [0,0,0,0,1,0,1,1,1,1,0,1,0,0,0,0],
    [0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0],
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]]

temp_mlist = copy.deepcopy(mlist)

#n行k列目の周囲のポイント計算
def check(n,k):
sum = 0

for i in range(-1,2):
num = 0
i = n + i 
if (i < 0) or (lsize - 1 < i):
pass
else :
for j in range(-1,2):
j = k + j
if (j < 0) or (csize - 1 < j):
pass
else :
num = int(temp_mlist[i][j])
sum = sum + num
num = int(temp_mlist[n][k])
sum = sum - num
return sum

#生死の判断
def renew(n, k, val) :
num = int(temp_mlist[n][k])

if (num == 0) and (val == 3 ):
mlist[n][k] = 1
elif (num == 1) and (val == 2):
pass
elif (num == 1) and (val == 3):
pass
elif (num == 1) and (val >= 4):
mlist[n][k] = 0
elif (num == 1) and (val <= 1):
mlist[n][k] = 0

#一周期
def term() :
#temp_mlist = copy.deepcopy(mlist)
for u in range(lsize):
for v in range(csize):
val = check(u, v)
renew(u, v, val)

#□■に置き換える
def change():
for i in mlist :
for j in i :
if j == 0 :
print("□", end = "")
elif j == 1 :
print("■", end = "")
print()
 
for h in range(22):
temp_mlist = copy.deepcopy(mlist)
print('T=',h)
change()
term()

(コードが洗練されてないのは優しい目で見て下さると嬉しいです、よろしければアドバイスください.)

実行するとこんな感じ↓

mlist の要素を初期値として設定します.それに合わせてlsizeとcsizeの値を入れてもらって、1番下のrangeの値をいじれば世代更新の回数をいじれます.

今後の課題としてはPythonista3のアニメーションを活かして、UIを整備して、視覚的にもっと可愛い感じにする、そして初期値をいじりやすくするとかかな、最終的には…と色々考えてはいるけどどれもプロダクト方向で、このプログラム自体を突き詰める方向にを頑張れたらと思う(記事が少ない、あと知識がないのでセル=オートマンとかのあたりから学ばないといけない)

この記事が気に入ったらサポートをしてみませんか?