Ajout des fonctions necessaire et la vue de grille
This commit is contained in:
@@ -0,0 +1,64 @@
|
|||||||
|
package game;
|
||||||
|
|
||||||
|
import java.util.Random;
|
||||||
|
|
||||||
|
public class EtatJeu {
|
||||||
|
|
||||||
|
public static final int NB_LIGNES = 6;
|
||||||
|
public static final int NB_COLONNES = 6;
|
||||||
|
public static final int NB_TYPES = 7;
|
||||||
|
|
||||||
|
private final int[][] grille = new int[NB_LIGNES][NB_COLONNES];
|
||||||
|
private final Random aleatoire;
|
||||||
|
|
||||||
|
public EtatJeu() {
|
||||||
|
aleatoire = new Random();
|
||||||
|
initialiserGrilleSansTriples();
|
||||||
|
}
|
||||||
|
|
||||||
|
// --- Lecture / écriture ---
|
||||||
|
public int obtenirCase(int ligne, int colonne) {
|
||||||
|
return grille[ligne][colonne];
|
||||||
|
}
|
||||||
|
|
||||||
|
public void definirCase(int ligne, int colonne, int valeur) {
|
||||||
|
grille[ligne][colonne] = valeur;
|
||||||
|
}
|
||||||
|
|
||||||
|
// --- Initialisation de la grille sans séries de 3 ---
|
||||||
|
private void initialiserGrilleSansTriples() {
|
||||||
|
for (int ligne = 0; ligne < NB_LIGNES; ligne++) {
|
||||||
|
for (int colonne = 0; colonne < NB_COLONNES; colonne++) {
|
||||||
|
|
||||||
|
int valeur;
|
||||||
|
do {
|
||||||
|
valeur = aleatoire.nextInt(NB_TYPES); // 0..6
|
||||||
|
} while (creeTriple(ligne, colonne, valeur));
|
||||||
|
|
||||||
|
grille[ligne][colonne] = valeur;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Renvoie true si mettre "valeur" à (ligne, colonne) créerait une série de 3
|
||||||
|
private boolean creeTriple(int ligne, int colonne, int valeur) {
|
||||||
|
|
||||||
|
// Test horizontal : XXX à gauche
|
||||||
|
if (colonne >= 2) {
|
||||||
|
if (grille[ligne][colonne - 1] == valeur &&
|
||||||
|
grille[ligne][colonne - 2] == valeur) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Test vertical : XXX au-dessus
|
||||||
|
if (ligne >= 2) {
|
||||||
|
if (grille[ligne - 1][colonne] == valeur &&
|
||||||
|
grille[ligne - 2][colonne] == valeur) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,24 +1,21 @@
|
|||||||
package com.example.myapplication;
|
package com.example.myapplication;
|
||||||
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
|
||||||
import androidx.appcompat.app.AppCompatActivity;
|
import androidx.appcompat.app.AppCompatActivity;
|
||||||
|
|
||||||
import com.example.myapplication.game.EtatJeu;
|
import game.EtatJeu;
|
||||||
import com.example.myapplication.ui.VueGrille;
|
import ui.VueGrille;
|
||||||
|
|
||||||
public class MainActivity extends AppCompatActivity {
|
public class MainActivity extends AppCompatActivity {
|
||||||
|
|
||||||
private EtatJeu etatJeu;
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
|
|
||||||
VueGrille vueGrille = new VueGrille(this, null);
|
EtatJeu etatJeu = new EtatJeu();
|
||||||
setContentView(vueGrille);
|
VueGrille vueGrille = new VueGrille(this);
|
||||||
|
|
||||||
etatJeu = new EtatJeu();
|
|
||||||
vueGrille.definirEtatJeu(etatJeu);
|
vueGrille.definirEtatJeu(etatJeu);
|
||||||
|
|
||||||
|
setContentView(vueGrille);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,72 @@
|
|||||||
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user