VISI301 CMI : projet de recherche et développement
- Cours du semestre 3 du parcours CMI informatique (licence info) et CMI mathématique (licence math).
- Responsables pour 2019--2020 : Jacques-Olivier Lachaud et Pierre Hyvernat
- Responsables pour 2018--2019 : Jacques-Olivier Lachaud et Pierre Hyvernat
- Responsables pour 2017--2018 : Jacques-Olivier Lachaud et Pierre Hyvernat
Descriptif
L'objectif de ce cours est de développer des compétences dans différents domaines de l'algorithmique et la programmation Python, au travers du développement d'un jeu. Les étudiants découvrent aussi les outils modernes de développement collaboratif (gestionnaire de version, pull requests, intégration continue). 7 séances sont prévues dans l'EDT mais il est attendu du travail personnel supplémentaire. Les projets se font par binôme ou trinôme. Le travail est évalué sur la base d'une démo et du rendu sur le serveur GitHub.
Les étudiants rencontreront à intervalle régulier leurs enseignants tuteurs pour le projet afin de rendre compte de leur avancée dans leur projet (démarche similaire à celle des Travaux Personnels Encadrés). Le type de jeu dévéloppé est laissé volontairement assez libre, de manière à ce que les étudiants développent leur imagination ainsi que leur capacités de réflexion et discussion collaboratives (brain-storming). Ils pourront aussi faire des recherches pour affiner leur modèle de jeu choisi.
Objectifs
L'idée est de réaliser un jeu en python. Le plus simple est d'inventer un jeu où
- la carte est représenté par une ou plusieurs grilles de jeu
- un ou plusieurs personnages se déplacent dans la grille (le(s) joueur(s), le(s) monstre(s))
- le jeu peut d'abord être développé pour être tour par tour.
- ensuite, c'est facile de le rendre "temps réel", en faisant que certains personnages jouent moins souvent que d'autres
- il y aura des niveaux générés aléatoirement
Cela permettra de développer pas mal d'aspects différents de l'algorithmique et de la programmation:
- structures de données pour représenter les plans de jeu, les personnages, les objets éventuels
- algorithmes de graphes pour générer des niveaux labyrinthiques
- programmation graphique pour afficher le décor et les éléments de jeu
- interfaces homme-machine pour diriger le jeu
- un peu d'intelligence artificielle pour faire jouer les personnages non joueurs (monstres, ennemis, amis ).
- entrées/sorties pour sauvegarder le jeu/ les niveaux
Ressources
On pourra se baser sur pygame , une bibliothèque Python pour faire des jeux.
Cela permet de faire facilement:
- les boucles d'interactions
- les affichages graphiques
- la gestion du clavier ou de la souris.
Pour l'inspiration, vous pouvez regarder pour le style RPG: nethack, moria, et les variantes (rogue, etc). Mais n'hésitez pas à venir avec vos propres idées.
Contraintes
- le projet sera fait en python (plus simple, développement plus rapide)
- les binômes (ou trinôme) seront tirés aléatoirement pour mélanger les promotions (CMI-math et CMI-info)
- vous utiliserez une plateforme de développement collaboratif Github
Critères d'évaluation
- Conception du jeu, réflexion initiale, originalité du jeu
- Réalisation, fluidité, ressenti général
- Intérêt du jeu, jouabilité, progressivité, richesse
- Méthodologie, régularité de l'avancement, communication avec les tuteurs
- Rendu final, doc utilisateur, packaging, installation
- Autonomie, recherches personnelles, montée en compétence
Sujets réalisés (2018-2019)
- Rémi Bouvier et Nils Ruet SnowForest
- Tristan Porteries et Robin Wagner Crazy Class
Sujets réalisés (2017-2018)
- Ambroise Decouttère et Raphaël Tournafond, MazeRunner