# on importe le module turtle :
import turtle
# module pour fonction sleep :
import time
# dimension du canevas :
turtle.setworldcoordinates(-240, - 120, 240, 120)
# une première tortue qui servira aux dessins des axes, grille de points, balle :
preparation = turtle.Turtle()
# la tortue qui servira au "jeu" :
caroline = turtle.Turtle()
# tortue pour le message de victoire :
disque = turtle.Turtle()
def aller_a_sans_tracer(tortue, x, y) :
""" On place la tortue en (x,y) sans tracer."""
tortue.penup()
tortue.goto(x, y)
tortue.pendown()
def dessine_point(x, y, diametre, couleur) :
""" Dessine un point,
de diamètre = diametre. """
# la tortue se place en (x,y) sans tracer :
aller_a_sans_tracer(preparation, x, y)
# la tortue dessine un disque noir :
preparation.pensize(diametre)
preparation.pencolor(couleur)
preparation.dot()
def dessine_grille(pas, cigx, cigy, csdx, csgy) :
""" (cigx, cigy) : coordonnées du coin inférieur gauche
du rectangle délimitant la grille.
(csdx, csgy) : coordonnées du coin supérieur droit.
"""
for x in range( cigx, csdx + pas, pas) :
for y in range( cigy, csgy + pas, pas) :
dessine_point(x, y, 3, 'black')
def dessine_axes( cigx, cigy, csdx, csgy) :
"""
(cigx, cigy) : coordonnées du coin inférieur gauche
du rectangle délimitant la grille.
(csdx, csgy) : coordonnées du coin supérieur droit.
"""
preparation.pencolor('black')
# axe des abscisses :
aller_a_sans_tracer(preparation, cigx, 0)
preparation.pendown()
preparation.goto(csdx, 0)
preparation.penup()
# axe des ordonnées :
aller_a_sans_tracer(preparation, 0, cigy)
preparation.pendown()
preparation.goto(0, csgy)
preparation.penup()
def dessine_balle(x,y) :
"""dessine une balle et la place en position (x,y). """
dessine_point(x, y, 6, 'red')
def depart() :
"""place la tortue en (-120, -80)
et une balle en (160, 120). """
dessine_balle(160, 120)
aller_a_sans_tracer(caroline, -120, -80)
caroline.setheading(90)
def balle_attrapee() :
if caroline.position() == (160, 120) :
# affichage du message :
disque.write("Tu m'as attrapée.", font=("Arial", 12, "normal"))
# attente de 2 secondes :
time.sleep(2)
# retour à l'état initial :
raz()
def pas_gauche():
# on lève le crayon pour s'assurer de ne rien tracer :
caroline.penup()
# un pas à gauche de -40
#(on pourrait utiliser un paramètre plutôt que cette valeur fixe de -40) :
caroline.setheading(180)
caroline.forward(40)
balle_attrapee()
def pas_droit():
# on lève le crayon pour s'assurer de ne rien tracer :
caroline.penup()
# un pas à gauche de -40
#(on pourrait utiliser un paramètre plutôt que cette valeur fixe de -40) :
caroline.setheading(0)
caroline.forward(40)
balle_attrapee()
def pas_haut():
# on lève le crayon pour s'assurer de ne rien tracer :
caroline.penup()
# un pas à gauche de -40
#(on pourrait utiliser un paramètre plutôt que cette valeur fixe de -40) :
caroline.setheading(90)
caroline.forward(40)
balle_attrapee()
def pas_bas():
# on lève le crayon pour s'assurer de ne rien tracer :
caroline.penup()
# un pas à gauche de -40
#(on pourrait utiliser un paramètre plutôt que cette valeur fixe de -40) :
caroline.setheading(-90)
caroline.forward(40)
balle_attrapee()
def raz() :
""" fonction de remise à zéro. """
# on efface le message de la partie précédente :
disque.reset()
# la tortue disque n'est pas dessinée :
disque.hideturtle()
# la tortue disque se rend à la position d'affichage du message :
aller_a_sans_tracer(disque, 140, 100)
# caroline retourne à sa position de départ :
aller_a_sans_tracer(caroline, -120, -80)
caroline.setheading(90)
def initialise() :
# la tortue disque n'est pas dessinée :
disque.hideturtle()
# la tortue disque se rend à la position d'affichage du message :
aller_a_sans_tracer(disque, 140, 100)
# la tortue preparation ne sera pas dessinée :
preparation.hideturtle()
# la tortue preparation est rapide :
preparation.speed(0)
# caroline est dessinée sous forme d'une tortue :
caroline.shape('turtle')
# dessin des axes :
dessine_axes(-240, -120, 240, 120)
# dessin de la grille de points :
dessine_grille(40, -240, -120, 240, 120)
# les positions au départ du jeu :
depart()
initialise()
# on crée une variable de type Screen :
screen = turtle.Screen()
# on associe la fonction pas_gauche à l'appui de la touche flèche gauche :
screen.onkey(pas_gauche, 'Left')
screen.onkey(pas_droit, 'Right')
screen.onkey(pas_haut, 'Up')
screen.onkey(pas_bas, 'Down')
# on lance une écoute des événements :
screen.listen()
turtle.exitonclick()