sexta-feira, 14 de novembro de 2014

O passeio da tartaruga

Na última aula vimos como se podia desenhar uma grelha usando turtle. Depois decidimos tornar o problema mais complexo colocando uma tartaruga a passear de modo aleatório nessa grelha. Partindo do centro da grelha a tartaruga a cada momento escolhe um de quatro movimentos (Norte, Sul, Este e Oeste). O mundo é finito pelo que a tartaruga não pode sair da grelha e isso tem que ser controlado pelo programa. Vamos ver uma solução possível.

Primeiro a grelha.

01.import turtle
02. 
03.def grelha(dim,lado):
04.    """Desenha uma grelha dim x dim em que cada célula tem de lado lado."""
05.    turtle.color("gray")
06.    tam = (dim*lado)
07.    x = -tam//2
08.    y = tam//2
09.    turtle.penup()
10.    turtle.goto(x,y)
11.    for lin in range(dim): 
12.        # Desenha linha de quadrados
13.        for col in range(dim):
14.            turtle.pendown()
15.            quadrado(lado)           
16.            turtle.penup()
17.            turtle.setx(turtle.xcor() + lado)
18.        # reposiciona
19.        turtle.penup()
20.        turtle.setposition(x, turtle.ycor()-lado)       
21.    turtle.hideturtle()
22. 
23.def quadrado(lado):
24.    for i in range(4):
25.        turtle.fd(lado)
26.        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.

01.def passeio(dim, lado, passos):   
02.    # Prepara grelha
03.    turtle.speed(0)
04.    grelha(dim,lado)
05.    turtle.color('red')
06.    turtle.home()
07.    turtle.pendown()
08.    # Passeio
09.    turtle.speed(6)
10.    turtle.dot()
11.    turtle.showturtle()
12.    lim_x = lim_y = (dim*lado)//2
13.    cor_x = 0
14.    cor_y = 0
15.    for i in range(passos):
16.        vai_para = random.choice(['N','E','S','W'])
17.        if (vai_para == 'N') and (cor_y < lim_y):
18.            cor_y += lado
19.            turtle.setheading(90)
20.            turtle.fd(lado)
21.        elif (vai_para == 'E') and (cor_x < lim_x):
22.            cor_x += lado
23.            turtle.setheading(0)
24.            turtle.fd(lado)
25.        elif (vai_para == 'S') and (cor_y > -lim_y):
26.            cor_y -= lado
27.            turtle.setheading(270)
28.            turtle.fd(lado)
29.        elif (vai_para == 'W') and (cor_x > -lim_x):
30.            cor_x -= lado
31.            turtle.setheading(180)
32.            turtle.fd(lado)
33.        else:
34.            print((vai_para,turtle.xcor(),turtle.ycor()))
35.            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