Copy of https://perso.isima.fr/loic/java/exo_flood.php
tete du loic

 Loïc YON [KIUX]

  • Enseignant-chercheur
  • Référent Formation Continue
  • Responsable des contrats pros ingénieur
  • Référent entrepreneuriat
  • Responsable de la filière F2 ingénieur
  • Secouriste Sauveteur du Travail
mail
loic.yon@isima.fr
phone
(+33 / 0) 4 73 40 50 42
location_on
Institut d'informatique ISIMA
  • twitter
  • linkedin
  • viadeo

[JavaSE] Flood It Again

 Cette page commence à dater. Son contenu n'est peut-être plus à jour. Contactez-moi si c'est le cas!

Date de première publication : 2016/09/20

Coder le jeu "FloodIt" soit en JavaFX, soit en Swing !

Principe du jeu

Nous vous proposons de le jeu qui s’intitule Flood It (de LabPixies disponible sur iPhone et Android). Le principe est très simple : Vous disposez d’une zone de jeu carrée de 12 cases par 12 cases. Chacune des cases est remplie d’une couleur sur 6 possibles. Vous devez vous arranger pour que toutes les cases soient de la même couleur en 22 coups maximum. Pour cela, vous choisissez une couleur pour la case en haut à gauche et cela peint toutes les cases adjacentes de cette couleur : le raz de marée. On dira qu’une case est adjacente si elle est de la couleur de la première case avant le changement et si elle touche une case de cette couleur soit par le haut/bas, soit par la gauche ou la droite (on ne considère pas les cases en diagonales).

Si vous voulez tester le jeu, il est jouable ici.

On remplace les couleurs par un chiffre entre 0 et 5. Voici un petit exemple :

Situation initiale :

0131
2122
3113
0044
La première case est de la couleur 0...

Premier coup :

1131
2122
3113
0044
On choisit la couleur 1. On aurait pu choisir la couleur 2 mais une seule case aurait été couverte en plus. Choisir les couleurs 3 ou 4 n'aurait pas eu d'intérêt.

Deuxième coup :

3331
2322
3333
0044
On choisit la couleur 3 arbitrairement (toutes les autres à l'exception de la 1 auraient pu convenir).

La partie se termine alors en 6 coups (choisir dans n'importe quel ordre les couleurs 2, 1, 0 et 4). Vous avez compris ?

Deuxième coup :

1230
0220
3223
0000
Voici les informations sur les itérations au deuxième coup de jeu. Les cases avec 0 n'ont pas encore été "floodées".

Modèle MVC

Si l'on veut appliquer le modèle MVC à ce jeu, il faut tout d'abord coder le modèle : une classe Zone qui permet de gérer cette fameuse grille de couleurs. Cette classe doit :

Voici le code de la fonction remplir() :

static boolean remplir(int[][] grille, int i, int j, 
                       int ancien, int nouv) {
    if ((i>=TAILLE) || (j>=TAILLE) || (i<0) || (j<0))
      return false;
    if ((i==0) && (j==0) && nouv == ancien)
      return false;
    
    if (grille[i][j] == ancien) {
      grille[i][j] = nouv;
      remplir(grille, i  , j+1, ancien, nouv);
      remplir(grille, i+1, j,   ancien, nouv);
      remplir(grille, i-1, j,   ancien, nouv);
      remplir(grille, i,   j-1, ancien, nouv);
    }
    return true;
  }

Le modèle est indépendant de la mise en œuvre graphique.

Ce qu'il faut faire en JavaFX...

On peut coder l'application avec un tableau de Button mais je n'aime pas le rendu. Je préfère utiliser un Canvas redimensionnable qui dessine toute la grille et sur laquelle on va réagir aux événements de type clic

Ce qu'il faut faire en Swing...

Compléments

Il faudrait aussi gérer les choses suivantes :