Outils pour utilisateurs

Outils du site


nsi:jeu:morpion

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Prochaine révision
Révision précédente
nsi:jeu:morpion [2021/04/24 12:42] – créée goupillwikinsi:jeu:morpion [2022/04/10 23:58] (Version actuelle) goupillwiki
Ligne 14: Ligne 14:
 Ci-dessous, une partie gagnante pour **O**. Ci-dessous, une partie gagnante pour **O**.
  
-{{ :nsi:terminales:minmax_3.svg |}}+{{ :nsi:tds:jeux:minmax_3.svg |}}
  
 ===== Exemple d'implémentation Python ===== ===== Exemple d'implémentation Python =====
 +
 +**Attention :** L'implémentation proposée définit les règles de fonctionnement d'une partie. Elle ne définit pas l'interface d'une partie. C'est à dire que pour jouer une partie, il faudrait intégrer le module dans une programme qui se chargerait d'initialiser la partie, de commander son affichage à chaque coup, de demander aux joueurs ce qu'ils veulent faire pour leur prochain coup...
  
 ==== Avec classes ==== ==== Avec classes ====
  
-<file python morpion.py>+<code python >
 ''' '''
 module morpion module morpion
Ligne 26: Ligne 28:
  
 class Morpion: class Morpion:
-    # contantes pour définir les symboles des joueurs +    P_1 = 'O' symbole pour joueur 1 
-    P_X = 'X' +    P_2 = 'X' # symbole pour joueur 2 
-    P_O = 'O'+    EMPTY = ' ' # symbole pour case vide
     N = 3 # taille de la grille     N = 3 # taille de la grille
  
Ligne 38: Ligne 40:
         # on peut opter pour une grille donnée en ligne correspondant         # on peut opter pour une grille donnée en ligne correspondant
         # à la grille lue dans l'ordre de lecture : gauche à droite, haut en bas         # à la grille lue dans l'ordre de lecture : gauche à droite, haut en bas
-        self.__grid = [' ' for i in range(self.N**2)] +        self.__grid = [self.EMPTY for i in range(self.N**2)] 
-        # joueur en cours : O +        # joueur en cours : 
-        self.__current_player self.P_O+        # True si le joueur en cours est P1 
 +        # False si le joeir en cours est P2 
 +        self.__current_player_is_1 True
                  
     def get(self, indice_line, indice_column):     def get(self, indice_line, indice_column):
Ligne 48: Ligne 52:
         assert 0 <= indice_line < self.N         assert 0 <= indice_line < self.N
         assert 0 <= indice_column < self.N         assert 0 <= indice_column < self.N
-        return self.__grid[indice_line*N + indice_column]+        return self.__grid[indice_line*self.N + indice_column]
          
-    def set(self, value, indice_line, indice_column):+    def current_player_set(self, indice_line, indice_column):
         '''         '''
-        écrit value aux indices fournis en argument+        écrit le symbole pour joueur en cours à la position indiquée, change de joueur
         '''         '''
-        assert 0 <= indice_line < self.+        assert self.cell_is_empty(indice_line, indice_column), "La case n'est pas vide" 
-        assert 0 <= indice_column < self.N +        self.__grid[indice_line*self.N + indice_column] = self.get_current_player_symbol() 
-        self.__grid[indice_line*N + indice_column] = value+        self.change_player() 
 +     
 +    def cell_is_empty(self, indice_line, indice_column): 
 +        ''' 
 +        renvoie True si la case sélectionnée est vide 
 +        ''' 
 +        return self.get(indice_line, indice_column) == self.EMPTY 
 + 
 +    def get_current_player_symbol(self): 
 +        if self.__current_player_is_1: 
 +            return self.P_1 
 +        return self.P_2        
  
-    def get_player(self):+    def current_player_is_1(self):
         '''         '''
-        renvoie l'étiquette du joueur en cours+        indique si le joueur en cours est P1
         '''         '''
-        return self.__current_player+        return self.__current_player_is_1
          
     def change_player(self):     def change_player(self):
Ligne 68: Ligne 83:
         change de joueur en cours         change de joueur en cours
         '''         '''
-        if self.__current_player == self.P_O: +        self.__current_player_is_1 not self.__current_player_is_1
-            self.__current_player = self.P_X +
-        else: +
-            self.__current_player = self.P_O+
  
     def clone(self):     def clone(self):
Ligne 83: Ligne 95:
         return c         return c
          
 +    def is_full(self):
 +        '''
 +        renvoie True si la grille est pleine
 +        '''
 +        return self.EMPTY not in self.__grid
 +    
 +    def game_over(self):
 +        '''
 +        renvoie True si la partie est terminée (victoire ou nul)
 +        '''
 +        return self.is_full() or self.winner() != None
 +
     def winner(self):     def winner(self):
         '''         '''
-        renvoie +        renvoie le symbole du gagnant s'il y en a un, None sinon
-        - l'étiquette d'un joueur si ce joueur est gagnant +
-        - l'étiquette 'NUL' si match nul +
-        - '' si pas terminé+
         '''         '''
         # je vous laisse le soin d'y réfléchir         # je vous laisse le soin d'y réfléchir
Ligne 105: Ligne 126:
         return out         return out
          
-    get availables_cells(self):+    def get_availables_cells(self):
         '''         '''
         renvoie un tableau contenant les paires (incice ligne, indice colonne) des cases vides         renvoie un tableau contenant les paires (incice ligne, indice colonne) des cases vides
         '''         '''
         # je vous laisse le soin d'y réfléchir         # je vous laisse le soin d'y réfléchir
- +</code>
-</file>+
  
  
nsi/jeu/morpion.1619260953.txt.gz · Dernière modification : de goupillwiki