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())) continueO 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