Ici vous avez une solution de travail. Il est implémenté en Python mais je pense que cela peut vous aider.
L'arborescence de jeu est créée récursivement par la fonction build_tree
et est implémentée sous la forme d'une liste de listes.
La fonction build_tree
prend une carte (un nœud de l'arbre) et la pièce qui a le tour de jouer comme paramètres d'entrée, et construit toutes les nouvelles cartes possibles résultant de l'application de la pièce à la carte. Ensuite, pour chacune de ces nouvelles cartes, il appelle à nouveau la fonction build_tree
, mais cette fois en changeant la pièce qui a le tour de jouer. Lorsque la carte est terminale (pas de cases vides), la récursivité prend fin.
Ceci est l'arbre qui en résulte pour une carte de 1x3:
[(0, 0, 0), [[(x, 0, 0), [[('x', 'o', 0), [('x', 'o', 'x')]], [('x', 0, 'o'), [('x', 'x', 'o')]]] ], [(0, 'x', 0), [[('o', 'x', 0), [('o', 'x', 'x')]], [(0, 'x ',' o '), [(' x ',' x ',' o ')]]]], [(0, 0,' x '), [[(' o ', 0,' x ') , [('o', 'x', 'x')]], [(0, 'o', 'x'), [('x', 'o', 'x')]]]]] ]
Les carrés vides sont désignés par '0'.
Pour le jeu tactique, veuillez remplacer blank_board = (0,0,0)
par blank_board = (0,0,0,0,0,0,0,0,0)
afin d'avoir une carte 3x3.
def change_piece(piece):
if piece == 'x': return 'o'
return 'x'
def is_terminal(board):
"""Check if there are any empty square in the board"""
for square in board:
if square == 0:
return False
return True
def build_tree(node, piece):
"""Build the game tree recursively.
The tree is implemented as a list of lists.
"""
child_nodes = []
for index, value in enumerate(node):
if value == 0:
new_node = list(node)
new_node[index] = piece
new_node = tuple(new_node)
if not is_terminal(new_node):
child_nodes.append(build_tree(new_node,change_piece(piece)))
else:
child_nodes.append(new_node)
if child_nodes:
return [node,child_nodes]
return
if __name__ == "__main__":
blank_board = (0,0,0)
game_tree = build_tree(blank_board,'x')
print(game_tree)
En ce moment, je ne vois pas comment serait récursivité me aider. Pourriez-vous faire une réponse un peu plus explicite? – AndrejaKo
Trouvez tous les carrés vides du tableau associés au nœud que vous êtes en train de regarder. Créez des nœuds enfants pour chaque carré vide, avec ce carré particulier rempli avec le tour de symbole actuel. Puis recurse à chaque nœud enfant avec le symbole opposé. Arrêtez de récurer lorsque le plateau est plein ou qu'il y a un rang de trois sur le plateau. – Amber
@AndrejaKo récursion est la solution la plus évidente (vérifier l'autre poste). – ruslik