Voici le code.
A part changer l’image de fond, je me suis contenté de prendre le code du site.
import turtle
from random import randint
import sys
TITRE = "Clique la tortue !"
IMAGE_FOND = "tortue.png"
LARGEUR, HAUTEUR = 640, 480
COULEURS = { 'black' : 1, 'grey' : 1,
'brown' : 2, 'orange' : 2,
'pink' : 4, 'yellow': 4,
'purple' : 8, 'green' : 8,
'blue' : 16,
'red' : 32 }
CLES_COULEURS = list(COULEURS.keys())
TEMPS_APPARITION = 1000
class Bonus(turtle.Turtle):
jeu = None
def __init__(self):
"""Constructeur"""
turtle.Turtle.__init__(self)
self.niveau = 1
self.cout_niveau = self.niveau * 10
self.bouton_bonus()
self.onclick(lambda x, y : self.niveau_suivant())
def bouton_bonus(self):
"""Affichage du bouton lié au bonus"""
self.speed(0)
self.shape("square")
self.shapesize(1.5)
self.color("lightblue", "darkblue")
self.up()
self.goto(LARGEUR // 2 - 25, -HAUTEUR // 2 + 25)
def niveau_suivant(self):
"""Gestion passage au niveau suivant"""
if Bonus.jeu != None:
if jeu.points >= self.cout_niveau:
self.onclick(None)
Bonus.jeu.points -= self.cout_niveau
self.niveau += 1
self.cout_niveau = self.niveau * 10
Bonus.jeu.affiche_bonus()
Bonus.jeu.affiche_nombre_points()
self.onclick(lambda x, y : self.niveau_suivant())
class Tortue(turtle.Turtle):
jeu = None
def __init__(self):
"""Constructeur"""
turtle.Turtle.__init__(self)
self.hideturtle()
self.couleur_trace = self.couleur_remplissage = None
self.initialise_tortue()
self.showturtle()
def initialise_tortue(self):
"""Initialise la tortue"""
self.couleur_trace = CLES_COULEURS[randint(0, len(CLES_COULEURS)-1)]
self.couleur_remplissage = CLES_COULEURS[randint(0, len(CLES_COULEURS)-1)]
self.color(self.couleur_trace, self.couleur_remplissage)
self.speed(0); self.shape("turtle"); self.setheading(randint(0, 359))
self.up()
self.goto(randint(-LARGEUR//2+15, LARGEUR//2-15),
randint(-HAUTEUR//2+40, HAUTEUR//2-15))
self.onclick(lambda x, y : self.clique_tortue())
def clique_tortue(self):
"""Gestion du clique sur la tortue"""
if Tortue.jeu != None:
self.onclick(None)
points = COULEURS[self.couleur_remplissage]
if self.couleur_trace == self.couleur_remplissage:
points *= 2
points += jeu.bonus.niveau - 1
Tortue.jeu.points += points
Tortue.jeu.affiche_nombre_points()
self.hideturtle()
del self
class Jeu():
def __init__(self):
"""Constructeur"""
self.ecran = turtle.Screen()
self.points = 0
self.bonus = Bonus()
self.crayon = turtle.Turtle()
self.initialise_crayon()
self.initialise_fenetre()
self.lie_classe()
def initialise_crayon(self):
"""Initialise crayon de la fenêtre"""
self.crayon.speed(0)
self.crayon.hideturtle()
self.crayon.up()
def initialise_fenetre(self):
"""Initialise la fenêtre"""
self.ecran.setup(LARGEUR, HAUTEUR)
self.ecran.title(TITRE)
self.ecran.bgpic(IMAGE_FOND)
self.affiche_nombre_points()
self.affiche_bonus()
self.ecran.onscreenclick(lambda x, y : self.quitter(), 3)
def lie_classe(self):
"""Lie les classe Bonus et Tortue au jeu"""
Tortue.jeu = self
Bonus.jeu = self
def affiche_bonus(self):
"""Affiche le niveau actuel"""
self.crayon.up()
self.crayon.goto(-140, - HAUTEUR // 2 + 10)
self.dessine_rectangle((30, 375), ('darkblue', 'lightblue'))
self.crayon.pencolor("black")
self.crayon.forward(10)
self.crayon.write("Bonus niveau {} (Up pour : {} points)".format
(self.bonus.niveau, self.bonus.cout_niveau),
align = "left",
font = ("Aria", 14, "bold"))
def dessine_rectangle(self, dimensions, couleurs):
"""Dessine un rectangle personnalisé"""
self.crayon.setheading(0)
self.crayon.color(couleurs[0], couleurs[1])
self.crayon.down()
self.crayon.begin_fill()
for i in range(4):
if i%2 == 0:
self.crayon.forward(dimensions[1])
else:
self.crayon.forward(dimensions[0])
self.crayon.left(90)
self.crayon.end_fill()
self.crayon.up()
def tour_de_jeu(self):
"""Gestion du tour de jeu"""
if self.bonus.niveau >= 20:
self.crayon.up()
self.crayon.home()
self.crayon.pencolor("darkblue")
self.crayon.write("Victoire !",
align = "center",
font = ("Arial", 27, "bold"))
self.ecran.ontimer(self.quitter, TEMPS_QUITTER)
else:
Tortue()
self.ecran.ontimer(self.tour_de_jeu, TEMPS_APPARITION)
def affiche_nombre_points(self):
"""Affiche le nombre de points"""
self.crayon.up()
self.crayon.goto(-LARGEUR // 2 + 5, - HAUTEUR // 2 + 10)
self.dessine_rectangle((30, 140), ('darkblue', 'lightblue'))
self.crayon.pencolor("black")
self.crayon.forward(10)
self.crayon.write("{} point(s)".format(self.points),
align = "left",
font = ("Arial", 15, "bold"))
def quitter(self):
"""Fin du game"""
self.ecran.bye()
sys.exit(0)
if __name__ == "__main__":
jeu = Jeu()
jeu.ecran.ontimer(jeu.tour_de_jeu, TEMPS_APPARITION)