Début du deuxième travail noté
Vous devriez débuter la production d'un jeu vidéo. Vous devez concevoir un jeu vidéo utilisant l'animation 2D et Python. Votre jeu doit utiliser la gestion des erreurs par exception et le code doit utiliser la programmation fonctionnelle. Ce projet compte pour 40% de votre note. Vous devez remettre votre projet à la dixième ou onzième semaine du cours.
Vous devriez remettre le jeu dans une archive zip avec un rapport (PDF). Le rapport qui devrait faire environ 5 pages doit décrire le jeu, sa gestion des erreurs, et sa conception.
Bien que ça ne soit pas requis, la création de vos propres classes est encouragée.
Nous vous encourageons fortement à utiliser uv pour la préparation de votre projet.
Vous êtes libre de concevoir le jeu qui vous plaît. Vous pouvez choisir un jeu simple. Il n'est pas nécessaire de concevoir un jeu complexe. Vous serez évalué sur la qualité de votre présentation, au sein de votre rapport, et sur l'utilisation des concepts vu dans le cours, par le jeu. Naturellement, un jeu trop simpliste peut rendre votre travail difficile.
Programmation fonctionnelle
Pour la programmation fonctionnelle, nous vous demandons seulement de l'utiliser au moins à un endroit, et de bien justifier son utilisation. Voici deux exemples concrets pour vous inspirer.
1. Filtrer l’inventaire avec un prédicat pur (filter + compréhension de liste)
Je veux récupérer uniquement les potions de soin. Au lieu d’une boucle for qui modifie une liste, j’utilise une fonction pure et une compréhension de liste (équivalent fonctionnel de filter).
inventaire = [
{"nom": "Épée du débutant", "type": "arme", "puissance": 5},
{"nom": "Potion de Soin", "type": "consommable", "effet": "soin"},
{"nom": "Bouclier de Fer", "type": "armure", "défense": 3},
{"nom": "Grande Potion", "type": "consommable", "effet": "soin"}
]
# Fonction prédicat 100 % pure
def est_une_potion_de_soin(objet):
return objet.get("type") == "consommable" and objet.get("effet") == "soin"
# Création d’une NOUVELLE liste → rien n’est modifié
potions_disponibles = [
item for item in inventaire if est_une_potion_de_soin(item)
]
print(potions_disponibles)
# → [{'nom': 'Potion de Soin', ...}, {'nom': 'Grande Potion', ...}]
2. Appliquer un coup critique à plusieurs ennemis avec map()
Quand le joueur fait un coup critique, tous les dégâts de base sont multipliés par 1,5. La fonction appliquer_multiplicateur_critique est pure : elle ne modifie jamais la valeur d’origine.
# Dégâts de base sur plusieurs ennemis
degats_de_base = [10, 15, 8, 20]
# Fonction pure → retourne une nouvelle valeur
def appliquer_multiplicateur_critique(degat):
return int(degat * 1.5) # +50 % pour un coup critique
# map() crée une NOUVELLE liste sans toucher à l’ancienne
degats_critiques = list(map(appliquer_multiplicateur_critique, degats_de_base))
print(degats_de_base) # → [10, 15, 8, 20] (inchangé !)
print(degats_critiques) # → [15, 22, 12, 30]
Un exemple de jeu
Pour vous inspirer, voici un jeu réalisé dans le cadre du cours par l'étudiant Guillaume Ste-Marie.
Nous vous laissons délibérément libre de choisir. Profitez-en pour faire preuve d'originalité.