import turtle import random def random_walk_prison(raio,pos_x,pos_y,ang,step,num): turtle.penup() turtle.goto(pos_x,pos_y) turtle.setheading(ang) turtle.pendown() for i in range(num): if turtle.distance(pos_x, pos_y) > raio: turtle.setheading(turtle.towards(pos_x,pos_y)) turtle.forward(step)Esta solução permite controlar a dimensão da prisão (raio), a posição inicial da tartaruga (pos_x e pos_y), o ângulo inicial (ang), a dimensão de cada passo (step) e o número de passos da tartaruga (num). O código é fácil de entender: enquanto não tivermos esgotado o número de passos concedido, avançamos. Se ultrapassarmos o limite autorizado voltamos para trás na direção de onde partimos. Notar que a primitiva towards não altera a orientação, pelo que é necessário usar o setheading.
Se executarmos este programa o resultado não é muito entusiasmante: a tartaruga anda para trás e para a frente ao longo de uma linha. Tudo menos um caminhar aleatório. Vamos por isso pensar em melhorar o código. Começamos por coisas simples: mudar a forma e a cor da tartaruga e retirar o rasto.
def random_walk_prison_1(raio,pos_x,pos_y,ang,step,num): turtle.setheading(ang) turtle.shape('turtle') turtle.color('blue') turtle.penup() turtle.goto(pos_x,pos_y) for i in range(num): if turtle.distance(pos_x, pos_y) > raio: turtle.setheading(turtle.towards(pos_x,pos_y)) turtle.forward(step)Não se pode dizer que esteja muito melhor. Vamos então introduzir alguma variabilidade no caminhar da tartaruga, fazendo com que se movimente sem ser apenas para a frente e para trás.
def random_walk_prison_2(raio,pos_x,pos_y,ang,step,num): turtle.setheading(ang) turtle.shape('turtle') turtle.color('blue') turtle.penup() turtle.goto(pos_x,pos_y) for i in range(num): if turtle.distance(pos_x, pos_y) > raio: offset = random.randint(-10,10) turtle.setheading(turtle.towards(pos_x,pos_y) + offset) turtle.forward(step)Como se pode ver recorremos ao método randint do módulo random. Já nos parece mais razoável, mas podemos melhorar ainda o programa, desenhando a prisão. No nosso caso desenhamos uma circunferência de raio definido pelo utilizador. Também alteramos a espessura do traço.
def random_walk_prison_3(raio,pos_x,pos_y,ang,step,num): # prisão turtle.penup() turtle.goto(pos_x,pos_y-raio-step) turtle.pendown() turtle.width(5) turtle.pencolor('red') turtle.circle(raio+step) # tartaruga turtle.setheading(ang) turtle.shape('turtle') turtle.color('blue') turtle.penup() turtle.hideturtle() turtle.goto(pos_x,pos_y) turtle.showturtle() for i in range(num): if turtle.distance(pos_x, pos_y) > raio: offset = random.randint(-10,10) turtle.setheading(turtle.towards(pos_x,pos_y) + offset) turtle.forward(step)E pronto… ou talvez não. Porque é que a tartaruga tem que ter o centro da prisão sempre como referência?? Não tem, pois claro! Então vamos alterar isso.
def random_walk_prison_4(raio,pos_x,pos_y,ang,step,num): # prisão turtle.penup() turtle.goto(pos_x,pos_y-raio-step) turtle.pendown() turtle.width(5) turtle.pencolor('red') turtle.circle(raio+step) # tartaruga turtle.setheading(ang) turtle.shape('turtle') turtle.color('blue') turtle.penup() turtle.goto(pos_x,pos_y) for i in range(num): if turtle.distance(pos_x, pos_y) + step >= raio: offset = random.randint(-10,10) turtle.setheading(turtle.heading() + 180 + offset ) print(turtle.heading()) turtle.forward(step)Note como mandamos para trás a tartaruga. A partir daqui … use a sua imaginação.
Sem comentários:
Enviar um comentário