Les cours d’initiation à la programmation Python touchent à leur fin.
Les Jeunes ont été sensibilisés aux notions suivantes :
- comment représenter des nombres, des chaines de caractères et des listes
- qu’appelle-t-on une « variable » et comment s’en sert-on
- comment faire des tests avec la construction « if…..else… »
- comment faire des boucles avec « for » et « while »
- pourquoi factoriser son code et définir des fonctions
- qu’est-ce-qu’un paramètre de fonction
L’objectif final était de réaliser, par étapes successives, un début de jeu simple mettant en oeuvre un objet qui se déplace automatiquement (ici, une tortue) et qu’on cherche à faire rentrer en collision avec une balle dirigée par le joueur. A chaque collision, un indicateur de score est incrémenté.
Voici le code final :
import turtle as tt from random import randint pos_x, pos_y = 0, 0 DIAMETRE = 20 COULEUR = 'red' VITESSE = 10 LARGEUR = 300 HAUTEUR = 300 ma_tortue = tt.Turtle() ma_tortue.shape('turtle') ma_tortue.up() ma_tortue.speed(0) ma_tortue_x = randint(60, LARGEUR//2-30) ma_tortue_y = randint(60, HAUTEUR//2-30) ma_tortue.setheading(randint(0, 359)) TORTUE_VITESSE = 15 TORTUE_DELAI = 300 mon_score = tt.Turtle() mon_score.hideturtle() mon_score.up() mon_score_x = LARGEUR//2 - 20 mon_score_y = -HAUTEUR//2 + 20 mon_score.goto(mon_score_x, mon_score_y) mon_score.pencolor("black") score = 0 def affiche(): tt.hideturtle() tt.up() tt.goto(pos_x, pos_y) tt.down() tt.clear() tt.dot(DIAMETRE, COULEUR) def deplace_horiz(delta): global pos_x pos_x += delta affiche() def deplace_vert(delta): global pos_y pos_y += delta affiche() def deplace_gauche(): if pos_x - VITESSE > -LARGEUR / 2: deplace_horiz(-VITESSE) def deplace_droite(): if pos_x + VITESSE < LARGEUR / 2: deplace_horiz(VITESSE) def deplace_haut(): if pos_y + VITESSE < HAUTEUR / 2: deplace_vert(VITESSE) def deplace_bas(): if pos_y - VITESSE > -HAUTEUR / 2: deplace_vert(-VITESSE) def deplace_tortue(): x, y = ma_tortue.position() ma_tortue.forward(TORTUE_VITESSE) # test de collision global TORTUE_DELAI, score if abs(pos_x - x) < DIAMETRE/2 and abs(pos_y - y) < DIAMETRE/2: TORTUE_DELAI -= int(TORTUE_DELAI * .1) score += 1 mon_score.clear() mon_score.write(score, font=("Aria", 14, "bold")) if x > LARGEUR/2: ma_tortue.goto(-LARGEUR/2, y) elif x < -LARGEUR/2: ma_tortue.goto(LARGEUR/2, y) if y > HAUTEUR/2: ma_tortue.goto(x, -HAUTEUR/2) elif y < -HAUTEUR/2: ma_tortue.goto(x, HAUTEUR/2) tt.ontimer(deplace_tortue, TORTUE_DELAI) # programme principal tt.speed(0) tt.setup(LARGEUR + DIAMETRE, HAUTEUR + DIAMETRE) tt.screensize(canvwidth=LARGEUR, canvheight=HAUTEUR) affiche() tt.listen() tt.onkeypress(deplace_gauche, "Left") tt.onkeypress(deplace_droite, "Right") tt.onkeypress(deplace_haut, "Up") tt.onkeypress(deplace_bas, "Down") ma_tortue.goto(ma_tortue_x, ma_tortue_y) tt.ontimer(deplace_tortue, TORTUE_DELAI) tt.mainloop()