avancee debut/fin

This commit is contained in:
Haïssous Kayyissa 2022-05-16 20:19:51 +02:00
parent bb1215eab7
commit 528870aeff
9 changed files with 102 additions and 156 deletions

BIN
Avancee.odt Normal file

Binary file not shown.

View File

@ -8,8 +8,8 @@ public class Case extends JPanel {
private boolean visible;
private boolean minee;
private boolean reperee;
private boolean deminee;
private ListenerCase listener;
private boolean finDePartie;
// Définition du constructeur
public Case(Grille grille, Dimension caseSize) {
@ -17,8 +17,8 @@ public class Case extends JPanel {
// Initialisation des attributs
this.visible=false;
this.reperee=false;
this.deminee=false;
this.grille=grille;
this.finDePartie=false;
// On place un listener sur notre case pour qu'elle réagisse aux clicks du joueur
this.listener = new ListenerCase();
@ -31,28 +31,34 @@ public class Case extends JPanel {
this.setBackground(new Color(70, 70, 70));
}
// Méthode qui permet de montrer la case, et de la considérer comme minée
// Méthode qui permet de montrer la case, et fait perdre si elle est minée
public void setVisible(){
if (this.visible==false){
if (!this.visible){
this.visible = true;
this.deminee = true;
// On affiche une mine si la case est minée, sinon le nombre de mines autour d'elle
if (this.minee == true) {
if ((this.minee)&&(!this.finDePartie)) {
this.setBackground(new Color(200, 0, 0));
this.grille.setAllVisible();
this.finDePartie=true;
}
else if ((this.minee)&&(this.finDePartie)) {
this.setBackground(new Color(236, 0, 140));
} else {
this.setBackground(new Color(80, 80, 80));
if (this.entourage > 0) {
this.add(new Entourage(this.entourage, this.getSize()));
}
this.grille.verifVictoire();
}
// Mise à jour de l'affichage de la case
this.updateUI();
if ((this.entourage == 0)&&(minee==false)) {
if ((this.entourage == 0)&&(!minee)) {
this.grille.setEntourageVisible(this);
}
this.grille.verifVictoire();
}
}
@ -90,7 +96,6 @@ public class Case extends JPanel {
public void setReperee(boolean reperee){
this.reperee=reperee;
if ((reperee)&&(minee)){
this.deminee=true;
this.grille.verifVictoire();
}
this.grille.MinesLeft();
@ -101,8 +106,18 @@ public class Case extends JPanel {
return this.reperee;
}
// Methode pour dire si la case a été déminée
public boolean getDeminee(){
return this.deminee;
// Methode pour montrer que la partie est gagnée
public void setVictoire(){
this.finDePartie=true;
if (this.minee==true){
removeAll();
this.setBackground(new Color(236, 214, 0));;
}
}
// Methode pour savoir dans le Listener si la partie est finie ou non
public boolean getFinDePartie(){
return this.finDePartie;
}
}

View File

@ -1,21 +0,0 @@
import javax.swing.JComponent;
import java.awt.*;
public class Chiffre extends JComponent {
private int entourage;
private Dimension caseSize;
public Chiffre(int entourage, Dimension caseSize) {
super();
this.entourage = entourage;
this.caseSize=caseSize;
}
@Override
protected void paintComponent(Graphics pinceau) {
Graphics chiffre = pinceau.create();
Font font = new Font("Arial", Font.BOLD, caseSize.width*2/5);
chiffre.setFont(font);
Color jaune = new Color(236, 214, 0);
chiffre.setColor(jaune);
chiffre.drawString(Integer.toString(this.entourage),caseSize.width*2/5,caseSize.height*3/5);
}
}

View File

@ -1,5 +0,0 @@
public class FrameVictoire {
public FrameVictoire(Grille grille){
System.out.println("Victoire!");
}
}

View File

@ -28,7 +28,7 @@ public class Grille extends JPanel {
this.mines=mines;
this.banniere=banniere;
// On génère le plateau contenant les cases
GenererPlateau(taille, caseSize);
GenererPlateau(caseSize);
// Instalation des mines
@ -130,24 +130,31 @@ public class Grille extends JPanel {
// On place les cases à leur état actuel dans la grille
AfficherPlateau(taille);
AfficherPlateau();
}
// Méthode pour Génerer le plateau
protected void GenererPlateau(int taille, Dimension caseSize){
this.plateau= new Case[taille];
for (int i=0;i<taille;i++){
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(int taille){
for (int i=0;i<taille;i++){
protected void AfficherPlateau(){
for (int i=0;i<this.taille;i++){
this.add(this.plateau[i]);
}
}
// Méthode pour montrer toutes les cases à la fin de la partie
public void setAllVisible(){
for (int i=0;i<this.taille;i++){
this.plateau[i].setVisible();
}
}
// Méthode pour obtenir la taille de la grille de jeu
public Dimension getGrilleSize(){
return grilleSize;
@ -166,16 +173,24 @@ public class Grille extends JPanel {
// Méthode déterminant les conditions de victoire
public void verifVictoire(){
int casesDeminees=0;
int casesVisibles=0;
for (int i=0;i<this.taille;i++){
if(plateau[i].getDeminee()==true){
casesDeminees+=1;
if(plateau[i].getVisible()==true){
casesVisibles+=1;
}
}
if (taille==casesDeminees){
new FrameVictoire(this);
// Lance la victoire si les conditions sont remplies
if (taille-mines==casesVisibles){
for (int i=0;i<taille;i++){
this.plateau[i].setVictoire();
}
}
}
// Methode pour récupérer le plateau de jeu
public Case[] getPlateau(){
return this.plateau;
}
// Méthode pour rendre visibles les cases autour d'un 0
public void setEntourageVisible(Case panel){

View File

@ -1,44 +0,0 @@
import java.awt.event.*;
import java.awt.*;
public class Listener implements MouseListener{
private int marquage=0;
@Override
public void mouseClicked(MouseEvent evenement){
Case panel = (Case)evenement.getSource();
if ((evenement.getButton() == MouseEvent.BUTTON1)&&(panel.getVisible()==false)&&(this.marquage==0)){
panel.setVisible();
if (panel.getMine()==true){
System.out.println("Perdu!");
}
}
if (evenement.getButton() == MouseEvent.BUTTON3) {
if (this.marquage==0){
panel.add(new Etoile(panel.getSize()), BorderLayout.CENTER);
this.marquage=1;
}
else if (this.marquage==1){
panel.removeAll();
panel.add(new Sus(panel.getSize()), BorderLayout.CENTER);
this.marquage=2;
}
else if (this.marquage==2){
panel.removeAll();
this.marquage=0;
}
panel.updateUI();
System.out.println(""+this.marquage);
}
}
public void mouseEntered(MouseEvent evenement){
}
public void mouseExited(MouseEvent evenement){
}
public void mousePressed(MouseEvent evenement){
}
public void mouseReleased(MouseEvent evenement){
}
}

View File

@ -1,54 +1,58 @@
import java.awt.event.*;
import java.awt.*;
public class ListenerCase implements MouseListener{
private int marquage=0;
public class ListenerCase implements MouseListener {
private int marquage = 0;
@Override
// Méthode qui va servir à détecter le click de la souris
public void mouseClicked(MouseEvent evenement){
Case panel = (Case)evenement.getSource();
// Si le joueur clique gauche, tant que la case n'est pas marquée, elle sera révélée
if ((evenement.getButton() == MouseEvent.BUTTON1)&&(panel.getVisible()==false)&&(this.marquage==0)){
public void mouseClicked(MouseEvent evenement) {
Case panel = (Case) evenement.getSource();
if (panel.getFinDePartie() == false) {
// Si le joueur clique gauche, tant que la case n'est pas marquée, elle sera
// révélée
if ((evenement.getButton() == MouseEvent.BUTTON1) && (panel.getVisible() == false)
&& (this.marquage == 0)) {
panel.setVisible();
if (panel.getMine()==true){
System.out.println("Perdu!");
}
}
// Si le joueur clique droit, la case sera marquée
if ((evenement.getButton() == MouseEvent.BUTTON3)&&(panel.getVisible()==false)) {
if ((evenement.getButton() == MouseEvent.BUTTON3) && (panel.getVisible() == false)) {
// Au premier click, on place une étoile pour indiquer la présence d'une mine
// TODO: Regarder switch
if (this.marquage==0){
if (this.marquage == 0) {
panel.add(new Etoile(panel.getSize()), BorderLayout.CENTER);
panel.setReperee(true);
this.marquage=1;
this.marquage = 1;
}
// Au second, on met un point d'interrogation en cas de soupçon pour aider à la réflexion
else if (this.marquage==1){
// Au second, on met un point d'interrogation en cas de soupçon pour aider à la
// réflexion
else if (this.marquage == 1) {
panel.removeAll();
panel.add(new Doute(panel.getSize()), BorderLayout.CENTER);
this.marquage=2;
this.marquage = 2;
}
// Au troisième click on efface tout marquage
else if (this.marquage==2){
else if (this.marquage == 2) {
panel.setReperee(false);
panel.removeAll();
this.marquage=0;
this.marquage = 0;
}
// On met à jour l'affichage de la case cliquée
panel.updateUI();
}
}
}
// Les autres méthodes de l'interface n'interviennent pas
public void mouseEntered(MouseEvent evenement){
public void mouseEntered(MouseEvent evenement) {
}
public void mouseExited(MouseEvent evenement){
public void mouseExited(MouseEvent evenement) {
}
public void mousePressed(MouseEvent evenement){
public void mousePressed(MouseEvent evenement) {
}
public void mouseReleased(MouseEvent evenement){
public void mouseReleased(MouseEvent evenement) {
}
}

View File

@ -1,18 +0,0 @@
import javax.swing.JComponent;
import java.awt.*;
public class Sus extends JComponent {
private Dimension caseSize;
public Sus(Dimension caseSize) {
super();
this.caseSize=caseSize;
}
@Override
protected void paintComponent(Graphics pinceau) {
Graphics chiffre = pinceau.create();
Font font = new Font("Arial", Font.BOLD, caseSize.width*3/5);
chiffre.setFont(font);
chiffre.setColor(new Color(236, 0, 140));
chiffre.drawString("?",caseSize.width*3/10,caseSize.height*4/5);
}
}

View File

@ -1,6 +1,6 @@
public class Test {
public static void main(String[] args) {
new FrameJeu(15,20,40);
new FrameJeu(20,25,50);
}
}