sábado, 2 de janeiro de 2010

A forma da tartaruga

Conhecemos as formas que uma tartaruga pode assumir. Bem, se não soubermos basta fazer um teste simples:




Com o método getshapes ficamos a saber as formas conhecidas para a tartaruga, e como método shape podemos definir o valor pretendido.


Mas também podemos criar novas formas e adicioná-las sem grande dificuldade. Para isso basta criar uma forma como se mostra no código abaixo.

from cTurtle import *

def add_ponteiro(tarta):
tarta.setheading(90)
tarta.polystart()
tarta.fd(100)
tarta.lt(90)
tarta.fd(20)
tarta.rt(120)
tarta.fd(40)
tarta.rt(120)
tarta.fd(40)
tarta.rt(120)
tarta.fd(20)
tarta.polyend()
ponteiro = tarta.getpoly()
tarta.addshape('meu_ponteiro',ponteiro)

if __name__ == '__main__':
tarta = Turtle()
add_ponteiro(tarta)
tarta.clear()
tarta.setheading(90)
tarta.shape('meu_ponteiro')
tarta.fillcolor('blue')
tarta.exitOnClick()

O método consiste na criação de um objecto definido entre polystart e polyend. Depois vamos buscá-lo (getpoly) e associá-lo a um nome (ponteiro). Finalmente adicionamos a nova forma (addshape), dando-lhe um nome (‘meu_ponteiro’). Depois é só usar:




Mas será possível manipular esta forma, como se de um objecto normal se tratasse? A resposta é: sim! Vejamos um exemplo. Aqui vamos usar o método onTimer. Tem dois argumentos: o primeiro, é o nome de uma função, o segundo, é um temporizador em milisegundos. Significa que a função vai ser activada de tantos em tantos milisegundos. No nosso exemplo a função a única coisa que faz é mudar a orientação da tartaruga. Eis o código:


from cTurtle import *

def add_ponteiro(tarta):
tarta.setheading(90)
tarta.polystart()
tarta.fd(100)
tarta.lt(90)
tarta.fd(20)
tarta.rt(120)
tarta.fd(40)
tarta.rt(120)
tarta.fd(40)
tarta.rt(120)
tarta.fd(20)
tarta.polyend()
ponteiro = tarta.getpoly()
tarta.addshape('ponteiro',ponteiro)

def segundos():
tarta.setheading((tarta.heading() - 6) % 360)
tarta.onTimer(segundos,500)

if __name__ == '__main__':
tarta = Turtle()
add_ponteiro(tarta)
tarta.clear()
tarta.setheading(90)
tarta.shape('ponteiro')
tarta.fillcolor('blue')
segundos()
tarta.exitOnClick()

O resultado pode ser visto neste vídeo caseiro, com um final à Charlot! E porque não fazer um relógio digital com base nesta ideia??



Sem comentários:

Enviar um comentário