Exercice 1 · Bac Numérique et Sciences Informatiques Nouvelle-Calédonie 2022 (jour 2)
Thème : Programmation orientée objet : classes, attributs, méthodes · Tiré du sujet Jour 2 (2022)
Énoncé
EXERCICE 1
Cet exercice porte sur de l'algorithmique et de la programmation en langage Python. Il aborde la programmation orientée objet.
L'objectif de cet exercice est de créer un jeu vidéo. Il s'agit d'un jeu de plateau sur le thème des chevaliers de la table ronde dans lequel plusieurs personnages doivent réaliser des missions.
Ces personnages doivent récupérer des objets sur leur parcours. La récupération de ces objets leur permettra de gagner des points de vie ou d'en perdre.
Dans l'environnement du jeu, les héros vont rencontrer des personnages qui pourraient se révéler dangereux et contre lesquels ils devront parfois engager des batailles.
Partie 1
On s'intéresse ici au déplacement des personnages. L'espace dans lequel ils évoluent est représenté par un repère orthonormé à trois axes. La position de chaque personnage sera repérée par ses attributs x, y, z.
1)
a)
Recopier sur la copie et compléter le constructeur de la classe Personnage positionnant un personnage aux coordonnées choisies x, y et z.
class Personnage:
def __init__(self, coordx, coordy, coordz):
b)
Écrire une méthode avancex de la classe Personnage permettant d'augmenter d'une unité la coordonnée x d'un personnage.
c)
Écrire une méthode raz permettant de mettre toutes les coordonnées d'un personnage à zéro.
d)
Écrire une méthode coord renvoyant les coordonnées d'un personnage sous forme d'un tuple.
2) En utilisant les méthodes écrites dans la partie 1, écrire des lignes de code permettant:
a)
b)
c)
Partie 2
Chaque personnage du jeu va rencontrer différentes situations (potions, pièges,...) qui vont faire évoluer ses points de vie. La classe Personnage est modifiée afin de permettre ces évolutions.
import random
class Personnage:
def __init__(self, coordx, coordy, coordz, point_de_vie):
... # défini dans la partie 1
self.vie = point_de_vie
def avancex... # défini dans la partie 1
def raz... # défini dans la partie 1
def coord... # défini dans la partie 1
def get_etat(self):
return self.vie
def newgame(self):
................ # défini dans la partie 2
def potionmystere(self):
if random.randint(1,2) == 1:
nbPoint = -1
else:
nbPoint = +1
self.vie = self.vie + nbPoint
def piege(self):
self.vie = self.vie - 10
def repos(self):
self.vie = self.vie + 5 1)
Indiquer les valeurs possibles de la nouvelle variable valeurMerlin après exécution du programme ci-dessous:
merlin = Personnage (4,5,8,15)
merlin.potionmystere()
valeurMerlin = merlin.get_etat()
2)
Indiquer la valeur de la nouvelle variable valeurMerlin après exécution du programme ci-dessous:
merlin = Personnage (4,5,8,20)
merlin.piege()
merlin.piege()
valeurMerlin = merlin.get_etat()
3)
Écrire sur la copie, la méthode newgame permettant, si le nombre de points de vie est inférieur ou égal à 0, de:
ramener les coordonnées du personnage à (0,0,0),
lui attribuer 15 points de vie.
Pour intégrer les combats au jeu, on modifie et complète la classe Personnage en rajoutant les méthodes suivantes:
def perdre_vie(self,points):
self.vie = self.vie - points
self.newgame()
def attaquer(self, autre):
autre.perdre_vie(self.degats) 4) Écrire un programme en langage Python permettant:
la création d'une instance lancelot de cette classe ayant pour attributs 5,5,5 en coordonnées, 15 en point_de_vie et 3 en point_degats.
la création d'une instance sorcier de cette classe ayant pour attributs 6,5,5 en coordonnées, 15 en point_de_vie et 2 en point_degats.
à lancelot d'attaquer le sorcier une première fois.
au sorcier d'attaquer à son tour lancelot.
à lancelot de répliquer en attaquant quatre fois de suite le sorcier.
d'afficher le nombre de points de vie de lancelot et du sorcier.

Corrigé
Corrigé proposé par AprenAI (non officiel)
1) a) Recopier sur la copie et compléter le constructeur de la classe Personnage positionnant un personnage aux coordonnées choisies x, y et z.
Réponse : ```python self.x = coordx self.y = coordy self.z = coordz ```
1) b) Écrire une méthode avancex de la classe Personnage permettant d'augmenter d'une unité la coordonnée x d'un personnage.
Réponse : ```python def avancex(self): self.x = self.x + 1 ```
1) c) Écrire une méthode raz permettant de mettre toutes les coordonnées d'un personnage à zéro.
Réponse : ```python def raz(self): self.x = 0 self.y = 0 self.z = 0 ```
1) d) Écrire une méthode coord renvoyant les coordonnées d'un personnage sous forme d'un tuple.
Réponse : ```python def coord(self): return (self.x, self.y, self.z) ```
2) a) de créer un personnage arthur démarrant à la position (5,5,5) ;
Réponse : ```python arthur = Personnage(5, 5, 5) ```
2) b) d'augmenter d'une unité la coordonnée x du personnage arthur ;
Réponse : ```python arthur.avancex() ```
Les réponses des 5 questions restantes et l’explication pas à pas sont réservées aux membres Premium. Premium
Résous-le ici : correction automatique, indices et corrigé détaillé.
‹ Exercice 5 · Nouvelle-Calédonie 2022 (jour 1)