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()