We use cookies to personalize content and to analyze our traffic. Please decide if you are willing to accept cookies from our website.

Puissance 4 en GTK Ada

Le but du Puissance 4 est d’aligner 4 pions de votre couleur (jaune ou rouge) verticalement, horizontalement ou diagonalement avant votre adversaire sur un plateau de jeu de 6 lignes et 7 colonnes. Vous jouez à tour de rôle. Une fois le logiciel lancé, celui-ci va vous proposer de rentrer les noms des joueurs. Si vous décidez de ne pas en mettre, ils s’appelleront Joueur1 et Joueur2 par défaut. Vous pouvez à tout moment changer le nom du joueur grâce au menu déroulant en haut de la fenêtre (partie Options). Une fois les noms choisis, la partie commence. Par défaut, c’est une partie « Joueur contre Joueur ». Si jamais vous souhaitez jouer contre l’ordinateur, le menu déroulant vous propose de choisir le mode pour chacun des deux joueurs. Pour le mode ordinateur, trois niveaux de difficulté sont proposés, du plus facile au plus difficile. Il est impossible de lancer une partie ordinateur contre ordinateur (ce qui n’a pas grand intérêt). Pour gagner la partie, vous devez donc aligner 4 pions dans n’importe quelle direction. Pour disposer un pion, sélectionnez la colonne voulue. Une fois la partie terminée, vous pouvez recommencer autant de fois que vous le désirez. Pour quitter à n’importe quel moment, utilisez le menu déroulant. Pour de plus amples informations, une barre d’état en bas à gauche de la fenêtre de jeu vous indique à qui est le tour, et quelques autres informations (accueil…). La couleur du joueur est indiquée entre parenthèses au dessus des noms des joueurs.


Puissance 4 en GTK Ada

Implémentation du jeu puissance 4 avec GTK Ada

Manuel du jeu puissance 4

Jeu puissance 4 graphique sous Windows

Jeu puissance 4 graphique sous Windows

Jeu puissance 4 graphique pour Linux

Jeu puissance 4 graphique sous Windows

Source jeu puissance 4 console

Source jeu puissance 4 console

Source jeu puissance 4 graphique

Source du jeu puissance 4 graphique

Mode Console

Afin de bien commencer notre projet et de mener à bien la première partie, nous avons développé un affichage en mode console. Ce premier niveau de conception nous a permis de valider les fonctions de base comme la saisie du coup ou encore la détection de fin de la partie.

Voici un aperçu de notre mode console. On peut apercevoir le programme proposant de l’aide au joueur. Ce mode gère tout type d’exception, l’utilisateur ne peut pas rentrer de chiffres en dehors de l’intervalle ni de lettres.

Mode Graphique

Nous avons crée l’interface graphique grâce à l’outil de conception d’interface glade. Ensuite, grâce à la commande gate, nous avons généré les fichiers à partir de l’interface ainsi modélisée.

Puis nous avons rempli les fichiers « callbacks » permettant de décrire les actions que chaque bouton doit effectuer.

Cependant, l’interface glade créant des fichiers gtk relativement « figés », nous avons décidé de modifier un peu la structure en créant, en fonction du nombre de lignes et de colonnes rentrés dans le paquetage, dynamiquement la grille et les boutons associés.

La mise en oeuvre de gtk n’a pas été facile, il a fallu s’habituer aux différents concepts et apprendre à manipuler cet outil qui s’avère très complet mais peu documenté.

Architecture de notre logiciel

Notre programme est décomposé en 4 grandes parties :

  • Tout d’abord, nous avons le programme principal qui lance l’exécutable et invite le joueur à jouer une partie.
  • Nous avons ensuite toute la partie graphique qui, comme son nom l’indique va s’occuper de l’affichage et du traitement des données sous forme graphique pour la convivialité du jeu.
  • La troisième partie est le module "puissance4" qui quant à lui s’occupe en grand partie de l’aide apportée au joueur ainsi que des fonctions dites de base comme placer le jeton suivant ou encore vérifier le gagnant.
  • Enfin, le quatrième et dernier module est l’intelligence artificielle qui va nous permettre de proposer un mode joueur contre ordinateur avec 3 niveaux de difficultés.

Voici sous forme d’arborescence l’architecture de notre programme.

