Un projet pour approfondir l’apprentissage de la programmation en L1: atelier Prog&Play E. Delozanne, P. Jarraud, M. Muratet 1
Le projet : Prog&Play Logiciel développé par Mathieu Muratet (IRIT) – Objectif – Motiver les étudiants pour la programmation Principe – Jeu de stratégie temps réel (STR) – Contrôler les unités par la programmation pour être meilleur que ses adversaires – Langages disponibles : C, C++, Java, Ada, Ocaml, Scratch, algorithmique 2
Principe des jeux STR Gérer des ressources Construire des unités Définir des objectifs – Éliminer les unités de l’adversaire – Résister aux assauts – Atteindre une position Définir et mettre en œuvre des stratégies 3
Le jeu P&P Mission Défis de programmation Scénarios de jeu Jeu Contre l’ordinateur Multijoueur 4
Génération des unités kernel bit octet assembleur pointeur socket terminal 5
Étudiants : 4 Objectifs de l’UE TICE : apprendre en jouant Est-ce qu’on apprend en jouant sur un ordinateur et quoi ? Programmation : apprendre sur un projet Mettre en œuvre les concepts de base de la programmation sur une application d’une certaine importance Jeu de stratégie Programmer en utilisant une bibliothèque de fonctions Communication : préparer une soutenance Exposer le résultat du projet en s’appuyant sur un diaporama Rédiger un rapport d’activité C2i : valider les épreuves pratiques 6
Enseignants : objectifs de l’UE Pédagogie de projet – Résoudre un problème ouvert et plus conséquent que les problèmes de TD-TP sur un sujet a priori motivant de façon assez autonome Produire une solution complète Approfondir les connaissances en algorithmique et en C – Décomposer un problème en sous-problèmes – Utiliser une bibliothèque de fonctions à partir d’un fichier d’en-tête et des commentaires 7
Chercheur : objectif Étudier en quoi programmer un jeu pouvait intéresser l’enseignement de la programmation en L1 ? Pour quels types d’étudiants ? Comment adapter Porg&Play à notre contexte ? 8
Organisation de l’atelier DateContenuLivrables 16 mars Présentation et installation du jeu Familiarisation avec le jeu Missions en langage algorithmique Questionnaire pré-expérimental 23 mars Compléments de C, Structures de données Programmation des premières missions 23 mars- 6 avril, En binôme : Développement des missions suivantes, rédaction du rapport 6 avril Point sur le projet, problèmes et solutions Programme des 6 premières missions 27 avril Test des programmes en jouant en réseauProgramme de la mission 7 4 mai Soutenance orale (15 min)Rapport Diaporama Questionnaire post-expérimental 9
Programmer les missions 1.Déplacer une unité à un endroit donné (séquence) 2.Déplacer une unité dans une direction donnée (séquence) 3.Regrouper des unités de même nature (alternative) 4.Déplacer un groupe d’unités (répétition) 5.Chercher l’assembleur et le déplacer (répétition et alternative) 6.Recharger toutes les unités endommagées (répétitions imbriquées) 7.Regrouper les unités et lancer l’attaque (problème ouvert, utilisation d’une bibliothèque) 10
Remplir une mission Éditez un programme en langage Algorithmique (pour comprendre) puis en C Sauvegarder le programme dans le répertoire C_Algo_Interface (resp. C_Interface) Compiler Construire Lancer la mission Exécuter le programme 11
Un mini-langage algorithmique Programme principal : Debut Fin Structure de contrôle conditionnelle : Si Alors FinSi Si Alors Sinon FinSi Structure de contrôle itérative : TantQue Faire FinTantQue Opérateurs de comparaison : ==,, =, != Opérateurs booléen: Et, Ou, Non Constantes : VRAI, FAUX 12
Mission 4 (1/3) Debut /* Déplacer toutes les unités vers l’assembleur */ OUVRIR_JEU ; TantQue la dernière unité n’est pas atteinte Faire Déplacer l’unité courante vers l’assembleur ; FinTantQue FERMER_JEU ; Fin
Mission 4 (2/3) Debut /* Déplacer toutes les unités vers l’assembleur */ OUVRIR_JEU ; /* Parcourir toutes les unités */ PREMIERE_UNITE ; TantQue current_unit != DERNIERE_UNITE Faire /* Déplacer l’unité courante vers l’assembleur */ DEPLACER_VERS(256, 1024) ; UNITE_SUIVANTE ; FinTantQue /* Déplacer la dernière unité */ DEPLACER_VERS(256, 1024) ; FERMER_JEU ; Fin
Mission 4 (3/3) int i; // compteur de boucle PP_Unit u; // unité courante PP_Pos pos; // définition de la cible pos.x = 256.0; pos.y = ; PP_Open(); // ouverture du jeu PP_Refresh();// récupérer l'état courant du jeu i = 0; // parcourir toutes les unités while (i < PP_GetNumUnits(ME)){ u = PP_GetUnitAt(ME, i); // récupérer l'unité courante PP_Unit_ActionOnPosition(u, MOVE, pos); // ordre de déplacement i++; } PP_Close(); // fermer le jeu 15
Conclusion Expérience intéressante car les étudiants – s’impliquent – questionnent sur « le vrai C » – sont obligés de s’appuyer uniquement sur des commentaires pour trouver dans une bibliothèque les fonctions qu’ils cherchent – mettent en œuvre des stratégies diversifiées Guerre éclair, arme fatale, diversion Pas d’effet marquant sur la réussite à l’examen de C Sur l’orientation des étudiants ? 16