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