« Hacker » un jeu vidéo

« 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 !
Les commentaires sont clos.