bon début chargement

This commit is contained in:
Haïssous Kayyissa 2022-05-25 08:47:55 +02:00
parent 32d6ad2eb3
commit 81b6d2f709
7 changed files with 152 additions and 41 deletions

Binary file not shown.

View File

@ -7,10 +7,12 @@ public class Chargement implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
this.menu.dispose();
this.menu.setVisible(false);
this.menu.deleteCharger();
SaveManager saveManager = new SaveManager();
SaveManager.SaveData donnees = saveManager.load("Save.txt");
System.out.println(donnees);
new FrameJeu((int) donnees.taille.getHeight(),(int) donnees.taille.getWidth(), donnees,(int) donnees.mines, this.menu);
}
}

View File

@ -3,8 +3,25 @@ import java.awt.*;
// Cette classe à pour but d'afficher un menu et de réagir aux directives de l'utilisateur (lancer le jeu, le quitter...)
public class FrameJeu extends JFrame{
public FrameJeu(int lignes, int colonnes, int mines, FrameMenu menu) {
private Grille grille;
public FrameJeu(int lignes, int colonnes, int mines, FrameMenu menu) {
super();
// Création d'une grille pour une nouvelle partie
this.grille=new Grille(lignes,colonnes,mines,this, menu);
MiseEnPage();
}
// Génération d'une grille à partir de la sauvegarde
public FrameJeu (int lignes, int colonnes, SaveManager.SaveData donnees, int mines, FrameMenu menu){
super();
this.grille=new Grille(lignes,colonnes,donnees,mines,this, menu);
MiseEnPage();
}
public void MiseEnPage(){
// On récupère les dimensions de l'écran pour adapter la taille par défaut de notre fenêtre
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
@ -16,9 +33,6 @@ public class FrameJeu extends JFrame{
this.setLayout(new GridBagLayout());
GridBagConstraints miseEnPage = new GridBagConstraints();
// Création de la grille de Jeu
Grille grille=new Grille(lignes,colonnes,mines,this, menu);
// Récupération de la bannière
Banniere banniere = grille.getBanniere();

View File

@ -14,6 +14,7 @@ public class FrameMenu extends JFrame{
private JLabel showLines;
private JLabel showColumns;
private JLabel showMines;
private JButton charger;
public FrameMenu() {
super();
@ -87,7 +88,7 @@ public class FrameMenu extends JFrame{
File save = new File("Save.txt");
if(save.exists()){
JButton charger = new JButton("Charger");
charger = new JButton("Charger");
charger.addActionListener(new Chargement(this));
charger.setBounds(frameSize.width*4/10, frameSize.height*12/15, frameSize.width/5, frameSize.height/15);
this.add(charger);
@ -120,4 +121,9 @@ public class FrameMenu extends JFrame{
settings[2]=this.mines;
return settings;
}
// Methode pour supprimer le bouton charger après un chargement
public void deleteCharger(){
this.remove(this.charger);
}
}

View File

@ -15,10 +15,9 @@ public class Grille extends JPanel{
private boolean enJeu;
private FrameJeu fenetre;
// TODO : entourage dans une méthode
// TODO : Recréer un tableau avec les cases minees
// Définition du constructeur qui correspond à une grille de jeu
// Définition du constructeur qui correspond à une nouvelle grille de jeu
public Grille(int lignes, int colonnes, int mines, FrameJeu fenetre, FrameMenu menu){
super();
this.colonnes=colonnes;
@ -28,6 +27,7 @@ public class Grille extends JPanel{
this.minesLeft=mines;
this.enJeu=true;
this.fenetre=fenetre;
// Découpage de l'espace en fonction des paramètres pour la mise en place de la grille
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
this.grilleSize = new Dimension(((screenSize.height*3/4)/lignes)*colonnes, screenSize.height*3/4 );
@ -68,6 +68,105 @@ public class Grille extends JPanel{
}
}
// On défini l'entourage de chaque case
SetEntourage(caseMine);
// On place les cases à leur état actuel dans la grille
AfficherPlateau();
// On
this.banniere.setMinesLeft(this.minesLeft);
}
public Grille (int lignes,int colonnes,SaveManager.SaveData donnees,int mines,FrameJeu fenetre, FrameMenu menu){
super();
this.colonnes=colonnes;
this.lignes=lignes;
this.taille=lignes*colonnes;
this.minesLeft=mines;
this.mines=mines;
this.enJeu=true;
this.fenetre=fenetre;
// Découpage de l'espace en fonction des paramètres pour la mise en place de la grille
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
this.grilleSize = new Dimension(((screenSize.height*3/4)/lignes)*colonnes, screenSize.height*3/4 );
Dimension caseSize = new Dimension(this.grilleSize.height/lignes,this.grilleSize.height/lignes);
GridLayout damier = new GridLayout(lignes,colonnes);
Banniere banniere = new Banniere(mines,this.fenetre, menu, this);
this.banniere=banniere;
this.setLayout(damier);
this.setSize(grilleSize);
// On initialise un plateau de cases
GenererPlateau(caseSize);
// On prépare un tableau pour y placer les cases minées
int[] caseMine = new int[mines];
// On lit maintenant les données pour fixer certains de leurs attributs
int j=0;
for (int i=0;i<=taille-1;i++){
System.out.println(donnees.cases.substring(i,i+1));
if (Integer.parseInt(donnees.cases.substring(i,i+1))==1){
plateau[i].setMine();
caseMine[j]=i;
j++;
} else if (Integer.parseInt(donnees.cases.substring(i,i+1))==2){
plateau[i].setReperee(true);
} else if (Integer.parseInt(donnees.cases.substring(i,i+1))==3){
plateau[i].setMine();
plateau[i].setReperee(true);
} else if (Integer.parseInt(donnees.cases.substring(i,i+1))==4){
plateau[i].setVisible();
}
}
// On détermine l'entourage de chaque case
SetEntourage(caseMine);
// On affiche la grille
AfficherPlateau();
}
// Méthode pour Génerer le plateau
protected void GenererPlateau(Dimension caseSize){
this.plateau= new Case[this.taille];
for (int i=0;i<this.taille;i++){
this.plateau[i]= new Case(this,caseSize);
}
}
// Méthode pour Afficher le plateau
protected void AfficherPlateau(){
for (int i=0;i<this.taille;i++){
this.add(this.plateau[i]);
}
}
// Méthode pour établir le nombre de mines autour de chaque case
protected void SetEntourage(int[] caseMine){
// On cherche à connaître le nombre de mines autour de chaque case
for (int i=0;i<taille;i++){
int entourage = 0;
@ -138,26 +237,6 @@ public class Grille extends JPanel{
}
plateau[i].setEntourage(entourage);
}
// On place les cases à leur état actuel dans la grille
AfficherPlateau();
this.banniere.setMinesLeft(this.minesLeft);
}
// Méthode pour Génerer le plateau
protected void GenererPlateau(Dimension caseSize){
this.plateau= new Case[this.taille];
for (int i=0;i<this.taille;i++){
this.plateau[i]= new Case(this,caseSize);
}
}
// Méthode pour Afficher le plateau
protected void AfficherPlateau(){
for (int i=0;i<this.taille;i++){
this.add(this.plateau[i]);
}
}
// Méthode pour obtenir la taille de la grille de jeu
@ -208,12 +287,17 @@ public class Grille extends JPanel{
return Arrays.copyOf(this.plateau,this.taille);
}
// Méthode pour récupérer le nombre de lignes
// Méthode pour récupérer la taille de la grille
public Dimension getDimensionGrille(){
Dimension grilleSize= new Dimension(this.colonnes, this.lignes);
return grilleSize;
}
// Méthode pour savoir combien de mines sont dans la grille
public int getMines(){
return this.mines;
}
// Méthode pour rendre visibles les cases autour d'un 0
public void setEntourageVisible(Case panel){
for(int i=0; i<this.taille;i++){

View File

@ -1,2 +1,2 @@
30x9
100000000001000000010000000000000000000100010000110000000000010000100000000000000000000000001000000010000000001100100000011011100100100000001010000000010000000100000000000000010101100100011000100101000010001011100000000000000001000100000000001100101000100000001000110000
25x20x50
44444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444

View File

@ -6,7 +6,7 @@ public class SaveManager {
public void save(Grille grille, String nomFichier) {
Dimension taille = grille.getDimensionGrille();
String metaData= (int) taille.getWidth()+"x"+ (int) taille.getHeight()+"\n";
String metaData= (int) taille.getWidth()+"x"+ (int) taille.getHeight()+"x"+ grille.getMines()+"\n";
try {
BufferedWriter fichier = new BufferedWriter(new FileWriter(nomFichier));
Case[] toSave = grille.getPlateau();
@ -26,17 +26,19 @@ public class SaveManager {
public SaveData load(String nomFichier) {
String toReturn="";
String ligne;
int mines=0;
Dimension dimension=new Dimension(0,0);
SaveData toRet=new SaveData(null, null);
SaveData toRet=new SaveData(null, null, 0);
try {
BufferedReader fichier = new BufferedReader(new FileReader(nomFichier));
ligne=fichier.readLine();
String[] taille = ligne.split("x");
String[] infos = ligne.split("x");
int largeur = Integer.parseInt(taille[0]);
int hauteur = Integer.parseInt(taille[1]);
int largeur = Integer.parseInt(infos[0]);
int hauteur = Integer.parseInt(infos[1]);
mines = Integer.parseInt(infos[2]);
dimension = new Dimension(largeur, hauteur);
@ -48,26 +50,29 @@ public class SaveManager {
} catch (IOException e) {
e.printStackTrace();
}
toRet.cases=toReturn;
toRet.taille=dimension;
toRet.mines=mines;
File save = new File(nomFichier);
save.delete();
toRet.cases=toReturn;
toRet.taille=dimension;
return toRet;
}
public class SaveData{
public Dimension taille;
public String cases;
public int mines;
public SaveData(Dimension taille, String cases) {
public SaveData(Dimension taille, String cases, int mines) {
this.taille = taille;
this.cases = cases;
}
public String toString() {
return (int) taille.getWidth()+"x"+(int) taille.getHeight()+"\n"+cases;
return (int) taille.getWidth()+"x"+(int) taille.getHeight()+"x"+mines+"\n"+cases;
}
}
}