Enoncé du Jeu du Carré
par
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
- 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 :
- void dessinEnvironnement()
- {
- int decalage = tailleCase/2;
- TraitGr trait = null;
- // dessin des lignes
- for(int i=0; i<=nbCases; i++)
- {
- for(int j=0; j<=nbCases; j++)
- {
- if(j<nbCases){
- trait = new TraitGr(decalage +tailleCase * i, decalage+ decalageTrait+tailleCase * j, decalage+ tailleCase * i, decalage -decalageTrait+ tailleCase * (j+1) );
- ajoutTrait( trait, i, j, false);
- }
- if(i<nbCases){
- trait = new TraitGr(decalage +decalageTrait +tailleCase * i, decalage+tailleCase * j, decalage-decalageTrait+ tailleCase * (i+1), decalage+ tailleCase *j );
- ajoutTrait( trait, i, j, true);
- }
- }
- }
- }
- où
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
- robot.mouseMove(500, 200);
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 »