Outils pour utilisateurs

Outils du site


nsi:jeu:morpion

Ceci est une ancienne révision du document !



Warning: Constant SVG_DPI already defined in /home/goupillf/wiki.goupill.fr/lib/plugins/svgembed/syntax.php on line 75

Warning: Undefined variable $ml_array in /home/goupillf/wiki.goupill.fr/lib/plugins/svgembed/syntax.php on line 264

Warning: Undefined array key "inResponsiveUnits" in /home/goupillf/wiki.goupill.fr/lib/plugins/svgembed/syntax.php on line 282

Warning: Undefined array key "hasCssClasses" in /home/goupillf/wiki.goupill.fr/lib/plugins/svgembed/syntax.php on line 301

Warning: Undefined array key "print" in /home/goupillf/wiki.goupill.fr/lib/plugins/svgembed/syntax.php on line 322

Warning: Undefined variable $svg_width in /home/goupillf/wiki.goupill.fr/lib/plugins/svgembed/syntax.php on line 239

Warning: Undefined variable $svg_width in /home/goupillf/wiki.goupill.fr/lib/plugins/svgembed/syntax.php on line 244

Warning: Undefined variable $svg_height in /home/goupillf/wiki.goupill.fr/lib/plugins/svgembed/syntax.php on line 245

Warning: Undefined variable $ml_array in /home/goupillf/wiki.goupill.fr/lib/plugins/svgembed/syntax.php on line 264

Warning: Undefined array key "inResponsiveUnits" in /home/goupillf/wiki.goupill.fr/lib/plugins/svgembed/syntax.php on line 282

Warning: Undefined array key "hasCssClasses" in /home/goupillf/wiki.goupill.fr/lib/plugins/svgembed/syntax.php on line 301

Warning: Undefined array key "print" in /home/goupillf/wiki.goupill.fr/lib/plugins/svgembed/syntax.php on line 322

Le morpion


Au morpion le premier joueur fait des O, le second joueur fait des X.

Chacun place à son tour, soit O, soit X dans une grille 3×3, un seul sybmbole par case.

Si un joueur arrive à créer un alignement de 3 symboles identiques, il a gagné.

Si la grille devient pleine sans qu'aucun alignement ne soit réalisé, c'est un match nul (c'est la situation la plus courante au morpion)

Ci-dessous, une partie gagnante pour O.


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

morpion.py
'''
module morpion
'''
 
class Morpion:
    P_1 = 'O' # symbole pour joueur 1
    P_2 = 'X' # symbole pour joueur 2
    EMPTY = ' ' # symbole pour case vide
    N = 3 # taille de la grille
 
    def __init__(self):
        '''
        Crée une partie de morpion
        '''
        # définit un attribut __grid donnant l'état actuel du jeu
        # on peut opter pour une grille donnée en ligne correspondant
        # à la grille lue dans l'ordre de lecture : gauche à droite, haut en bas
        self.__grid = [self.EMPTY for i in range(self.N**2)]
        # joueur en cours : 1
        # 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):
        '''
        renvoie le contenue aux indices fournis en argument
        '''
        assert 0 <= indice_line < self.N
        assert 0 <= indice_column < self.N
        return self.__grid[indice_line*N + indice_column]
 
    def current_player_set(self, indice_line, indice_column):
        '''
        écrit le symbole pour joueur en cours à la position indiquée, change de joueur
        '''
        assert cell_is_empty(indice_line, indice_column), "La case n'est pas vide"
        self.__grid[indice_line*N + indice_column] = self.get_current_player_symbol()
        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 current_player_is_1(self):
        '''
        indique si le joueur en cours est P1
        '''
        return self.__current_player_is_1
 
    def change_player(self):
        '''
        change de joueur en cours
        '''
        self.__current_player_is_1 = not self.__current_player_is_1
 
    def clone(self):
        '''
        renvoie une copie du jeu courant
        '''
        c = Morpion()
        for i in range(self.N**2):
            c.__grid[i] = self.__grid[i]
        c.__current_player = self.__current_player
        return c
 
    def is_full(self):
        '''
        renvoie True si la grille est pleine
        '''
        return self.EMPTY not in self.__grid
 
    def is_winner(self, first_player):
        '''
        first_player : joueur pour lequel on interroge une victoire, True pour P1, False pour P2
        renvoie True si le joueur demandé est gagnant
        '''
        # je vous laisse le soin d'y réfléchir
 
    def __str__(self):
        '''
        renvoie une version texte de la grille
        '''
        out = "┏" + "━┳"*(self.N-1) + "━┓\n"
        for i in range(self.N):
            out += "┃" + "┃".join(self.__grid[i*self.N:(i+1)*self.N]) + "┃\n"
            if i == self.N-1:
                out += "┗" + "━┻"*(self.N-1) + "━┛\n"
            else:
                out += "┣" + "━╋"*(self.N-1) + "━┫\n"
        return out
 
    def get availables_cells(self):
        '''
        renvoie un tableau contenant les paires (incice ligne, indice colonne) des cases vides
        '''
        # je vous laisse le soin d'y réfléchir

Variantes

  • En 3D, avec plus de cases…
nsi/jeu/morpion.1619354388.txt.gz · Dernière modification : de goupillwiki