(Python) Morpion en poo, besoin d'aide svp !

Résolu/Fermé
Majarbuda Messages postés 45 Date d'inscription dimanche 19 mai 2019 Statut Membre Dernière intervention 3 novembre 2022 - Modifié le 4 nov. 2022 à 10:15
mamiemando Messages postés 33446 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 décembre 2024 - 4 nov. 2022 à 10:31

Salut salut,

J'ai un projet de jeu de morpion en programmation orientée objets.

Il m'est indiqué dans les consignes que je dois utiliser une classe Case qui aura comme attribut la position de la case et sa valeur (x, o ou vide). Est-ce que je pourrais utiliser par exemple une fonction in range pour créer un nombre précis de cases (ici 9) et leur donner à chacune un attribut position différent (qui serait donc de 0 à 8). Si oui, comment faire ? 

Merci beaucoup !

1 réponse

mamiemando Messages postés 33446 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 décembre 2024 7 812
4 nov. 2022 à 10:31

Bonjour,

Bien sûr, il faut dans ta tête découpler les variables qui te permettent d'itérer et ce que tu en fais.

class Case:
    def __init__(self, i, j, value):
        self.i = i
        self.j = j
        self.value = value
    def __repr__(self):
        return f"{self.__class__.__name__}<{self.i}, {self.j}, {self.value}>" 

class Plateau(list):
    pass

plateau = [
    Case(i, j)
    for i in range(3)
    for j in range(3)
]

print(plateau)
[self.__class__.__name__<0, 0, None>, self.__class__.__name__<0, 1, None>, self.__class__.__name__<0, 2, None>, self.__class__.__name__<1, 0, None>, self.__class__.__name__<1, 1, None>, self.__class__.__name__<1, 2, None>, self.__class__.__name__<2, 0, None>, self.__class__.__name__<2, 1, None>, self.__class__.__name__<2, 2, None>]

Bon ceci dit, ce n'est pas une manière très pratique de stocker un plateau de morpion. C'est plus au plateau de te fournir une primitive qui te permet de retrouver l'état de la case (i, j) et une structure de dictionnaire (ou une matrice 2D faite avec un np.array) qui associe à chaque couple (i, j) son état serait bien plus pratique...

Car ici, tu vas être obligé de chercher dans ton plateau l'instance de Case qui coïncide avec la case qui t'intéresse, ce qui est peu pratique...

class Plateau(list):
    def find_case(self, i, j):
        for case in self:
            if case.i == i and case.j == j:
                return case 
        return None

print(plateau.find_case(1, 2))

Bonne chance

0