Bonjour,
Je souhaiterais programmer le jeu du taquin en JavaFX.
Quelqu'un saurait-il me guider un peu pour faire cela ?
Merci d'avance pour votre aide.
Version imprimable
Bonjour,
Je souhaiterais programmer le jeu du taquin en JavaFX.
Quelqu'un saurait-il me guider un peu pour faire cela ?
Merci d'avance pour votre aide.
Salut,
Voici quelques idées : séparer le moteur des règles du jeu et sa représentation graphique en deux couches distinctes.
Tout d'abord réfléchit bien à la modélisation des règles qui n'est pas liée à la partie graphique (détecter qu'un nombre peut glisser car adjacent à une case vide, déplacer un nombre vers cette case vide = transfert de la case vide vers l'ancienne place du nombre, résolution du jeu = tout les carreaux sont dans l'ordre). Visiblement ces règles sont indépendantes de la taille de la grille N x N.
Ce faisant tu pourras développer des tests unitaires pour ces règles.
Du coup on peut même commencer à envisager des événements :
- Les nombres déplaçables = ObservableList<Integer> en lecture seule -> le moteur du jeu change le contenu de la liste quand les nombres déplaçables changent.
- Un nombre se déplace de la position A (x1, y1) à la position B (x2, y2) -> un événement de déplacement qui contient le nombre, la position de départ et celle d'arrivée (ici les coords sont dans la grille, pas à l'écran).
- Un événement indiquant que le jeu est fini.
Autre chose à envisager : la population de la grille aléatoirement en fonction de sa taille N x N avec vérification qu'on a pas généré une grille gagnante.
Réfléchir au calcul du score si besoin.
Réfléchir à l'implémentation éventuelle d'un solveur pour servir de démo ou d'aide au joueur (le joueur ne sait pas quoi faire alors le solveur lui donne le coup suivant, ou le solveur indique le nombre de coups restants avant de gagner la partie).
Ensuite tu peux réfléchir à la partie graphique :
- Un conteneur carré (Pane, AnchorPane, Group, etc.)
- Tout un tas de cellules carrées contenant un nombre chacune (Label, Region + Text, etc).
- Probablement une cellule carrée pour représenter la case vide (de manière à pouvoir interagir avec ou la styler via CSS).
Dans sa méthode layoutChildren()le conteneur dispose les nombres en grille.
Quand il reçoit un événement de déplacement du moteur du jeu, il fait l'animation de déplacement de la cellule (mode solveur ou démo).
Si c'est l'utilisateur qui déplace la cellule (souris ou doigt), il la déplace manuellement et ensuite notifie le moteur de jeu (mode interractif).
Rajouter après les sons qu'il faut lors des déplacement (raclement de la case qui bouge, clic de l’emboîtement, etc.) et la musique de fond.