Un algo typique pour le morpion devrait ressembler à ceci :
Board : Un vecteur à neuf éléments représentant la planche. Nous stockons 2 (indiquant blanc), 3 (indiquant X), ou 5 (indiquant O). Tour : Un nombre entier indiquant quel coup du jeu est sur le point d'être joué. Le 1er coup sera indiqué par 1, le dernier par 9.
L'algorithme
L'algorithme principal utilise trois fonctions.
Make2 : renvoie 5 si la case centrale de l'échiquier est vide c'est à dire si board[5]=2
. Sinon, cette fonction renvoie un carré quelconque qui n'est pas un coin. (2, 4, 6 or 8)
.
Posswin(p)
: Retourne 0 si le joueur p
ne peut pas gagner à son prochain coup ; sinon, elle renvoie le numéro de la case qui constitue un coup gagnant. Cette fonction permettra au programme à la fois de gagner et de bloquer la victoire des adversaires. Cette fonction fonctionne en vérifiant chacune des lignes, des colonnes et des diagonales. En multipliant les valeurs de chaque case entre elles pour une ligne entière (ou une colonne ou une diagonale), on peut vérifier la possibilité d'un gain. Si le produit est 18
( 3 x 3 x 2
), alors X
peut gagner. Si le produit est 50
( 5 x 5 x 2
), alors O peut gagner. Si une ligne (colonne ou diagonale) gagnante est trouvée, la case vide qui s'y trouve peut être déterminée et le numéro de cette case est renvoyé par cette fonction.
Go (n)
: effectue un déplacement sur la case n. Cette procédure définit le conseil d'administration. [n]
à 3 si Turn est impair, ou à 5 si Turn est pair. Il incrémente également Turn de 1.
L'algorithme a une stratégie intégrée pour chaque mouvement. Il effectue le coup impair s'il joue X
le coup pair s'il joue O.
Turn = 1 Go(1) (upper left corner).
Turn = 2 If Board[5] is blank, Go(5), else Go(1).
Turn = 3 If Board[9] is blank, Go(9), else Go(3).
Turn = 4 If Posswin(X) is not 0, then Go(Posswin(X)) i.e. [ block opponent’s win], else Go(Make2).
Turn = 5 if Posswin(X) is not 0 then Go(Posswin(X)) [i.e. win], else if Posswin(O) is not 0, then Go(Posswin(O)) [i.e. block win], else if Board[7] is blank, then Go(7), else Go(3). [to explore other possibility if there be any ].
Turn = 6 If Posswin(O) is not 0 then Go(Posswin(O)), else if Posswin(X) is not 0, then Go(Posswin(X)), else Go(Make2).
Turn = 7 If Posswin(X) is not 0 then Go(Posswin(X)), else if Posswin(X) is not 0, then Go(Posswin(O)) else go anywhere that is blank.
Turn = 8 if Posswin(O) is not 0 then Go(Posswin(O)), else if Posswin(X) is not 0, then Go(Posswin(X)), else go anywhere that is blank.
Turn = 9 Same as Turn=7.
Je l'ai utilisé. Faites-moi savoir ce que vous en pensez.
23 votes
imgs.xkcd.com/comics/tic_tac_toe.png
0 votes
Bien que la réponse de Wikipedia puisse suffire, j'ai ajouté ci-dessous un algorithme qui détermine le meilleur coup possible pour chaque planche donnée en vérifiant tous les coups possibles et en les notant.
0 votes
Je me suis posé une question similaire : blog.maxant.co.uk/pebble/2018/04/07/1523086680000.html
0 votes
Voici un très réponse visuelle .