Primeiro a grelha.
import turtle
def grelha(dim,lado):
"""Desenha uma grelha dim x dim em que cada célula tem de lado lado."""
turtle.color("gray")
tam = (dim*lado)
x = -tam//2
y = tam//2
turtle.penup()
turtle.goto(x,y)
for lin in range(dim):
# Desenha linha de quadrados
for col in range(dim):
turtle.pendown()
quadrado(lado)
turtle.penup()
turtle.setx(turtle.xcor() + lado)
# reposiciona
turtle.penup()
turtle.setposition(x, turtle.ycor()-lado)
turtle.hideturtle()
def quadrado(lado):
for i in range(4):
turtle.fd(lado)
turtle.rt(90)
Notar que definimos uma função à parte para desenhar um quadrado, na posição em que a tartaruga se encontrar. Essencialmente, o programa é definido por dois ciclos. O mais exterior controla as linhas, o mais interior as colunas. Verifique também como se define a primeira posição da grela (canto superior esquerdo). Feito isto, a parte fácil, vamos ao passeio.
def passeio(dim, lado, passos):
# Prepara grelha
turtle.speed(0)
grelha(dim,lado)
turtle.color('red')
turtle.home()
turtle.pendown()
# Passeio
turtle.speed(6)
turtle.dot()
turtle.showturtle()
lim_x = lim_y = (dim*lado)//2
cor_x = 0
cor_y = 0
for i in range(passos):
vai_para = random.choice(['N','E','S','W'])
if (vai_para == 'N') and (cor_y < lim_y):
cor_y += lado
turtle.setheading(90)
turtle.fd(lado)
elif (vai_para == 'E') and (cor_x < lim_x):
cor_x += lado
turtle.setheading(0)
turtle.fd(lado)
elif (vai_para == 'S') and (cor_y > -lim_y):
cor_y -= lado
turtle.setheading(270)
turtle.fd(lado)
elif (vai_para == 'W') and (cor_x > -lim_x):
cor_x -= lado
turtle.setheading(180)
turtle.fd(lado)
else:
print((vai_para,turtle.xcor(),turtle.ycor()))
continue
O programa começa por desenhar (a alta velocidade!!) a grelha e coloca a tartaruga no centro da grelha. De seguida temos um ciclo que executa um número de movimentos dado como parâmetro (passos). Usamos o módulo random para poder escolher de modo aleatório o movimento. Escolhido este, temos um longo if que faz uma análise por casos. Notar que no teste controlamos se a posição escolhida está ou não dentro da grelha. No caso de o movimento não ser possível imprime uma mensagem (ramo else final.). Agora é só experimentar!

Sem comentários:
Enviar um comentário