Jeu et apprentissage de la programmation

Frédéric Blanchard et Pascal Thérèse

I. Introduction

Éléments de contexte

Attractivité de la spécialité

Risques :

  • réduction de la diversité des profils
  • spécialisation / geekisation
  • confirmation de la « genrification »

Leviers possibles

« Les filles n’ont pas forcément de freins, mais des intérêts différents.»

« C’est avant tout un conditionnement qui survient bien en amont de la première et du lycée.»

La discipline est-elle austère ?

Les clichés sont-ils trop tenaces ?

Solution : le jeu vidéo !

Le jeu-vidéo : un truc de geek ?

Note

Infographie extraite de l’« essentiel du jeu vidéo » de nov. 2022, édité par le SELL, d’après une étude SELL/Médiamétrie « Les français et le jeu vidéo »

Important

Le Syndicat des Éditeurs de Logiciels de Loisirs est une association professionnelle composée d’entreprises du secteur du jeu vidéo.

Note

Infographie extraite de l’« 2022 Gaming Spotlight », publié par data.ai

Important

data.ai est une société de services d’analyse du marché mobile

Note

Sources : article wikipedia consacré aux jeux vidéo les plus vendus

Important

Ce classement, qu’on peut retrouver à de nombreux endroits est très discutable et discuté ; le comptage est en effet difficile à cause -notamment- du nombre de versions différentes de ces jeux.

  1. Minecraft
  2. GTA V
  1. Tetris
  2. WiiSport

Exemple éloquent

En 2020, Nintendo vendait plus de 22 millions licences de Animal Crossing: New Horizons en 6 mois.

Utiliser le jeu vidéo

   

Un prétexte pour mobiliser la créativité, l’imagination et le travail en équipe, dans un contexte ludique

Changer l’image du jeu vidéo

II. Environnements vidéoludiques d’apprentissage de la programmation

Apprendre en s’amusant

  • Acquérir et mobiliser des compétences dans un jeu
  • Le sujet informatique constitue le gameplay

Quelques environnements testés

Pyrates : apprendre python

Pyrates

Pyrates : apprendre python

Pyrates-test

SQL Murder Mystery : apprendre SQL

Le jeu des brassards : réseau

Terminus : apprendre des commandes linux

Terminus : apprendre des commandes linux

Liste non exhaustive d’autres ressources

Voir tableau collaboratif créé par Pascal

  

Avantages

  • ludique
  • environnement contrôlé
  • progressivité
  • autonomie

Inconvénient

Effet « scratch »1 :

  • peut paraître infantilisant
  • et induire un biais dans l’apprentissage

III. Apprendre à programmer en créant un jeu-vidéo

L’idée

Créer soi-même un jeu, avec les compétences acquises ou pré-acquises en classe.

Les atouts

  • Ludique Concevoir un jeu est parfois plus amusant qu’y jouer. L’objectif « divertissement » désaustérise la matière.

  • Inclusif Créer un jeu vidéo requiert :

    • créativité,
    • imagination,
    • organisation
  • Complet Algorithmique, programmation, base-de-données voire réseau… La création de jeux couvre une grande partie du programme

Les risques

  • Découragement : il s’agit de projets assez longs et chronophages

  • Déception : vouloir atteindre les « standards » des jeux du commerce est illusoire, le résultats peut être décevant

  • Noyade : certains éléments d’un jeu peuvent s’avérer critiques et nécessiter une technicité hors de portée

Le cadrage

ALERTE

Le cadrage est essentiel

Les contraintes fixées par le cadrage du projet permettent d’éviter les écueils précédemment cités.

Elles permettent à ceux qui suivent les projets de factoriser l’aide technique apportée

Les contraintes

Cadrer un projet de jeu vidéo consiste à fixer la réponse à une ou plusieurs de ces questions :

  • Temps réel ou tour par tour ? Type de jeu ?
  • Rendu 2D, 3D, texte ?
  • Un joueur ? Deux ? Plus ?
  • PNJ/IA ?
  • Avec quel outil ?
  • Autres « figures imposées » ?
  • Plateforme ?
  • Public visé ?

Le type de jeu

Il n’existe pas de typologie ni de nomenclature qui fasse autorité, on peut cependant lister ces dénominations fréquemment utilisées :

FPS, Combat, Simulation, Plateforme, RPG, MMORPG, Sandbox, MOBA, Battle Royale, Action, Aventure, Beat Them All, Puzzlers, Réflexion, Survival Horror, Rogue Like, Rythme…

La difficulté ne dépend pas vraiment de la catégorie du jeu.

Conseils

