SAE21_2021/Grille.java

110 lines
3.1 KiB
Java
Raw Normal View History

2022-04-27 16:16:34 +02:00
import javax.swing.*;
import java.awt.*;
2022-04-28 16:50:06 +02:00
import java.util.Random;
2022-04-27 16:16:34 +02:00
public class Grille extends JComponent {
private Dimension grilleSize=new Dimension(0,0);
private JPanel grille= new JPanel();
// On créer La grille de jeu
public Grille(int lignes, int colonnes, int mines){
// Découpage de l'espace en fonction des paramètres pour la mise en place de la grille
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
2022-04-28 16:50:06 +02:00
this.grilleSize = new Dimension(((screenSize.height*3/4)/lignes)*colonnes, screenSize.height*3/4 );
2022-04-27 17:42:05 +02:00
Dimension caseSize = new Dimension(this.grilleSize.height/lignes,this.grilleSize.height/lignes);
2022-04-27 16:16:34 +02:00
GridLayout damier = new GridLayout(lignes,colonnes);
2022-04-27 17:42:05 +02:00
System.out.println("Taille des cases : "+caseSize);
System.out.println("Taille de la Grille : "+grilleSize);
2022-04-27 16:16:34 +02:00
this.grille.setLayout(damier);
this.grille.setSize(grilleSize);
2022-04-28 16:50:06 +02:00
// Initialisation : les cases sont cachées
boolean[] visible = new boolean[lignes*colonnes];
for (int i=0; i<lignes*colonnes;i++){
visible[i]=true;
}
// Instalation des mines
// Création d'un tableau de nombres aléatoires pour savoir où les placer
int[] caseMine = new int[mines];
Random mine = new Random();
for (int i=0;i<mines;i++){
caseMine[i]=mine.nextInt(lignes*colonnes);
// On vérifie qu'on n'a pas miné une case déjà minée
for (int j=0;j<mines;j++){
if (caseMine[j]==caseMine[i]){
caseMine[i]=mine.nextInt(lignes*colonnes);
2022-04-27 16:16:34 +02:00
}
2022-04-28 16:50:06 +02:00
}
}
// Comme pour savoir si une case est visible, mais pour quand elle est minée
boolean[] minee = new boolean[lignes*colonnes];
for (int i=0; i<lignes*colonnes;i++){
for (int j=0;j<mines;j++){
if (caseMine[j]==i){
minee[i]=true;
}
}
}
2022-04-28 17:57:18 +02:00
// Connaître le nombre de mines autour de la case
int[] entourage = new int[lignes*colonnes];
for (int i=0;i<lignes*colonnes;i++){
for (int j=0;j<mines;j++){
// Si une mine est à droite
if (caseMine[j]==i+1){
entourage[i]+=1;
}
// Si une mine est à gauche
if (caseMine[j]==i-1){
entourage[i]+=1;
}
// Si une mine est au dessus
if (caseMine[j]==i-colonnes){
entourage[i]+=1;
}
// Si une mine est au dessus à droite
if (caseMine[j]==i-colonnes+1){
entourage[i]+=1;
}
// Si une mine est au dessus à gauche
if (caseMine[j]==i-colonnes-1){
entourage[i]+=1;
}
// Si une mine est en dessous
if (caseMine[j]==i+colonnes){
entourage[i]+=1;
}
// Si une mine est en dessous à droite
if (caseMine[j]==i+colonnes+1){
entourage[i]+=1;
}
// Si une mine est en dessous à gauche
if (caseMine[j]==i+colonnes-1){
entourage[i]+=1;
}
}
}
2022-04-28 16:50:06 +02:00
// Affichage des cases
for (int i=0;i<lignes*colonnes;i++){
2022-04-28 17:57:18 +02:00
Case panel = new Case(caseSize,visible[i],minee[i],entourage[i]);
2022-04-28 16:50:06 +02:00
this.grille.add(panel.getCase());
2022-04-27 16:16:34 +02:00
}
}
2022-04-28 16:50:06 +02:00
// Méthode pour obtenir la taille de la grille de jeu
2022-04-27 16:16:34 +02:00
public Dimension getGrilleSize() {
return grilleSize;
}
2022-04-28 16:50:06 +02:00
// Methode pour obtenir le panel pour l'affichage de la grille
2022-04-27 16:16:34 +02:00
public JPanel getGrille() {
return grille;
}
}