Résolu Intelligence artificielle Puissance 4 en C

Solutions (5)
Tags :
  • Interface
  • Programme
  • Programmation
|
Bonjour.

Je dois réaliser un projet semestriel: un programme en C de Puissance 4 avec intelligence artificielle basique.

Le programme doit respecter les règles normales du Puissance 4: une grille 7x6, deux joueurs plaçant sur des colonnes des pions dans le but d'en aligner 4 dans n'importe quelle direction.

Pour ce qui est de l'interface graphique et tout ce qui concerne le tour du joueur "humain" (placement correct d'un pion, etc), je n'ai pas de problème. Mais pour ce qui est de l'I.A....

Elle doit respecter la stratégie suivante:
si l'"humain" a aligné 4 pions, il a gagné;
sinon si l'ordinateur peut aligner 4 pions, il le fait (et gagne);
sinon si l'"humain" peut réaliser au prochain tour une ligne de 4 pions, l'ordinateur bloque cette file;
sinon si l'ordinateur peut aligner 3 pions, il le fait;
sinon si l'"humain" peut réaliser une ligne de 3 pions par la suite, l'ordinateur le contre;
sinon si l'ordinateur peut aligner 2 pions, il le fait;
sinon, enfin, l'ordinateur place un pion au hasard.

Je ne vois pas comment vérifier la "structure" du jeu (qui a aligné quoi) pour ensuite "faire jouer" l'ordinateur selon celle-ci...

Pour information, j'ai utilisé un tableau de 42 cases représentant donc la grille de jeu (donc numérotée de 0 à 41) où chaque case contient 0 si elle est vide, 1 si elle contient un pion du joueur "humain" et 2 si c'est un pion de l'ordinateur...

Merci d'avance pour vos réponses.
Contenus similaires
Meilleure solution
partage
, Modérateur |
Pour moi il va y avoir 2 étapes :
1) tu prends le pion qui vient d'être posé, et tu vérifies si ça en fait 4 alignés dans un des 4 sens possibles (horizontal, vertical, diagonale / et diagonale \).
Si ça en fait 4, tu peux arrêter la partie et dire que c'est gagné.
2) Et sinon, quand c'est à l'ordinateur de jouer, il faut que tu parcours toute ta grille pour voir où il doit jouer.
Pour moi, la meilleure solution serait de parcourir la grille en faisant une case par une case. Pour chaque case tu vérifies l'état horizontal/vertical/diagonal pour voir si cette case peut être utilisée.
Et pour chaque case, tu lui mets un "poids" (un numéro), par exemple si tu détectes que l'ordinateur peut poser son 4ème pion ici, tu mets un poids fort (imaginons que tu aies des poids de 0 à 10, 0 voulant dire que ça ne sert à rien de jouer ici, et 10 voulant dire qu'il faut surtout jouer là), donc tu mettrais un poids de 10; si tu détectes que l'humain peut poser son 4ème pion là, c'est important aussi de le bloquer, donc poids = 9, etc...
Une fois que tu auras des poids pour toutes tes cases, tu reparcourreras tous les poids afin de savoir sur quel case tu dois jouer (celui qui a le plus grand poids).

N'oublie pas de prendre en compte que l'on ne pose le pion que tout en bas de la colonne.
Donc si tu as par exemple:
| | | | | | | |
| | | | | | | |
| | | | | |A| |
| | | | |X| | |
| | | |X|O| | |
| | |X|O|O| | |

Même si la case "A" pourrait être un 4 à la suite, elle ne peut pas être jouée.

Edit: en fait, c'est même pas aux cases que tu dois mettre des poids, mais seulement aux colonnes, vu que tu ne peux jouer que sur une seule case par colonne.
  • Commenter cette solution |
Score
1
òh
òi
, Modérateur |
Salut,

Plutôt que d'utiliser un tableau de 42 cases où tu vas galérer pour vérifier ce qui est placé actuellement, j'utiliserais plutôt un tableau à 2 dimensions de 6 par 7.
Tu aurais donc ton tableau grille[5][6] (vu que le tableau commence à 0), où:
grille[0] = ta ligne 1
grille[1] = ta ligne 2
grille[0][0] = la 1ère case de ta 1ère ligne
grille[3][2] = la 3ème case de ta 4ème ligne.

Parce qu'il faudra que tu vérifies les données horizontales, verticales et diagonales.
Pour horizontal, il te suffira de ta balader dans ta ligne (grille[x]) en allant de grille[x][0] à grille[x][6] pour vérifier les données.
Pour vertical, tu te baladeras dans la colonne, donc de grille[0][x] à grille[5][x] pour vérifier les données.
Et pour le diagonal, tu feras 2 boucles imbriquées qui font +1 à chaque fois, et 2 autres boucles pour faire -1 (afin de faire la diagonale montante "/" et la diagonale descendante "\")
  • Commenter cette réponse |
Score
0
òh
òi
|
Ah, il me semble être tombé sur un algorithme apparemment très utilisé lors de mes recherches qui ressemblait à cela mais en beaucoup plus complexe; du coup j'avoue que je n'avais pas tout saisi (je crois qu'il s'appelle Min-Max).

En tout cas, merci beaucoup, j'arrive enfin à visualiser comment m'y prendre: je vais coder tout cela ce week-end, je ne pense pas rencontrer d'autres problèmes...

Encore une fois, merci!
  • Commenter cette réponse |
Score
0
òh
òi
|
Meilleure réponse sélectionnée par M-a-t-h.
  • Commenter cette réponse |
Score
0
òh
òi
|
Merci pour cette réponse.

Effectivement, cela semble plus facile comme cela pour vérifier les alignements mais ne vois toujours pas que faire ensuite?

Comment faire, une fois que la vérification des alignements est terminée, pour que l'ordinateur "sache" où jouer?
  • Commenter cette réponse |

Ce n'est pas ce que vous cherchiez ?

Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS