Python - Juego de la vida toroidal

 
Vista:
sin imagen de perfil

Juego de la vida toroidal

Publicado por sor (12 intervenciones) el 09/02/2017 04:33:47
Hola. El ejercicio pide implementar el juego de la vida toroidal con gráficos de tortuga, teniendo en cuenta que una casilla (y, x) siempre tiene 8 vecinas aunque esté en un borde. He intentado esto:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
print('Programa del juego de la vida toroidal.')
 
filas=int(input('Dime el número de filas: '))
columnas=int(input('Dime el número de colúmnas: '))
 
tablero=[]
for i in range(filas):
    tablero.append([False]*columnas)
 
from turtle import Screen, Turtle
pantalla=Screen()
pantalla.setup(1025,1025)
pantalla.screensize(1000,1000)
pantalla.delay(0)
 
tablero[4][5]=True
tablero[5][5]=True
tablero[6][5]=True
 
#Representar el tablero.
for y in range(filas):
    for x in range(columnas):
        if tablero[y][x]:
            célula=Turtle('square')
            célula.color('blue')
            célula.speed(0)
            célula.penup()
            célula.goto(y,x)
            célula.pendown()
        else:
            célula=Turtle('square')
            célula.color('red')
            célula.speed(0)
            célula.penup()
            célula.goto(y,x)
            célula.pendown()
 
pulsos=6
for t in range(pulsos):
    #Preparar un nuevo tablero.
    nuevo=[]
    for i in range(filas):
        nuevo.append([False]*columnas)
    #Actualizar el tablero.
    tablero=nuevo
    for y in range(filas):
        for x in range(columnas):
            #Calcular el número de vecinos de la celda que estamos visitando.
            n=0
            if y>0 and x>0 and tablero[(y-1)%filas][(x-1)%columnas]:
                n+=8
            if x>0 and tablero[y][(x-1)%columnas]:
                n+=8
            if y<filas-1 and x>0 and tablero[(y+1)%filas][(x-1)%columnas]:
                n+=8
            if y>0 and tablero[(y-1)%filas][x]:
                n+=8
            if y<filas-1 and tablero[(y+1)%filas][x]:
                n+=8
            if y>0 and x<columnas-1 and tablero[y-1%(filas)][x+1%(columnas)]:
                n+=8
            if x<columnas-1 and tablero[y][(x+1)%columnas]:
                n+=8
            if y<filas-1 and x<columnas-1 and tablero[(y+1)%filas][(x+1)%columnas]:
                n+=8
            #Aplicar las reglas.
            if tablero[y][x] and n>=8:#Supervivencia.
                nuevo[y][x]=True
            elif not tablero[y][x] and n==8:#Nacimiento.
                nuevo[y][x]=True
            else:#Superpoblación y aislamiento.
                nuevo[y][x]=False
 
            célula.goto(n)
    #Actualizar el tablero.
    tablero=nuevo
    #Representar el tablero.
    print('Pulso',t+1)
    for y in range(filas):
        for x in range(columnas):
            if tablero[y][x]:
                célula=Turtle('square')
                célula.color('blue')
            else:
                célula=Turtle('square')
                célula.color('red')
pantalla.exitonclick()

¿Qué estoy haciendo mal?¿Se os ocurre algo? Un saludo.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Juego de la vida toroidal

Publicado por nahuel (1 intervención) el 13/10/2017 00:19:27
estoy estudiando en python y me mandaron a hacer un trabajo practico exactamente de lo mismo sobre el juego de la vida y tampoco pude solucionarlo si hay alguien que me pueda dar algo de informacion les agradeceria! :D
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 2
Ha disminuido su posición en 18 puestos en Python (en relación al último mes)
Gráfica de Python

Juego de la vida toroidal

Publicado por Della (1 intervención) el 26/02/2020 01:46:26
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
print('Programa del juego de la vida toroidal.')
 
 
filas=int(input('Dime el número de filas: '))
columnas=int(input('Dime el número de colúmnas: '))
 
tablero=[]
for i in range(filas):
    tablero.append([False]*columnas)
 
from turtle import Screen, Turtle
pantalla=Screen()
pantalla.setup(425,425)
pantalla.screensize(400,200)
pantalla.delay(0)
 
tablero[4][5]=True
tablero[5][5]=True
tablero[6][5]=True
 
# Preparar incrementos
dc = 30 # incremento en x
df = 30 # incremento en y
 
#Representar el tablero.
 
for y in range(filas):
    for x in range(columnas):
        if tablero[y][x]:
            célula=Turtle('square')
            célula.color('blue')
            célula.speed(0)
            célula.penup()
            célula.goto(x*dc,-y*df)
            célula.pendown()
        else:
            célula=Turtle('square')
            célula.color('red')
            célula.speed(0)
            célula.penup()
            célula.goto(x*dc,-y*df)
            célula.pendown()
 
pulsos=6
for t in range(pulsos):
    #Preparar un nuevo tablero.
    nuevo=[]
    for i in range(filas):
        nuevo.append([False]*columnas)
    #Actualizar el tablero.
    for y in range(filas):
        for x in range(columnas):
            #Calcular el número de vecinos de la celda que estamos visitando.
            n=0
            if y>0 and x>0 and tablero[(y-1)%filas][(x-1)%columnas]:
                n+=1
            if x>0 and tablero[y][(x-1)%columnas]:
                n+=1
            if y<filas-1 and x>0 and tablero[(y+1)%filas][(x-1)%columnas]:
                n+=1
            if y>0 and tablero[(y-1)%filas][x]:
                n+=1
            if y<filas-1 and tablero[(y+1)%filas][x]:
                n+=1
            if y>0 and x<columnas-1 and tablero[y-1%(filas)][x+1%(columnas)]:
                n+=1
            if x<columnas-1 and tablero[y][(x+1)%columnas]:
                n+=1
            if y<filas-1 and x<columnas-1 and tablero[(y+1)%filas][(x+1)%columnas]:
                n+=1
            #Aplicar las reglas.
            if tablero[y][x] and (n == 2 or n == 3):#Supervivencia.
                nuevo[y][x]=True
            elif not tablero[y][x] and n==3:#Nacimiento.
                nuevo[y][x]=True
            else:#Superpoblación y aislamiento.
                nuevo[y][x]=False
 
            #célula.goto(n)
 
    #Actualizar el tablero.
    tablero=nuevo
 
    #Representar el tablero.
    print('Pulso',t+1)
    for y in range(filas):
        for x in range(columnas):
            if tablero[y][x]:
                célula=Turtle('square')
                célula.color('blue')
                célula.speed(0)
                célula.penup()
                célula.goto(x*dc,-y*df)
                célula.pendown()
            else:
                célula=Turtle('square')
                célula.color('red')
                célula.speed(0)
                célula.penup()
                célula.goto(x*dc,-y*df)
                célula.pendown()
 
pantalla.exitonclick()

Prueba con este...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar