Avancé
🧠 Fondamentaux
30 XP
0 personnes ont réussi
Classe Board avec héritage
On va maintenant regrouper tout ce qu'on a fait dans une classe Board. Cette classe encapsule la grille et toutes les opérations dessus : poser un pion, vérifier si une case est vide, vérifier si la grille est pleine, et detecter un gagnant.
Encapsuler, ca veut dire mettre les données et les fonctions qui les manipulent dans le meme objet. Au lieu d'avoir une grille et des fonctions séparées, on a un objet Board qui sait tout faire.
Dans le __init__, tu initialises la grille. Les méthodes remplacent les fonctions qu'on a ecrites avant, mais elles utilisent self.cells au lieu de recevoir la grille en paramètre.
Écris une classe Board avec : - __init__ : initialise self.cells comme une grille 3x3 d'espaces - is_empty_cell(ligne, colonne) : renvoie True si la case est vide - add_move(symbole, ligne, colonne) : place le symbole si la case est vide, renvoie True/False - is_full() : renvoie True si toutes les cases sont remplies - check_winner() : renvoie 'X', 'O' ou None
Exemple : b = Board() b.is_empty_cell(0, 0) renvoie True b.add_move('X', 0, 0) renvoie True b.is_empty_cell(0, 0) renvoie False
class Board:
def __init__(self):
self.cells = [[' ', ' ', ' '] for _ in range(3)]
def is_empty_cell(self, ligne, colonne):
return self.cells[ligne][colonne] == ' '
def add_move(self, symbole, ligne, colonne):
if self.cells[ligne][colonne] == ' ':
self.cells[ligne][colonne] = symbole
return True
return False
def is_full(self):
for ligne in self.cells:
for case in ligne:
if case == ' ':
return False
return True
def check_winner(self):
g = self.cells
for ligne in g:
if ligne[0] == ligne[1] == ligne[2] and ligne[0] != ' ':
return ligne[0]
for c in range(3):
if g[0][c] == g[1][c] == g[2][c] and g[0][c] != ' ':
return g[0][c]
if g[0][0] == g[1][1] == g[2][2] and g[0][0] != ' ':
return g[0][0]
if g[0][2] == g[1][1] == g[2][0] and g[0][2] != ' ':
return g[0][2]
return None