« Hacker » un jeu vidéo
Un atelier pour la Fête de la Science 2022
Derrière ce titre volontairement accrocheur, se cache une initiation ludique à la programmation en Python, qui s’adresse à des élèves de collège et lycée. Il s’agira de faire fonctionner et de modifier une version écrite en Python, d’un des premiers jeux vidéo dits « d’arcade » (Blockade, 1976, voir photo).
- Date : vendredi 14 octobre 2022
- Lieu : CERI, salle stat 9
- Horaires : 9h15 – 16h
- Animateurs : Pierre Jourlin & Jarod Duret
Procédure :
- Se connecter sur l’ordinateur avec l’identifiant et mot de passe donné sur papier par vos animateurs
- Ouvrir un « terminal » (CTRL+ALT+T)
- tapez «
python3 -m pip install -U pygame --user
» et appuyez sur<entrée>
- tapez « geany & » appuyez sur
<entrée>
- copiez le code source suivant dans la fenêtre de l’éditeur :
import pygame
import time
import random
pygame.init()
# Définition des couleurs en composante (Rouge, Vert, Bleu)
blanc = (255, 255, 255)
jaune = (255, 255, 102)
noir = (0, 0, 0)
rouge = (213, 50, 80)
vert = (0, 255, 0)
bleu = (50, 153, 213)
largeur_plateau = 600
hauteur_plateau = 400
plateau = pygame.display.set_mode( ( largeur_plateau, hauteur_plateau ) )
pygame.display.set_caption("Le Serpent Numérique du LIA")
horloge = pygame.time.Clock()
taille_bloc = 20
vitesse_serpent = 5
style_caractères = pygame.font.SysFont("bahnschrift", 25)
style_scores = pygame.font.SysFont("comicsansms", 35)
def votre_score(score):
valeur = style_scores.render("Votre Score: " + str(score), True, jaune)
plateau.blit(valeur, [0, 0])
def notre_serpent(taille_bloc, corps_serpent):
for x in corps_serpent:
pygame.draw.rect(plateau, noir, [x[0], x[1], taille_bloc, taille_bloc])
def message(msg, color, décalage=0):
mesg = style_caractères.render(msg, True, color)
plateau.blit(mesg, [largeur_plateau / 6, hauteur_plateau / 3+décalage])
def boucle_jeu():
fin_jeu = False
ferme_jeu = False
x1 = largeur_plateau / 2
y1 = hauteur_plateau / 2
x1_change = 0
y1_change = 0
corps_serpent = []
longueur_serpent = 1
repas_x = round(random.randrange(0, largeur_plateau - taille_bloc) / taille_bloc) * taille_bloc
repas_y = round(random.randrange(0, hauteur_plateau - taille_bloc) / taille_bloc) * taille_bloc
while not fin_jeu:
while ferme_jeu == True:
plateau.fill(bleu)
message("Zut ! Vous avez perdu !", rouge)
message("Appuyez sur J pour jouer encore", jaune, 20)
message("ou sur Q pour quitter le jeu.", jaune, 40)
votre_score(longueur_serpent - 1)
pygame.display.update()
for évènement in pygame.event.get():
if évènement.type == pygame.KEYDOWN:
if évènement.key == pygame.K_q:
fin_jeu = True
ferme_jeu = False
if évènement.key == pygame.K_j:
boucle_jeu()
for évènement in pygame.event.get():
if évènement.type == pygame.QUIT:
fin_jeu = True
if évènement.type == pygame.KEYDOWN:
if évènement.key == pygame.K_LEFT:
x1_change = -taille_bloc
y1_change = 0
elif évènement.key == pygame.K_RIGHT:
x1_change = taille_bloc
y1_change = 0
elif évènement.key == pygame.K_UP:
y1_change = -taille_bloc
x1_change = 0
elif évènement.key == pygame.K_DOWN:
y1_change = taille_bloc
x1_change = 0
if x1 >= largeur_plateau or x1 < 0 or y1 >= hauteur_plateau or y1 < 0:
ferme_jeu = True
x1 += x1_change
y1 += y1_change
plateau.fill(bleu)
pygame.draw.rect(plateau, vert, [repas_x, repas_y, taille_bloc, taille_bloc])
tête_serpent = []
tête_serpent.append(x1)
tête_serpent.append(y1)
corps_serpent.append(tête_serpent)
if len(corps_serpent) > longueur_serpent:
del corps_serpent[0]
for x in corps_serpent[:-1]:
if x == tête_serpent:
ferme_jeu = True
notre_serpent(taille_bloc, corps_serpent)
votre_score(longueur_serpent - 1)
pygame.display.update()
if x1 == repas_x and y1 == repas_y:
repas_x = round(random.randrange(0, largeur_plateau - taille_bloc) / taille_bloc) * taille_bloc
repas_y = round(random.randrange(0, hauteur_plateau - taille_bloc) / taille_bloc) * taille_bloc
longueur_serpent += 1
horloge.tick(vitesse_serpent)
pygame.quit()
quit()
- Les animateurs vont vous expliquer rapidement ce code source
- Enregistrez le fichier sous le nom «
serpent.py
» et revenez au terminal - Dans le terminal, tapez «
python3 serpent.py
« - Jouez 2 ou 3 parties 🙂
- Modifiez quelques paramètres élémentaires du jeu :
- Les couleurs
- Taille du plateau
- Textes
- Taille Serpent
- Vitesse serpent
- Style des caractères
- Ajoutez quelques fonctions :
- Changer longueur initale du serpent
- Repas vert -> allongement de 1
- Repas jaune -> allongement de 2
- Repas rouge -> allongement de 3
- allongement -> augmentation/réduction vitesse
- Création d’un hall of Fame
- 2 joueurs (difficile)
- A tout moment, n’hésitez pas à demander de l’aide aux animateurs
- A vous de jouer et à vous de créer !