# conway_final.py

Created by florian-allard

Created on July 25, 2020

6.76 KB

```from kandinsky import draw_string,set_pixel,fill_rect
from random import randint
from ion import *

draw_string(chaine,10,v,'orange')
draw_string("<"+" "*(5+dec)+">",10+len(chaine)*10,v,'blue')
while not (keydown(KEY_EXE) or keydown(KEY_OK)):
#    if keydown(KEY_LEFT) or keydown(KEY_RIGHT):
if mode=="nombre":
var = (var-mini+keydown(KEY_RIGHT)-keydown(KEY_LEFT))%(maxi-mini+1)+mini
draw_string(" "+str(var)+" px ",10+(len(chaine)+1)*10+5*dec-5*len(str(var)),v,'purple')
else:#mode booléen
draw_string(choix1*var+choix2*(1-var),10+(len(chaine)+2)*10,v,'purple')
if keydown(KEY_LEFT) or keydown(KEY_RIGHT):
var = not var
while keydown(KEY_LEFT) or keydown(KEY_RIGHT):True
while keydown(KEY_EXE) or keydown(KEY_OK):True
return var

def curseur(couleur):
for pos in [0,1]:
fill_rect(dg+d*col+pos*(c+(s==3))+(s==1)+(s==2)-(s==3),dh+d*lig-2*(s==0)+5*(s==1)+(s==2)-(s==3),1,c+(s==3),couleur)
fill_rect(dg+d*col+(s==1)+(s==2)-(s==3),dh+d*lig+pos*(c-(s==1)+(s==3))-2*(s==0)+5*(s==1)+(s==2)-(s==3),1+c+(s==3),1,couleur)
return None

def carre(i,j,couleur):
if rapide:
for u in D:
for v in D:
set_pixel(dg+d*j+u,dh+d*i+v,couleur)
else:
fill_rect(dg+d*j,dh+d*i,c,c,couleur)

v=20
S = ['o',chr(215),chr(176),' ']
s = 0
draw_string("Choix du symbole : ",10,v,'orange')
draw_string("<   >",10+19*10,v,'blue')
draw_string(S[s],10+21*10,v,'purple')
while not (keydown(KEY_EXE) or keydown(KEY_OK)):
if keydown(KEY_LEFT) or keydown(KEY_RIGHT):
s = (s+keydown(KEY_RIGHT)-keydown(KEY_LEFT))%len(S)
draw_string(S[s],10+21*10,v+4*(s==2),'purple')
if s == 3:
fill_rect(10+21*10+3,v+7,4,4,'purple')
while keydown(KEY_LEFT) or keydown(KEY_RIGHT):True
while keydown(KEY_EXE) or keydown(KEY_OK):True

c=9-2*s
mini=(s+2)%4+1

if s == 3:
v+=20
rapide=True #ajouter menu de choix de vitesse
v+=20
c=3
mini=1
maxi=15
mini=max(0,5-c) #espacement mini

maxi=9

v+=20
e = 5

v+=20
alea = True

v+=20
clr = True

Naissance = [3]
Survie = [2,3]
for etape in [Naissance,Survie]:
v+=20
draw_string("Voisins pour "+"une naissance : "*(etape==Naissance)+"la survie : "*(etape==Survie),10,v,'orange')
for n in range(9):
draw_string(str(n),30+30*n,v+15,'purple'*(n in etape)+'grey'*(n not in etape))
pos = 3
while not (keydown(KEY_EXE) or keydown(KEY_OK)):
if keydown(KEY_LEFT) or keydown(KEY_RIGHT):
for k in [-1,1]:
draw_string(" ",30+30*pos+10*k,v+15)
pos = (pos+(keydown(KEY_RIGHT)-keydown(KEY_LEFT)))%9
draw_string("[",30+30*pos-10,v+15,'blue')
draw_string("]",30+30*pos+10,v+15,'blue')
#while keydown(KEY_LEFT) or keydown(KEY_RIGHT):True
if keydown(KEY_UP) or keydown(KEY_DOWN):
if pos in etape:
etape.remove(pos)
else:
etape.append(pos)
draw_string(str(pos),30+30*pos,v+15,'purple'*(pos in etape)+'grey'*(pos not in etape))
while keydown(KEY_UP) or keydown(KEY_DOWN):True
while keydown(KEY_EXE) or keydown(KEY_OK):True
etape.sort()
etape.reverse()
v+=20

v+=20
N = 10
draw_string("Nombre de cycles : ",10,v,'orange')
draw_string("<"+5*" "+">",10+19*10,v,'blue')
draw_string(str(N),10+21*10,v,'purple')
while not (keydown(KEY_EXE) or keydown(KEY_OK)):
if keydown(KEY_LEFT) or keydown(KEY_RIGHT) or keydown(KEY_UP) or keydown(KEY_DOWN):
N = (N-1+(10*keydown(KEY_RIGHT)-10*keydown(KEY_LEFT)+keydown(KEY_UP)-keydown(KEY_DOWN)))%999+1
draw_string(" "+str(N)+" ",10+20*10+5*(3-len(str(N))),v,'purple')
while keydown(KEY_EXE) or keydown(KEY_OK):True

d = c+e
D = range(d-e)
a = 222//d #222//6=36
b = 320//d #320//6=53
A = range(a)
B = range(b)
dg = (320-b*d+e)//2-2*(s==1)-(s==2)
dh = (222-a*d+e)//2-5*(s==1)-(s==2)+(s==0)
Liste = [[0 for col in B] for lig in A]
fill_rect(1,1,320,222,'white')

if alea:
for lig in A:
for col in B:
Liste[lig][col] = 2*randint(0,1)
if Liste[lig][col] == 2:
if s<3:
draw_string(S[s],dg+d*col,(dh+d*lig)*(1-2*(s==0))+207*(s==0),'blue')
else:
carre(lig,col,'blue')
else:
col = b//2
lig = a//2
while not keydown(KEY_SHIFT):
curseur('orange')
if keydown(KEY_RIGHT) or keydown(KEY_LEFT) or keydown(KEY_UP) or keydown(KEY_DOWN):
curseur('white')
lig = (lig+keydown(KEY_DOWN)-keydown(KEY_UP))%a
col = (col+keydown(KEY_RIGHT)-keydown(KEY_LEFT))%b
if s==3 and e==0:
for rangl in [-2,-1,0,1,2]:
for rangc in [-2,-1,0,1,2]:
if Liste[(lig+rangl)%a][(col+rangc)%b]>0:
carre(lig+rangl,col+rangc,'blue')

if keydown(KEY_EXE):
if s == 0:
Liste[a-1-lig][col] = 2-Liste[a-1-lig][col]
couleur = 'white'*(Liste[a-1-lig][col] == 0)+'blue'*(Liste[a-1-lig][col] > 0)
else:
Liste[lig][col] = 2-Liste[lig][col]
couleur = 'white'*(Liste[lig][col] == 0)+'blue'*(Liste[lig][col] > 0)
if s<3:
draw_string(S[s],dg+d*col,dh+d*lig-7*(s==0),couleur)
if s == 0 and e<5 and lig>0:
for rang in range(a-lig,a):
if Liste[rang][col]==0:break
draw_string(S[s],dg+d*col,dh+d*(a-rang-1)-7*(s==0),'blue')
if s == 1 and e<5:
for rang in range(lig+1,a):
if Liste[rang][col]==0:break
draw_string(S[s],dg+d*col,dh+d*rang,'blue')
if s == 2:
if e<3:
for rangc in range(col,a):
for rangl in range(lig,a):
if Liste[rangl][rangc]>0:
draw_string(S[s],dg+d*rangc,dh+d*rangl,'blue')
else:
for rang in range(lig+1,a):
if Liste[rang][col]>0:
draw_string(S[s],dg+d*col,dh+d*rang,'blue')

else:
carre(lig,col,couleur)
while keydown(KEY_EXE):True
curseur('white')

for gen in range(N):
for i in A:
for j in B:
Voisins = 0
for k in [-1,0,1]:
for l in [-1,0,1]:
if [k,l] != [0,0] and Liste[(i+k)%a][(j+l)%b]**2 > 3:
Voisins += 1
if (Liste[i][j]==0 and Voisins in Naissance) or ( Liste[i][j] > 0 and Voisins in Survie ):
Liste[i][j] += 1
couleur = (clr*min(25*Liste[i][j]-25,255),0,max(0,255+clr*(25-25*Liste[i][j])))
else:
Liste[i][j] *= -1
couleur = 'white'
if Liste[i][j] != 0:
if s<3:
draw_string(S[s],dg+d*j,(dh+d*i)*(1-2*(s==0))+207*(s==0),couleur)
else:
carre(i,j,couleur)
for i in A:
for j in B:
Liste[i][j] = 2*((max(0,Liste[i][j])+1)//2)```