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.
01.from cTurtle import *
02. 
03.def add_ponteiro(tarta):
04.    tarta.setheading(90)
05.    tarta.polystart()
06.    tarta.fd(100)
07.    tarta.lt(90)
08.    tarta.fd(20)
09.    tarta.rt(120)
10.    tarta.fd(40)
11.    tarta.rt(120)
12.    tarta.fd(40)
13.    tarta.rt(120)
14.    tarta.fd(20)
15.    tarta.polyend()
16.    ponteiro = tarta.getpoly()
17.    tarta.addshape('meu_ponteiro',ponteiro)
18.     
19.if __name__ == '__main__':
20.    tarta = Turtle()
21.    add_ponteiro(tarta)
22.    tarta.clear()
23.    tarta.setheading(90)
24.    tarta.shape('meu_ponteiro')
25.    tarta.fillcolor('blue')
26.    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:

01.from cTurtle import *
02. 
03.def add_ponteiro(tarta):
04.    tarta.setheading(90)
05.    tarta.polystart()
06.    tarta.fd(100)
07.    tarta.lt(90)
08.    tarta.fd(20)
09.    tarta.rt(120)
10.    tarta.fd(40)
11.    tarta.rt(120)
12.    tarta.fd(40)
13.    tarta.rt(120)
14.    tarta.fd(20)
15.    tarta.polyend()
16.    ponteiro = tarta.getpoly()
17.    tarta.addshape('ponteiro',ponteiro)
18.     
19.def segundos():
20.    tarta.setheading((tarta.heading() - 6) % 360)
21.    tarta.onTimer(segundos,500)
22. 
23.if __name__ == '__main__':
24.    tarta = Turtle()
25.    add_ponteiro(tarta)
26.    tarta.clear()
27.    tarta.setheading(90)
28.    tarta.shape('ponteiro')
29.    tarta.fillcolor('blue')
30.    segundos()
31.    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