package ui; import android.content.Context; import android.graphics.Canvas; import android.graphics.Paint; import android.view.View; import androidx.annotation.NonNull; import game.EtatJeu; public class VueGrille extends View { private EtatJeu etatJeu; private final Paint pinceau = new Paint(); public VueGrille(Context contexte) { super(contexte); pinceau.setAntiAlias(true); pinceau.setStyle(Paint.Style.FILL); } public void definirEtatJeu(EtatJeu etatJeu) { this.etatJeu = etatJeu; invalidate(); // force le redessin } @Override protected void onDraw(@NonNull Canvas canvas) { super.onDraw(canvas); if (etatJeu == null) return; int largeur = getWidth(); int hauteur = getHeight(); float tailleCase = Math.min( largeur / (float) EtatJeu.NB_COLONNES, hauteur / (float) EtatJeu.NB_LIGNES ); float margeGauche = (largeur - tailleCase * EtatJeu.NB_COLONNES) / 2f; float margeHaut = (hauteur - tailleCase * EtatJeu.NB_LIGNES) / 2f; for (int ligne = 0; ligne < EtatJeu.NB_LIGNES; ligne++) { for (int colonne = 0; colonne < EtatJeu.NB_COLONNES; colonne++) { int type = etatJeu.obtenirCase(ligne, colonne); definirCouleur(type); float x1 = margeGauche + colonne * tailleCase + 6; float y1 = margeHaut + ligne * tailleCase + 6; float x2 = margeGauche + (colonne + 1) * tailleCase - 6; float y2 = margeHaut + (ligne + 1) * tailleCase - 6; canvas.drawRoundRect(x1, y1, x2, y2, 20, 20, pinceau); } } } private void definirCouleur(int type) { switch (type % EtatJeu.NB_TYPES) { case 0: pinceau.setARGB(255, 200, 200, 200); break; case 1: pinceau.setARGB(255, 255, 105, 180); break; case 2: pinceau.setARGB(255, 90, 230, 200); break; case 3: pinceau.setARGB(255, 100, 170, 255); break; case 4: pinceau.setARGB(255, 255, 220, 90); break; case 5: pinceau.setARGB(255, 255, 140, 90); break; case 6: pinceau.setARGB(255, 255, 90, 90); break; } } }