Vamos então dividir a solução em duas partes: uma para desenhar o alvo, e outra para simular o lançamento do dardo. Por outro lado, vamos fazer com que o desenho do alvo seja feito à custa de uma mesma função, a que desenha um círculo de uma dada cor, numa dada posição e com o dado raio. Essa função chama-se circunf. A partir dela desenhar o alvo é fácil (função alvo). Estas última precisa saber apenas o centro do alvo e o valor dos raios. Os cuidados a ter são desenhar as circunferências da maior para a mais pequena (notar o ordenamento inverso da lista dos raios), e controlar a alternância das cores.
O lançamento do dardo recorre ao módulo random para geral a posição, e ao comando dot para marcar a localização do dardo. Neste último caso, não conhecendo o comando dot, podia socorrer-se uma vez mais ao desenho de uma circunferência…
import turtle def circunf(posx, posy, raio, cor): # posiciona turtle.pu() turtle.goto(posx,posy-raio) turtle.pd() # define cor e desenha turtle.fillcolor(cor) turtle.begin_fill() turtle.circle(raio) turtle.end_fill() turtle.hideturtle() def alvo(posx, posy,raios): """ raios: lista dos raios dos discos """ raios.sort(reverse=True) cor = 'black' for raio in raios: circunf(posx,posy,raio,cor) if cor == 'black': cor = 'white' else: cor = 'black' def dardo(): import random posx = random.randint(-100,100) posy = random.randint(-100,100) turtle.pu() turtle.goto(posx,posy) turtle.pd() turtle.dot(8,'red') turtle.hideturtle() if __name__ == ‘__main__’: alvo(0,0,[20,40,60,80]) dardo() turtle.exitonclick()Como se pode ver pelo código o programa é facilmente generalizável. Alvo de vários tamanhos (directo) e cores (passando as cores para argumentos), por exemplo.
Sem comentários:
Enviar um comentário