avancee debut/fin
This commit is contained in:
parent
bb1215eab7
commit
528870aeff
BIN
Avancee.odt
Normal file
BIN
Avancee.odt
Normal file
Binary file not shown.
39
Case.java
39
Case.java
@ -8,8 +8,8 @@ public class Case extends JPanel {
|
|||||||
private boolean visible;
|
private boolean visible;
|
||||||
private boolean minee;
|
private boolean minee;
|
||||||
private boolean reperee;
|
private boolean reperee;
|
||||||
private boolean deminee;
|
|
||||||
private ListenerCase listener;
|
private ListenerCase listener;
|
||||||
|
private boolean finDePartie;
|
||||||
|
|
||||||
// Définition du constructeur
|
// Définition du constructeur
|
||||||
public Case(Grille grille, Dimension caseSize) {
|
public Case(Grille grille, Dimension caseSize) {
|
||||||
@ -17,8 +17,8 @@ public class Case extends JPanel {
|
|||||||
// Initialisation des attributs
|
// Initialisation des attributs
|
||||||
this.visible=false;
|
this.visible=false;
|
||||||
this.reperee=false;
|
this.reperee=false;
|
||||||
this.deminee=false;
|
|
||||||
this.grille=grille;
|
this.grille=grille;
|
||||||
|
this.finDePartie=false;
|
||||||
|
|
||||||
// On place un listener sur notre case pour qu'elle réagisse aux clicks du joueur
|
// On place un listener sur notre case pour qu'elle réagisse aux clicks du joueur
|
||||||
this.listener = new ListenerCase();
|
this.listener = new ListenerCase();
|
||||||
@ -31,28 +31,34 @@ public class Case extends JPanel {
|
|||||||
this.setBackground(new Color(70, 70, 70));
|
this.setBackground(new Color(70, 70, 70));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Méthode qui permet de montrer la case, et de la considérer comme déminée
|
// Méthode qui permet de montrer la case, et fait perdre si elle est minée
|
||||||
public void setVisible(){
|
public void setVisible(){
|
||||||
|
|
||||||
if (this.visible==false){
|
if (!this.visible){
|
||||||
this.visible = true;
|
this.visible = true;
|
||||||
this.deminee = true;
|
|
||||||
|
|
||||||
// On affiche une mine si la case est minée, sinon le nombre de mines autour d'elle
|
// 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));
|
this.setBackground(new Color(236, 0, 140));
|
||||||
} else {
|
} else {
|
||||||
this.setBackground(new Color(80, 80, 80));
|
this.setBackground(new Color(80, 80, 80));
|
||||||
|
|
||||||
if (this.entourage > 0) {
|
if (this.entourage > 0) {
|
||||||
this.add(new Entourage(this.entourage, this.getSize()));
|
this.add(new Entourage(this.entourage, this.getSize()));
|
||||||
}
|
}
|
||||||
|
this.grille.verifVictoire();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Mise à jour de l'affichage de la case
|
// Mise à jour de l'affichage de la case
|
||||||
this.updateUI();
|
this.updateUI();
|
||||||
if ((this.entourage == 0)&&(minee==false)) {
|
if ((this.entourage == 0)&&(!minee)) {
|
||||||
this.grille.setEntourageVisible(this);
|
this.grille.setEntourageVisible(this);
|
||||||
}
|
}
|
||||||
this.grille.verifVictoire();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -90,7 +96,6 @@ public class Case extends JPanel {
|
|||||||
public void setReperee(boolean reperee){
|
public void setReperee(boolean reperee){
|
||||||
this.reperee=reperee;
|
this.reperee=reperee;
|
||||||
if ((reperee)&&(minee)){
|
if ((reperee)&&(minee)){
|
||||||
this.deminee=true;
|
|
||||||
this.grille.verifVictoire();
|
this.grille.verifVictoire();
|
||||||
}
|
}
|
||||||
this.grille.MinesLeft();
|
this.grille.MinesLeft();
|
||||||
@ -101,8 +106,18 @@ public class Case extends JPanel {
|
|||||||
return this.reperee;
|
return this.reperee;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Methode pour dire si la case a été déminée
|
// Methode pour montrer que la partie est gagnée
|
||||||
public boolean getDeminee(){
|
public void setVictoire(){
|
||||||
return this.deminee;
|
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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
21
Chiffre.java
21
Chiffre.java
@ -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);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,5 +0,0 @@
|
|||||||
public class FrameVictoire {
|
|
||||||
public FrameVictoire(Grille grille){
|
|
||||||
System.out.println("Victoire!");
|
|
||||||
}
|
|
||||||
}
|
|
39
Grille.java
39
Grille.java
@ -28,7 +28,7 @@ public class Grille extends JPanel {
|
|||||||
this.mines=mines;
|
this.mines=mines;
|
||||||
this.banniere=banniere;
|
this.banniere=banniere;
|
||||||
// On génère le plateau contenant les cases
|
// On génère le plateau contenant les cases
|
||||||
GenererPlateau(taille, caseSize);
|
GenererPlateau(caseSize);
|
||||||
|
|
||||||
|
|
||||||
// Instalation des mines
|
// Instalation des mines
|
||||||
@ -130,24 +130,31 @@ public class Grille extends JPanel {
|
|||||||
|
|
||||||
|
|
||||||
// On place les cases à leur état actuel dans la grille
|
// On place les cases à leur état actuel dans la grille
|
||||||
AfficherPlateau(taille);
|
AfficherPlateau();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Méthode pour Génerer le plateau
|
// Méthode pour Génerer le plateau
|
||||||
protected void GenererPlateau(int taille, Dimension caseSize){
|
protected void GenererPlateau(Dimension caseSize){
|
||||||
this.plateau= new Case[taille];
|
this.plateau= new Case[this.taille];
|
||||||
for (int i=0;i<taille;i++){
|
for (int i=0;i<this.taille;i++){
|
||||||
this.plateau[i]= new Case(this,caseSize);
|
this.plateau[i]= new Case(this,caseSize);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Méthode pour Afficher le plateau
|
// Méthode pour Afficher le plateau
|
||||||
protected void AfficherPlateau(int taille){
|
protected void AfficherPlateau(){
|
||||||
for (int i=0;i<taille;i++){
|
for (int i=0;i<this.taille;i++){
|
||||||
this.add(this.plateau[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
|
// Méthode pour obtenir la taille de la grille de jeu
|
||||||
public Dimension getGrilleSize(){
|
public Dimension getGrilleSize(){
|
||||||
return grilleSize;
|
return grilleSize;
|
||||||
@ -166,17 +173,25 @@ public class Grille extends JPanel {
|
|||||||
|
|
||||||
// Méthode déterminant les conditions de victoire
|
// Méthode déterminant les conditions de victoire
|
||||||
public void verifVictoire(){
|
public void verifVictoire(){
|
||||||
int casesDeminees=0;
|
int casesVisibles=0;
|
||||||
for (int i=0;i<this.taille;i++){
|
for (int i=0;i<this.taille;i++){
|
||||||
if(plateau[i].getDeminee()==true){
|
if(plateau[i].getVisible()==true){
|
||||||
casesDeminees+=1;
|
casesVisibles+=1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (taille==casesDeminees){
|
// Lance la victoire si les conditions sont remplies
|
||||||
new FrameVictoire(this);
|
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
|
// Méthode pour rendre visibles les cases autour d'un 0
|
||||||
public void setEntourageVisible(Case panel){
|
public void setEntourageVisible(Case panel){
|
||||||
for(int i=0; i<this.taille;i++){
|
for(int i=0; i<this.taille;i++){
|
||||||
|
@ -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){
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,54 +1,58 @@
|
|||||||
import java.awt.event.*;
|
import java.awt.event.*;
|
||||||
import java.awt.*;
|
import java.awt.*;
|
||||||
|
|
||||||
public class ListenerCase implements MouseListener{
|
public class ListenerCase implements MouseListener {
|
||||||
private int marquage=0;
|
private int marquage = 0;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
// Méthode qui va servir à détecter le click de la souris
|
// Méthode qui va servir à détecter le click de la souris
|
||||||
public void mouseClicked(MouseEvent evenement){
|
public void mouseClicked(MouseEvent evenement) {
|
||||||
Case panel = (Case)evenement.getSource();
|
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 (panel.getFinDePartie() == false) {
|
||||||
if ((evenement.getButton() == MouseEvent.BUTTON1)&&(panel.getVisible()==false)&&(this.marquage==0)){
|
// Si le joueur clique gauche, tant que la case n'est pas marquée, elle sera
|
||||||
panel.setVisible();
|
// révélée
|
||||||
if (panel.getMine()==true){
|
if ((evenement.getButton() == MouseEvent.BUTTON1) && (panel.getVisible() == false)
|
||||||
System.out.println("Perdu!");
|
&& (this.marquage == 0)) {
|
||||||
|
panel.setVisible();
|
||||||
}
|
}
|
||||||
}
|
// Si le joueur clique droit, la case sera marquée
|
||||||
// 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
|
||||||
// Au premier click, on place une étoile pour indiquer la présence d'une mine
|
if (this.marquage == 0) {
|
||||||
// TODO: Regarder switch
|
panel.add(new Etoile(panel.getSize()), BorderLayout.CENTER);
|
||||||
if (this.marquage==0){
|
panel.setReperee(true);
|
||||||
panel.add(new Etoile(panel.getSize()), BorderLayout.CENTER);
|
this.marquage = 1;
|
||||||
panel.setReperee(true);
|
}
|
||||||
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;
|
||||||
|
}
|
||||||
|
// Au troisième click on efface tout marquage
|
||||||
|
else if (this.marquage == 2) {
|
||||||
|
panel.setReperee(false);
|
||||||
|
panel.removeAll();
|
||||||
|
this.marquage = 0;
|
||||||
|
}
|
||||||
|
// On met à jour l'affichage de la case cliquée
|
||||||
|
panel.updateUI();
|
||||||
}
|
}
|
||||||
// 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;
|
|
||||||
}
|
|
||||||
// Au troisième click on efface tout marquage
|
|
||||||
else if (this.marquage==2){
|
|
||||||
panel.setReperee(false);
|
|
||||||
panel.removeAll();
|
|
||||||
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
|
// 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) {
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
18
Sus.java
18
Sus.java
@ -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);
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user