Simplicité

  • Priviligier le design simple
  • Préférer le tour-par-tour au temps-réel
  • Choisir de préférence des outils déjà utilisés en classe
  • Procéder avec parcimonie : ne compliquer la mécanique du jeu qu’itérativement

Exemples de jeux-simples à succès

Exemples de jeux-simples à succès

Exemples de jeux-simples à succès

Exemples de jeux-simples à succès

Exemples de jeux-simples à succès

Exemples de jeux-simples à succès

Inspiration

Astuce

Les jeux

  • de sociétés,
  • de rôle,
  • de cartes,
  • de pions,
  • de dés,

constituent une excellente source d’inspiration, et induisent un gameplay plus facile à implémenter.

Imagination et narration

La narration, et l’« écriture » du scenario sont essentielles.

Elles sont aussi un bon moyen d’impliquer les participants qui manquent de confiance en leurs compétences techniques.

L’univers « graphique » du jeu est un autre vecteur d’implication des élèves qui collent moins au stéréotype du gamer.

Réalisation

Gestion de projet

La création d’un jeu se prète particulièrement bien au travail en équipe.

La gestion de projet est importante (c’est d’ailleurs une figure imposée dans les trophées NSI)

Les frameworks python

Il existe de nombreuses bibliothèques qui facilitent le développement d’un jeu en python.

On peut distinguer :

  • les bibliothèques spécifiques : pygame, pygame zero, arcade, pyxel, ren’py, adventurelib
  • de celles qui ne sont pas dédiées au jeu : pygame (!), tkinter, asciimatics, pytermgui

Pygame

Pygamezero

Arcade

Arcade

Pyxel

Ren’Py

Ren’Py

Adenturelib

Pour les furieux : Kivy

from scratch

Les bibliothèques classiques, listées dans le programme de la spécialité peuvent s’avérer largement suffisants :

  • rien (avec quelques séquences d’échappement ANSI quand même)
  • pygame
  • turtle

On pourra leur ajouter keyboard qui permet facilement d’utiliser les touches du clavier pour jouer, et rich si les codes ANSI rebutent un peu trop ;-)

Valorisation / Évenements

Valoriser le jeu créé en le diffusant :

  • site web dédié
  • plateforme (itch.io)
  • présentation vidéo

Participation à des événements :

Mais… que travaille-t-on en créant un jeu ?

La boucle du jeu

La plupart des jeux peuvent s’implémenter à l’aide de la boucle suivante :

TANT QUE la partie n'est pas terminée FAIRE

    **Recueillir et traiter les actions des joueurs**

    **Mettre à jour l'état du jeu**

    Afficher le résultat

FIN TANT QUE

Manipulation des structures de données

Le choix de structures de données adaptées est un point essentiel pour représenter les caractéristiques du joueur et de son environnement.

Exemples :

  • joueur : dictionnaire,
  • inventaire : dictionnaire,
  • positions : tuple

Types abstraits de données

L’abstraction la plus fréquente d’un jeu est le graphe, dans lequel :

  • un sommet est un état du jeu
  • un arc entre deux sommets correspond à un coup ou une interaction faisant passer le jeu d’un état à un autre.

L’effort de modélisation est important.

Algorithmique

La programmation du comportement d’un PNJ (un agent qui n’est pas un joueur), appelé un peu abusivement “IA” repose le plus souvent sur des algorithmes de graphes (recherche de chemins optimaux, parcours, etc.)

Exemple : utilisation d’A* pour déplacer des ennemis du joueur

Algorithmique

La génération procédurale consiste à créer un environnement de manière automatisée, et nécessite de faire appel à des algorithmes avancés.

Exemple : générer un labyrinthe parfait aléatoirement

Communication, réseau

Pour les jeux multijoueurs, ou pour ceux qui nécessitent des ressourcent distantes, il sera nécessaire d’utiliser une architecture client/serveur et faire appel aux communications réseaux :

  • sockets
  • requêtes/api

Le temps-réel complique sérieusement l’affaire…

Paradigmes

  • Programmation objet
    • imposée par le framework
    • rendue nécessaire pour représenter des entités aux fonctions différentes
  • Programmation événementielle, asynchrone…
    • pour simplifier/accélerer la gestion des changements
    • gérer le temps

Exemples et expériences

Gamejam DUT Info (2017 à 2019)

Projet algo/maths BUT (2021/2022)

Objectif du projet initial : utiliser les algorithmes de graphes vus en cours pour générer et résoudre des labyrinthes

Projet de maths discrètes et d’algorithmique.

Projet algo/maths BUT (2021/2022)

« Mise en scène du travail réalisé : » en faire un rogue-like