Enoncé du Jeu du Carré

lundi 27 mai 2019
par  Emmanuel Adam
popularité : 3%

Ce tp vise à reproduire le jeu du carré en java

2 joueurs jouent au travers le réseau sur une grille et trace à chaque tour une ligne sur la grille prédéfinie.

Si un joueur complète un carré de une unité, il marque un point, une croix se dessine sur le carré, et le joueur peut rejouer.

Le jeu prend fin lorsque toutes les lignes de la grille ont été tracées.

En attachement, vous trouverez le sujet détaillé en version pdf

Vous devez dans un premier temps de créer une application JavaFX (et JavaFX uniquement, pas de swing ou d’autres librairies) pour permettre à 2 joueurs de jouer l’un contre l’autre sur une seule machine.

L’application doit être capable de détecter les carrés créés.

Si vous débutez en JavaFX, vérifiez votre configuration avec l’article « Utiliser JavaFX sous Eclipse ».

Etape 1. Reprenez le code du jeu du yote disponible sur ce lien
et adaptez le, vous gagnerez un temps précieux.......

Etape 2. Le modèle lorsque la partie graphique est réalisée (dessin de la grille, et réponse au clic souris), intéressez vous au modèle.
A priori une grille n x n d’entiers contenant le nombre de traits dessinés par case devrait suffire..

Guide

vous êtes libres de vos choix de conception.

Dessiner la grille par une série de traits cliquables est une solution possible.
Voici quelques éléments de cette solution

  • Une classe TraitGr qui étend la classe Line,
    cette classe représente un trait qui possède un état (normal, joueur1, joueur2)
  • Une énumération Etat
    1. public enum Etat {LIBRE(Color.GRAY), J1(Color.BLUE), J2(Color.RED);
    2.   Color couleur;
    3.   Etat(Color _couleur){couleur = _couleur;}
    4.   public Color getCouleur(){return couleur;}
    5. }
    • Un constructeur de TraitGr qui accepte les 4 arguments classiques (xo, yo, xf, yf)
    • Une méthode setEtat(Etat _etat) dans TraitGr
  • Dans la classe principale (supposons qu’elle s’appelle CarreApp), cette méthode permet de créer la grille par une série de traits :
    1. void dessinEnvironnement()
    2. {
    3.   int decalage = tailleCase/2;
    4.   TraitGr trait = null;
    5.   // dessin des lignes
    6.   for(int i=0; i<=nbCases; i++)
    7.   {
    8.     for(int j=0; j<=nbCases; j++)
    9.     {
    10.       if(j<nbCases){
    11.         trait = new TraitGr(decalage  +tailleCase * i, decalage+ decalageTrait+tailleCase * j, decalage+ tailleCase * i, decalage -decalageTrait+ tailleCase * (j+1) );
    12.         ajoutTrait( trait, i, j, false);
    13.      }
    14.     if(i<nbCases){
    15.        trait = new TraitGr(decalage +decalageTrait +tailleCase * i, decalage+tailleCase * j, decalage-decalageTrait+ tailleCase * (i+1), decalage+ tailleCase *j );
    16.       ajoutTrait( trait, i, j, true);
    17.     }
    18.   }    
    19.  }
    20. }
    • ajoutTrait(TraitGr trait, int i, int j, boolean horizontal) permet d’ajouter un trait à la troupe des éléments graphiques (de type Group) en spécifiant si c’est un trait horizontal ou vertical. Cette méthode doit également ajouter l’écoute d’événements souris sur le trait :
      trait.setOnMouseClicked(me->{
      //le code de gestion de clic sur le trait
      });

Gestion des couleurs

Ajoutez une fenêtre de dialogue permettant de gérer les couleurs..
Basez vous pour cela sur l’exemple situé sur ce lien
Java Cours : Création de fenêtre en JavaFX

IA

Créez maintenant une IA au jeu des carrés.
Selon vos connaissances,

  • vous pouvez développez une IA en utilisant l’algorithme alpha-beta
    ( page 14 du cours sur la programmation de jeux ).
  • ou développez un algorithme simple agissant sur 1 niveau (donc réagissant directement à une action de l’adversaire).

Su 1 niveau, l’IA cherche donc à remplir les carrés (là où 3 traits sont placés, elle complète le carré), et à éviter de permettre à l’Humain/e de remplir le carré (elle cherche à ne pas placer un 3e trait sur une case)

Déplacement de la souris avec IA : un Robot

La classe Robot existe depuis java.awt, mais elle est également disponible pour les nouvelles interfaces :
Par exemple, ce code

  1. com.sun.glass.ui.Robot robot = com.sun.glass.ui.Application.GetApplication().createRobot();
  2. robot.mouseMove(500, 200);
  3. robot.mousePress(MouseEvent.BUTTON_LEFT);
  4. robot.mouseRelease(MouseEvent.BUTTON_LEFT);

déplace le pointeur au point (500, 200), clic sur le bouton gauche et le relache.

Ceci permet de simuler dans ce tp le jeu de l’IA.

Eléments de solution

Sur ce lien GitHub, vous trouverez l’ensemble des classes permettant de jouer au jeu du carré contre une « mini IA » n’utilisant ni alpha-beta, ni MCTS..

’Il-re-reste-plus-qu-à’ implémenter ces algos pour obtenir une « vraie adversaire IA »


Documents joints

Enoncé du TP sur le Jeu des Carrés