Intelligence artificielle Hex C#

Dans le premier tutoriel sur le jeu de HEX, nous avons créé une simple version 2 joueurs sur un même écran. Aujourd'hui je vous propose une première approche dans la création d'un petit script d'intelligence artificielle qui va permettre au joueur de se mesurer à l'ordinateur.


Introduction et prérequis

Avant de vous lancer dans ce tutoriel, vous devez suivre la première partie que vous pouvez retrouver en suivant ce lien.
Nous allons créer un mode 1 joueur avec une petite intelligence artificielle qui restera très simple. L'ordinateur va essayer de relier les deux côtés du plateau en contournant le joueur adverse. Notre script sera très simple et l'ordinateur ne sera pas en mesure d'adapter sa stratégie en fonction du joueur mais cela sera une amélioration possible.

Création du menu principal

Afin de donner la possibilité au joueur de choisir entre le mode 1 joueur et le mode 2 joueur, nous allons créer un menu principal très simple avec 2 boutons. Pour cela nous allons utiliser le nouveau système d'UI d'Unity : "GameObject / UI / Button" afin de créer ces deux boutons :

Menu Jeu de Hex Unity 5
Mise en place du menu principal
Le script du menu que nous allons écrire est très simple. Il est constitué de 2 fonctions publiques qui chargent le jeu et qui définissent le type de jeu (1 ou 2 joueurs). Créez un nouveau script C# appelé "LoadGame" dont le code est le suivant : Placez ce script sur la caméra et configurez les boutons afin qu'ils appellent les fonctions que nous venons de créer. Pour cela vous devez ajouter un événement, faire glisser le gameobject de la caméra et vous devez aller chercher la bonne fonction :
Configuration des boutons
Configuration des boutons
Avant de tester votre script, vous devez ajouter vos deux scènes (Menu et Jeu) à vos build settings (File / Build Settings) en respectant l'ordre Menu suivi de Jeu :
Configuration des build settings
Build Settings
Vous pouvez maintenant tester votre menu. En cliquant sur un bouton, le jeu se lance mais pour le moment il n'y a aucune différence entre les deux types de jeux. Nous allons modifier cela.

Programmation de l'IA

Comme annoncé, notre IA sera très simple, cela vous permettra d'avoir juste une première approche. Nous allons modifier les scripts "Case" et "GameManager" afin d'ajouter quelques fonctionnalités. Nous allons commencer par GameManager qui sera très simple. Ajoutez 3 variables statiques afin d'obtenir le code complet suivant : "firstTurn" va nous permettre de savoir s'il s'agit du premier tour. "lastPlayed" sera le dernier coup jouer par l'ordinateur et "iawin" nous permet de savoir si l'IA a gagné la partie.

Nous allons maintenant modifier le script "Case" afin de prendre en compte l'IA. Nous allons devoir bloquer le joueur si l'IA a gagné (le joueur ne pourra plus cliquer) et nous devons prendre en compte le type de jeu(1 ou 2 joueurs).
Nous allons englober la fonction "OnMouseUp" dans un grand if afin de bloquer les clics si l'IA à gagné grâce au test "if(!GameManager.iawin){}".
Nous allons aussi ajouter une condition pour savoir si l'IA doit jouer (mode 1 joueur) ou pas "if(PlayerPrefs.GetInt("jeu") == 1){ IaPlay(); }", ce qui nous donne : Maintenant, nous devons créer la fonction "IaPlay()" qui va permettre à l'ordinateur de jouer.

Il y a 2 possibilités. S'il s'agit du premier tour, l'IA va jouer en haut du plateau sur la première ligne. Une fois la case choisie, elle change de couleur, on enregistre le coup joué et on redonne la main au joueur humain : Dans le second cas, l'IA va rechercher une case en dessous de celle jouée précédement afin de continuer sa ligne vers le bas du plateau. L'IA doit contourner le joueur en testant plusieurs possibilitlés (par la gauche, la droite etc.). L'IA ne peut pas jouer sur une case occupée et si l'IA arrive à la ligne 11, elle gagne (car elle a terminé sa ligne). Voilà le bout de code du else : Ce qui nous donne la fonction IaPlay complète suivante : Et voilà, le mode 1 joueur Humain VS Ordinateur est implémenté ! Certe l'IA est basique et un peu bête mais au moins elle est capable de jouer et d'atteindre l'objectif. Si vous testez vous verrez que l'IA va essayer d'aller de haut en bas tout en contournant le joueur. Bien sûr vous pouvez facilement la bloquer, c'est pourquoi je vous invite à lire la partie suivante pour améliorer le projet.

Améliorations

Afin de rendre votre IA plus intelligente, vous pouvez implémenter :
- Plusieurs niveaux d'IA
- Une stratégie défencive pour bloquer le joueur
- Essayer de trouver un autre chemin si on est bloqué
- Ajouter des éléments d'interface (durée de jeu, score etc.)
- Ajouter des musiques, effets, mode en ligne...

Bon courrage !


Résultat final

Vous pouvez tester le résultat final en cliquant sur le lien ci-dessous :

TESTER LA DEMO

Vous pouvez également jouer à une version plus avancées sur laquelle je travaille pendant mon temps libre :

TESTER LA DEMO

Télécharger les sources et le projet

Seuls les membres premium peuvent télécharger les fichiers sources et le projet du tutoriel.

Devenez membre premium !