(L’élément à l’origine d’une flèche se sert de celui à la pointe de la même flèche, inversement celui à la pointe est utilisé par celui à la source).

On remarque ici un chemin qui se dédouble. Cela est du au type de joueur choisi. Si l’ordinateur joue, le programme va avoir besoin du module calculia pour faire agir l’ordinateur. Ce module aura besoin de puissance4 pour évaluer chaque coup et jouer le meilleur. Si les deux joueurs sont des utilisateurs, il n’y a aucun besoin de passer par calculia. D’où l’importance de scinder ces deux parties, puissance4 et calculia.

Puissance4 représente la grosse partie de notre programme car c’est lui qui gère tout ce qui concerne le plateau de jeu, le nombre de colonnes et de lignes associés à celui-ci, le type de joueur associé à chaque case de notre plateau… Nous avons pour gérer tout ça décomposé en plusieurs sous-programmes, tels que Initialiser_Plateau, Placer_Jeton, Verifier_Gagnant, Dessiner_Plateau. Autre procedure très importante, « Nb » qui va permettre de trouver le meilleur coup suivant chaque colonne, et dont on se sert quelque soit le mode de joueur.

calculia va, pour chaque colonne jouer un jeton (procédure de puissance4), et ensuite déterminer par le biais de l’évaluation, quel est le meilleur coup à jouer. Suivant le niveau de difficulté, cette procédure pourra anticiper plusieurs coups à l’avance.

Voici un screenshot de partie entre deux joueurs :

puissance4

Aide au joueur

Afin de rendre le jeu plus convivial, une aide au joueur a été implémentée. Elle indique au joueur quels sont les meilleurs coups à jouer afin de bloquer l’adversaire et gagner la partie.

Pour réaliser cela, une batterie de fonctions ont été mises en place. La principale est Nb, qui parcourt le plateau de jeu dans tous les sens possibles (en colonne, en lignes, en diagonales), et analyse les placements des pions du joueur.

Elle retourne un nombre : plus la situation du joueur est avantageuse, plus il sera élevé. Cette fonction est utilisée pour évaluer les situations quelque soit la prochaine colonne dans laquelle on joue.

Pour chaque coup possible, la situation est évaluée et montre au joueur quel est pour lui le meilleur coup à jouer.

Voici un aperçu en mode graphique et console :

Remarque:

Nb4 a été rajouté pour pouvoir signaler au joueur lorsqu’il peut gagner. Un coefficient très élevé lui a été attribué afin de mettre ce résultat bien en évidence. Pour cette même raison l’affichage des évaluations se fait dans l’ordre décroissant.

Particularités

Tout d’abord le jeu fonctionne aussi bien en mode console qu’en mode graphique.

  • Le programme détient une grille redimensionnable (en changeant les constantes nbr_lignes et nbr_colonnes). De plus, l’affichage de l’aide s’adapte en fonction du nombre de colonnes souhaité.
  • L’interface graphique permet de compter et d’afficher le nombre de victoires pour chaque joueur. Lorsqu’un joueur gagne, une nouvelle partie recommence automatiquement et les scores augmentent. Le premier à jouer est celui ayant perdu la partie précédente.
  • Lors du lancement du jeu, le logiciel propose de changer les noms des deux joueurs. Ceci permet de personnaliser le jeu en indiquant, par alternance, le nom du joueur dont c’est le tour de jouer. Les noms sont également modifiables en cours de partie.
  • Le jeu peut être quitté à tout moment, une confirmation est demandée.
  • De même le mode de jeu (joueur contre joueur ou contre ordinateur) peut être modifié à tout moment. Par exemple si un joueur quitte la partie l’autre joueur peut continuer à jouer contre l’ordinateur. Les scores sont conservés.
  • Le jeu contre l’ordinateur comporte 3 niveaux de difficulté différents. Quelque soit le niveau, le temps de réflexion de l’ordinateur est très rapide.
  • Le joueur peut demander de l’aide à tout moment : l’aide affiche les évaluations pour chaque colonne, et indique dans quelle colonne jouer pour obtenir la meilleure situation.

Enfin, le graphique reste fidèle au jeu original et j’ai exporté le logiciel sous Windows grâce à la librairie GTK ce qui garantit une plus grande portabilité.

Completed in FR on Apr 09, 2009