import turtle import random def bug(length, step, life): # initialization turtle.penup() theta = 0 dtheta = 1 turtle.color(random.choice([‘red','blue','yellow','green','black'])) # draw bug for j in range(length): turtle.forward(step) turtle.left(theta) theta += dtheta turtle.stamp() # move for i in range(life): turtle.clearstamps(1) if abs(ycor()) > 400: turtle.left(30) if abs(xcor()) > 400: turtle.right(30) if theta > 10 or theta < -10: dtheta = -dtheta turtle.forward(step) turtle.left(theta) theta += dtheta turtle.stamp() if __name__ == '__main__': turtle.setworldcoordinates(-500, -500, 500, 500) bug(10, 15, 500) turtle.exitonclick()O programa acima tem três parâmetros: o comprimento do verme (length), a amplitude de cada movimento (step), e o numero de movimentos (life), Tem também três partes distintas. Na primeira, inicializamos o sistema, definimos o valor da variação da orientação que nos permite simular um movimento ondulatório (dtheta), e escolhemos aleatoriamente uma cor. Na segunda, o primeiro ciclo for, desenhamos o verme inicial. Na terceira, pomos o verme e movimentar-se. Notar-se-á que fechamos a zona onde se pode movimentar, um quadrado 400X400. Com o método setworlcoordinates() limitamos o tamanho máximo do mundo. Execute o programa para ter uma ideia do que se passa. Procure alterar os vários parâmetros e ver as consequências. Altere o programa para que o passeio seja mais naturalmente aleatório. Nota: Este exemplo foi adaptado do livro de Mark J. Johnson "A concise introduction to programming ion Python".
domingo, 29 de novembro de 2015
Vermes em passeio
Vamos regressar ao módulo turtle para ilustrar um aspecto pouco referido nas aulas. É possível a tartaruga marcar os pontos por onde passou graças ao comando stamp(). Também se pode apagar as marcas com vários comandos, por exemplo, com clearstamps(). O leitor é convidado a consultar o manual da linguagem para os detalhes. O exemplo que se segue mostra como podemos simular um passeio (mais ou menos) aleatório de um verme.
Subscrever:
Enviar feedback (Atom)
Sem comentários:
Enviar um comentário