Compare commits
No commits in common. "master" and "autre" have entirely different histories.
@ -1,5 +1,5 @@
|
||||
@JAVAC_OPT = -implicit:none -encoding UTF-8\
|
||||
-d build -classpath "build:res/mariadb-client.jar" -sourcepath src
|
||||
@JAVAC_OPT = -implicit:none \
|
||||
-d build -classpath "build" -sourcepath src
|
||||
PACKAGE = fr.iutfbleau.projetAgile
|
||||
PACKAGE_PATH = fr/iutfbleau/projetAgile
|
||||
|
||||
@ -24,8 +24,7 @@ Controller = build/$(PACKAGE_PATH)/Puissance4/Controller/GrilleMouseListener.cla
|
||||
build/$(PACKAGE_PATH)/Puissance4/Controller/ResetGame.class
|
||||
|
||||
#BUT PAR DEFAUT
|
||||
ArgileGames.jar : build \
|
||||
build/$(PACKAGE_PATH)/Main.class
|
||||
ArgileGames.jar : build/$(PACKAGE_PATH)/Main.class
|
||||
@echo "Creating jar..."
|
||||
@jar cfme ArgileGames.jar Manifest.txt $(PACKAGE_PATH).Main res/ -C build fr
|
||||
@echo "Finished"
|
||||
@ -52,7 +51,7 @@ build/$(PACKAGE_PATH)/Puissance4/Event/PlayerEvent.class : src/$(PACKAGE_PATH)/P
|
||||
|
||||
#------- Controleur ------
|
||||
|
||||
build/$(PACKAGE_PATH)/Menu/Controller/ObservateurAccueil.class : src/$(PACKAGE_PATH)/Menu/Controller/ObservateurAccueil.java
|
||||
build/$(PACKAGE_PATH)/Menu/Controleur/ObservateurAccueil.class : src/$(PACKAGE_PATH)/Menu/Controller/ObservateurAccueil.java
|
||||
@javac $(@JAVAC_OPT) $<
|
||||
|
||||
build/$(PACKAGE_PATH)/Puissance4/Controller/ResetGame.class : src/$(PACKAGE_PATH)/Puissance4/Controller/ResetGame.java
|
||||
@ -132,9 +131,9 @@ build/$(PACKAGE_PATH)/Menu/View/BoutonsMenu.class : src/$(PACKAGE_PATH)/Menu/Vie
|
||||
build/$(PACKAGE_PATH)/Menu/View/Menu.class : src/$(PACKAGE_PATH)/Menu/View/Menu.java \
|
||||
build/$(PACKAGE_PATH)/Menu/Controller/ObservateurMenuSouris.class \
|
||||
build/$(PACKAGE_PATH)/Menu/View/BoutonsMenu.class \
|
||||
build/$(PACKAGE_PATH)/Menu/Controleur/ObservateurAccueil.class \
|
||||
build/$(PACKAGE_PATH)/Menu/Controller/ObservateurFenetre.class \
|
||||
build/$(PACKAGE_PATH)/Menu/Controller/ObservateurAccueil.class \
|
||||
build/$(PACKAGE_PATH)/Puissance4/LancementPuissance4.class
|
||||
build/$(PACKAGE_PATH)/Puissance4/LancementPuissance4.class
|
||||
@javac $(@JAVAC_OPT) $<
|
||||
|
||||
|
||||
@ -151,18 +150,9 @@ build/$(PACKAGE_PATH)/Puissance4/LancementPuissance4.class : src/$(PACKAGE_PATH)
|
||||
build/$(PACKAGE_PATH)/Puissance4/Model/GrilleModel.class
|
||||
@javac -implicit:none -d build -classpath "build:res/mariadb-client.jar" -sourcepath src $<
|
||||
|
||||
|
||||
|
||||
build/$(PACKAGE_PATH)/Jeu.class : src/$(PACKAGE_PATH)/Jeu.java
|
||||
@javac $(@JAVAC_OPT) $<
|
||||
|
||||
|
||||
|
||||
build :
|
||||
@mkdir build
|
||||
@echo "Creating Folder"
|
||||
|
||||
|
||||
# BUT FACTICES:
|
||||
.PHONY: clear doc run
|
||||
|
||||
@ -172,7 +162,8 @@ doc :
|
||||
@echo "Finished"
|
||||
|
||||
run: ArgileGames.jar
|
||||
@java -jar ArgileGames.jar&
|
||||
@java -jar ArgileGames.jar
|
||||
|
||||
clean :
|
||||
@rm -rf build/*
|
||||
|
||||
|
@ -1,28 +1,10 @@
|
||||
package fr.iutfbleau.projetAgile;
|
||||
|
||||
import javax.swing.*;
|
||||
import javax.swing.border.EmptyBorder;
|
||||
import java.awt.Color;
|
||||
|
||||
import fr.iutfbleau.projetAgile.Menu.View.Menu;
|
||||
import fr.iutfbleau.projetAgile.Puissance4.Utils.Constants;
|
||||
|
||||
public class Main {
|
||||
public static void main(String[] args) {
|
||||
UIManager.put("Button.background", Constants.RED);
|
||||
UIManager.put("Button.foreground", Color.WHITE);
|
||||
UIManager.put("OptionPane.background", Constants.BACKGROUND_COLOR);
|
||||
UIManager.put("Panel.background", Constants.BACKGROUND_COLOR);
|
||||
UIManager.put("Panel.foreground", Color.WHITE);
|
||||
UIManager.put("Label.background", Constants.BACKGROUND_COLOR);
|
||||
UIManager.put("Label.foreground", Color.WHITE);
|
||||
UIManager.put("TextPane.foreground", Color.WHITE);
|
||||
UIManager.put("OptionPane.messageForeground", Color.WHITE);
|
||||
UIManager.put("RadioButton.background", Constants.BACKGROUND_COLOR);
|
||||
UIManager.put("RadioButton.foreground", Color.WHITE);
|
||||
UIManager.put("Button.focus", Constants.RED);
|
||||
UIManager.put("Button.border", new EmptyBorder(5,10,5,10));
|
||||
|
||||
JFrame frame = Menu.getFrame();
|
||||
JPanel menu=Menu.InitMenu();
|
||||
frame.add(menu, Menu.MENU);
|
||||
|
@ -1,26 +1,18 @@
|
||||
package fr.iutfbleau.projetAgile.Menu.Controller;
|
||||
|
||||
import java.awt.event.*;
|
||||
|
||||
import java.awt.Component;
|
||||
import javax.swing.JOptionPane;
|
||||
import fr.iutfbleau.projetAgile.Menu.View.Menu;
|
||||
|
||||
/**
|
||||
* Class de l'observateur du Bouton Acceuil des Jeux
|
||||
*/
|
||||
public class ObservateurAccueil implements ActionListener{
|
||||
|
||||
/**
|
||||
* Fonction lors du clique
|
||||
* retourne au menu après confirmation
|
||||
*/
|
||||
@Override
|
||||
private Component comp;
|
||||
public ObservateurAccueil(Component parent){
|
||||
this.comp=parent;
|
||||
}
|
||||
public void actionPerformed(ActionEvent evenement){
|
||||
//On affiche la confirmation en bloquant la fentre
|
||||
int confirmation = JOptionPane.showConfirmDialog(null, "Etes-vous sûr de vouloir retourner au menu ?", "Menu", JOptionPane.YES_NO_OPTION);
|
||||
//si c'est ok on retourne au Menu
|
||||
if(confirmation == JOptionPane.YES_OPTION){
|
||||
Menu.show(Menu.MENU);
|
||||
}
|
||||
int confirmation = JOptionPane.showConfirmDialog(this.comp, "Etes-vous sûr de vouloir retourner au menu ?", "Menu", JOptionPane.YES_NO_OPTION);
|
||||
if(confirmation == 1) return;
|
||||
Menu.show(Menu.MENU);
|
||||
}
|
||||
}
|
||||
|
@ -5,74 +5,32 @@ import javax.swing.JFrame;
|
||||
import javax.swing.JOptionPane;
|
||||
import java.awt.event.WindowEvent;
|
||||
|
||||
/**
|
||||
* Class de l'observateur de la fenetre
|
||||
* Utiliser pour avoir une fentre modal pour confirmer la fermeture
|
||||
*/
|
||||
public class ObservateurFenetre implements WindowListener{
|
||||
//il doit connaitre la fenetre pour faire une fenetre modale
|
||||
private JFrame fenetre;
|
||||
/**
|
||||
* Constructeur
|
||||
* @param fenetre0 la fentre qui va instancier la fentre modale
|
||||
*/
|
||||
public ObservateurFenetre(JFrame fenetre0){
|
||||
this.fenetre=fenetre0;
|
||||
}
|
||||
/**
|
||||
* fentre au premier plan
|
||||
* */
|
||||
@Override
|
||||
public void windowActivated(WindowEvent evenement){
|
||||
|
||||
}
|
||||
/**
|
||||
* Aprèes fermeture de la fentre
|
||||
* */
|
||||
@Override
|
||||
} // premier plan
|
||||
public void windowClosed(WindowEvent evenement){
|
||||
|
||||
}
|
||||
/**
|
||||
* Avant fermeture de la fentre
|
||||
* On affiche la fentre Modale
|
||||
*/
|
||||
@Override
|
||||
} // après fermeture
|
||||
public void windowClosing(WindowEvent evenement){
|
||||
//On demande la Confirmation avec un JOptionPane
|
||||
int confirmation = JOptionPane.showConfirmDialog(this.fenetre.getContentPane(), "Etes-vous sûr de vouloir fermer la fenetre ?", "Quitter", JOptionPane.YES_NO_OPTION);
|
||||
//Si c'est ok
|
||||
if(confirmation == JOptionPane.OK_OPTION){
|
||||
//on ferme la fentre
|
||||
this.fenetre.dispose();
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Passage en arrière plan
|
||||
*/
|
||||
@Override
|
||||
if(confirmation != JOptionPane.OK_OPTION) return;
|
||||
this.fenetre.dispose();
|
||||
} // avant fermeture
|
||||
public void windowDeactivated(WindowEvent evenement){
|
||||
|
||||
}
|
||||
/**
|
||||
* Restauration de la fentre
|
||||
*/
|
||||
@Override
|
||||
} // arrière-plan
|
||||
public void windowDeiconified(WindowEvent evenement){
|
||||
|
||||
}
|
||||
/**
|
||||
* Minimisation de la fentre
|
||||
*/
|
||||
@Override
|
||||
} // restauration
|
||||
public void windowIconified(WindowEvent evenement){
|
||||
|
||||
}
|
||||
/**
|
||||
* Après Ouverture de la fentre
|
||||
*/
|
||||
@Override
|
||||
} // minimisation
|
||||
public void windowOpened(WindowEvent evenement){
|
||||
|
||||
}
|
||||
} // après ouverture
|
||||
}
|
||||
|
@ -5,74 +5,34 @@ import java.awt.event.*;
|
||||
import fr.iutfbleau.projetAgile.Menu.View.*;
|
||||
|
||||
/**
|
||||
* Observateur des Boutons du Menu (des Jeu)
|
||||
* Observateur des Boutons du Menu
|
||||
*/
|
||||
public class ObservateurMenuSouris implements MouseListener{
|
||||
/**
|
||||
* Fonction s'effectuant au clique
|
||||
* lance le Jeu si il est Dispnnible
|
||||
* Constructeur
|
||||
*/
|
||||
@Override
|
||||
public ObservateurMenuSouris(){
|
||||
}
|
||||
public void mouseClicked(MouseEvent evenement){
|
||||
//on incrémente le nombre de clique
|
||||
Menu.addClique();
|
||||
//On récupère le Composant
|
||||
BoutonsMenu bout=(BoutonsMenu) (evenement.getComponent());
|
||||
//Si c'est le jeu PUISSANCE 4
|
||||
if(bout.getPath()==Menu.PUISSANCE_4){
|
||||
//On dis au Menu de'afficher le Jeu PUISSANCE 4
|
||||
Menu.show(Menu.PUISSANCE_4);
|
||||
return;
|
||||
}
|
||||
//Les autre jeu suiverons le même fonctionnement que PUISSANCE 4
|
||||
}
|
||||
/**
|
||||
* Fonction quand la souris etre dans la zone du JComponent
|
||||
* pour inquer au joueur le survol
|
||||
*/
|
||||
@Override
|
||||
} // un bouton cliqué
|
||||
public void mouseEntered(MouseEvent evenement){
|
||||
//On récupere le composant
|
||||
BoutonsMenu bout=(BoutonsMenu) (evenement.getComponent());
|
||||
//on lui indique le survol
|
||||
bout.setSurvol(true);
|
||||
}
|
||||
/**
|
||||
* Fonction quand la souris quite la zone du JComponent
|
||||
* pour inquer au joueur le survol
|
||||
*/
|
||||
@Override
|
||||
} // debut du survol
|
||||
public void mouseExited(MouseEvent evenement){
|
||||
//on récupère le Composant
|
||||
BoutonsMenu bout=(BoutonsMenu) (evenement.getComponent());
|
||||
//on lui inqique le survol
|
||||
bout.setSurvol(false);
|
||||
}
|
||||
|
||||
/**
|
||||
* Fonction lorsque on reste appuyer sur la Souris
|
||||
* donne l'impression de clique
|
||||
*/
|
||||
@Override
|
||||
} // fin du survol
|
||||
public void mousePressed(MouseEvent evenement){
|
||||
//On récupère le Composant
|
||||
BoutonsMenu bout=(BoutonsMenu) (evenement.getComponent());
|
||||
//Pour augmenter l'impression de clique
|
||||
//On met le survol a false
|
||||
//pour diminuer la taille du Composant
|
||||
bout.setSurvol(false);
|
||||
}
|
||||
/**
|
||||
* Fonction lorsque on relache la Souris
|
||||
* donne l'impression de clique
|
||||
* */
|
||||
@Override
|
||||
} // un bouton appuyé
|
||||
public void mouseReleased(MouseEvent evenement){
|
||||
//On récupère le Composant
|
||||
BoutonsMenu bout=(BoutonsMenu) (evenement.getComponent());
|
||||
//Pour augmenter l'impression de clique
|
||||
//On met le survol a false
|
||||
//pour diminuer la taille du Composant
|
||||
bout.setSurvol(true);
|
||||
}
|
||||
} // un bouton relâché
|
||||
}
|
||||
|
@ -1,5 +0,0 @@
|
||||
/**
|
||||
* fr.iutfbleau.projetAgile.Menu groupe toutes les classes qui controllent le menu (Listener)
|
||||
*/
|
||||
package fr.iutfbleau.projetAgile.Menu.Controller;
|
||||
//Fichier vide pour la javadoc
|
@ -53,36 +53,26 @@ public class BoutonsMenu extends JComponent{
|
||||
}
|
||||
// maintenant on dessine ce que l'on veut
|
||||
String dispo;
|
||||
//Si le jeu est disponnible
|
||||
if(this.disponibiliter==true){
|
||||
//on met la couleur et le String Correspondant
|
||||
secondPinceau.setColor(new Color(255,0,0,200));
|
||||
dispo="Disponible";
|
||||
//Autrement
|
||||
}else{
|
||||
//on met une autre couleur et le String Correspondant
|
||||
secondPinceau.setColor(new Color(100,100,100,200));
|
||||
dispo="Indisponible";
|
||||
}
|
||||
//Si le Menu est survoler:
|
||||
if(this.survol==false){
|
||||
//On draw l'image un peu plus Gros pour augmenter le resentis de survol
|
||||
secondPinceau.drawImage(this.img, 5, 5, this.getWidth()-10, this.getHeight()-10, this);
|
||||
secondPinceau.fillRoundRect(5, 5, this.getWidth()-10, this.getHeight()-10, this.getWidth()/100*9, this.getHeight()/100*29);
|
||||
//Autrement
|
||||
}else{
|
||||
//On draw l'image plus petite
|
||||
secondPinceau.drawImage(this.img, 0, 0, this.getWidth(), this.getHeight(), this);
|
||||
secondPinceau.fillRoundRect(0, 0, this.getWidth(), this.getHeight(), this.getWidth()/100*9, this.getHeight()/100*29);
|
||||
|
||||
}
|
||||
//On met du blanc pour le titre
|
||||
secondPinceau.setColor(new Color(255, 255, 255));
|
||||
//On draw le titre du jeu dans une taille assez grosse et centrer
|
||||
secondPinceau.setFont(new Font(Font.SANS_SERIF, Font.BOLD, (this.getWidth()/10)));
|
||||
FontMetrics metrics = secondPinceau.getFontMetrics(secondPinceau.getFont());
|
||||
secondPinceau.drawString(this.path.toUpperCase(), (this.getWidth()/2-metrics.stringWidth(this.path.toUpperCase())/2), (this.getHeight()-metrics.getHeight())/3+metrics.getAscent());
|
||||
//DISPO OU PAS: On l'affiche aussi
|
||||
//DISPO OU PAS
|
||||
secondPinceau.setFont(new Font(Font.SANS_SERIF, Font.BOLD, (this.getWidth()/20)));
|
||||
metrics = secondPinceau.getFontMetrics(secondPinceau.getFont());
|
||||
secondPinceau.drawString(dispo, (this.getWidth()/2-metrics.stringWidth(dispo)/2), (this.getHeight()-metrics.getHeight())/3*2+metrics.getAscent());
|
||||
|
@ -4,45 +4,30 @@ import java.awt.*;
|
||||
import javax.swing.JPanel;
|
||||
import javax.swing.JFrame;
|
||||
import javax.swing.JLabel;
|
||||
import javax.swing.JOptionPane;
|
||||
|
||||
import fr.iutfbleau.projetAgile.Jeu;
|
||||
import fr.iutfbleau.projetAgile.Menu.Controller.*;
|
||||
import fr.iutfbleau.projetAgile.Puissance4.LancementPuissance4;
|
||||
import java.awt.event.WindowListener;
|
||||
import java.util.concurrent.CancellationException;
|
||||
|
||||
/**
|
||||
* Class Abstraite mais static
|
||||
* Pouvant donc etre utiliser sans être connu
|
||||
* elle permet de créer le Menu
|
||||
*/
|
||||
public abstract class Menu{
|
||||
/* Chaque Jeu aura sa variable final static ainsi que le menu
|
||||
Ces variables sont utiliser pour changer de jeu ou retourner au menu avec la foction
|
||||
show*/
|
||||
public final static String PUISSANCE_4="puissance4";
|
||||
public final static String MENU="Menu";
|
||||
public static String PUISSANCE_4="puissance4";
|
||||
public static String MENU="Menu";
|
||||
private static JFrame frame=new JFrame("Argile");
|
||||
private static CardLayout cd=new CardLayout();
|
||||
private static String JEU="Jeu";
|
||||
private static int cliqueCount=0;
|
||||
|
||||
/**
|
||||
* methode static pour avoir le JPanel Affichant le Menu
|
||||
* @return un JPanel instancier avec les composant du menu
|
||||
*
|
||||
*/
|
||||
public static JPanel InitMenu(){
|
||||
//On initialise le JPanel
|
||||
JPanel p=new JPanel();
|
||||
p.setBackground(new Color(31,31,31));
|
||||
GridBagLayout gbl=new GridBagLayout();
|
||||
p.setLayout(gbl);
|
||||
//On utilisera un GridBagLayout pour plus de liberter dans le positionnement
|
||||
//des éléments du menu
|
||||
|
||||
GridBagConstraints gbc=new GridBagConstraints();
|
||||
//On positionne le titre
|
||||
gbc.gridx=0;
|
||||
gbc.gridy=0;
|
||||
gbc.gridwidth=3;
|
||||
@ -52,18 +37,14 @@ public abstract class Menu{
|
||||
gbc.weightx=2;
|
||||
gbc.weighty=0;
|
||||
gbc.insets=new Insets(0,10,0,10);
|
||||
//on créer le titre
|
||||
JLabel titre=new JLabel("ARGILE GAMES");
|
||||
titre.setHorizontalAlignment(JLabel.CENTER);
|
||||
titre.setForeground(new Color(255,255,255));
|
||||
titre.setBackground(new Color(55,55,55));
|
||||
titre.setFont(new Font("Serif" ,Font.BOLD, 50));
|
||||
//on set sa préferedSize car le GridBagLayout en tiendra compte
|
||||
titre.setPreferredSize(new Dimension(400,200));
|
||||
//On ajoute le titre
|
||||
p.add(titre, gbc);
|
||||
|
||||
//On créer les élément du jeu(JComponent)
|
||||
BoutonsMenu puissance_4=new BoutonsMenu(Menu.PUISSANCE_4, true);
|
||||
BoutonsMenu echecs=new BoutonsMenu("echecs", false);
|
||||
BoutonsMenu dames=new BoutonsMenu("dames", false);
|
||||
@ -76,7 +57,6 @@ public abstract class Menu{
|
||||
BoutonsMenu minecraft=new BoutonsMenu("minigolf", false);
|
||||
BoutonsMenu puzzle=new BoutonsMenu("puzzle", false);
|
||||
|
||||
//On y ajoute leurs observateurs
|
||||
ObservateurMenuSouris obser=new ObservateurMenuSouris();
|
||||
puissance_4.addMouseListener(obser);
|
||||
echecs.addMouseListener(obser);
|
||||
@ -90,8 +70,6 @@ public abstract class Menu{
|
||||
minecraft.addMouseListener(obser);
|
||||
puzzle.addMouseListener(obser);
|
||||
|
||||
|
||||
//on les ajoute au panneau en précisant leurs positions avec le GridBagConstraints
|
||||
p.add(puissance_4, Menu.GridBagConstraintsRetour(0, 1));
|
||||
p.add(echecs, Menu.GridBagConstraintsRetour(1, 1));
|
||||
p.add(dames, Menu.GridBagConstraintsRetour(2, 1));
|
||||
@ -103,15 +81,12 @@ public abstract class Menu{
|
||||
p.add(CoD, Menu.GridBagConstraintsRetour(0, 3));
|
||||
p.add(minecraft, Menu.GridBagConstraintsRetour(1, 3));
|
||||
p.add(puzzle, Menu.GridBagConstraintsRetour(2, 3));
|
||||
|
||||
//On a fini, on retourne le panneau
|
||||
return p;
|
||||
}
|
||||
|
||||
/**
|
||||
* methode priver pour calculer la positions des composants
|
||||
* comme il se répartisent en ligne et collonne les arguments devant être connu sont donc
|
||||
* la ligne et la collonne du composant
|
||||
*
|
||||
* @return le GridBagConstraints correspondants aux arguments
|
||||
* @param collonne sa place dans la collonne
|
||||
* @param ligne sa ligne
|
||||
@ -127,7 +102,6 @@ public abstract class Menu{
|
||||
gbc.weightx=1;
|
||||
gbc.weighty=1;
|
||||
Insets marge=new Insets(0,0,0,0);
|
||||
//La Marge est différente en Fonction de la position du composant
|
||||
if(collonne==0){
|
||||
marge.set(5, 50, 5, 5);
|
||||
}
|
||||
@ -155,7 +129,6 @@ public abstract class Menu{
|
||||
*
|
||||
* @param g
|
||||
* le string de la carte correspondant
|
||||
* devant être un String de la class Menu
|
||||
|
||||
*/
|
||||
public static void show(String g)
|
||||
@ -168,50 +141,32 @@ public abstract class Menu{
|
||||
if(g==Menu.PUISSANCE_4){
|
||||
try{
|
||||
jeu = new LancementPuissance4(Menu.frame);
|
||||
}catch(CancellationException e){
|
||||
}catch(Exception e){
|
||||
return;
|
||||
}
|
||||
}
|
||||
jeu.accueilButton(new ObservateurAccueil());
|
||||
jeu.accueilButton(new ObservateurAccueil(jeu.getPanel()));
|
||||
Menu.frame.add(jeu.getPanel(), Menu.JEU);
|
||||
Menu.cd.show(Menu.frame.getContentPane(), Menu.JEU);
|
||||
}
|
||||
}
|
||||
}
|
||||
/**
|
||||
* getter pouvant initialiser la JFrame si elle n'a jamais été utiliser
|
||||
*
|
||||
* getter pouvant initialiser la JFrame
|
||||
* @return
|
||||
* la fenetre
|
||||
*/
|
||||
public static JFrame getFrame(){
|
||||
//Si la JFrame n'a pas le layout désirer
|
||||
//Elle n'a donc pas été initialiser
|
||||
if(Menu.frame.getLayout()!=Menu.cd){
|
||||
//On l'initialise
|
||||
Menu.frame.setLayout(Menu.cd);
|
||||
Menu.frame.setMinimumSize(new Dimension(1280,720));
|
||||
Menu.frame.setLocation(200,200);
|
||||
}
|
||||
//Si la fenetre n'as pas de WindowListeners
|
||||
WindowListener[] wl=Menu.frame.getWindowListeners();
|
||||
if(wl.length==0){
|
||||
//On l'initalise
|
||||
Menu.frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
|
||||
Menu.frame.addWindowListener(new ObservateurFenetre(Menu.frame));
|
||||
}
|
||||
//finalement on retourne la Fenetre
|
||||
return Menu.frame;
|
||||
}
|
||||
|
||||
/**
|
||||
* Methode comptant les clique effectuer sur les Composant du menu (Jeu)
|
||||
* elle est juste un petit easterEgg affichant un bravo tout les 100 clique
|
||||
*/
|
||||
public static void addClique(){
|
||||
Menu.cliqueCount++;
|
||||
if(Menu.cliqueCount%100==0){
|
||||
JOptionPane.showMessageDialog(frame, "Bravo vous avez cliquer "+String.valueOf(Menu.cliqueCount)+" fois", "Bravo !", JOptionPane.INFORMATION_MESSAGE);
|
||||
}
|
||||
}
|
||||
}
|
@ -1,5 +0,0 @@
|
||||
/**
|
||||
* fr.iutfbleau.projetAgile.Menu groupe toutes les classes de la vue du menu
|
||||
*/
|
||||
package fr.iutfbleau.projetAgile.Menu.View;
|
||||
//Fichier vide pour la javadoc
|
@ -1,7 +1,6 @@
|
||||
package fr.iutfbleau.projetAgile.Puissance4.Controller;
|
||||
|
||||
import fr.iutfbleau.projetAgile.Puissance4.View.ColorChooserDialog;
|
||||
import fr.iutfbleau.projetAgile.Puissance4.Utils.Constants;
|
||||
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
@ -20,28 +19,16 @@ public class ColorActionListener implements ActionListener{
|
||||
}
|
||||
|
||||
/**
|
||||
* Exécuté lors de l'appuie sur le bouton confirmé. Vérifie si les entrées de l'utilisateur sont valides, puis valide son choix
|
||||
* Exécuté lors de l'appuie sur le bouton confirmé. Vérifie si les entrées de l'utilisateur sont valides, puis valide sont choix
|
||||
* @see fr.iutfbleau.projetAgile.Puissance4.View.ColorChooserDialog#isNameValid()
|
||||
* @see fr.iutfbleau.projetAgile.Puissance4.View.ColorChooserDialog#isColorValid()
|
||||
* @see fr.iutfbleau.projetAgile.Puissance4.View.ColorChooserDialog#setConfirm(boolean b)
|
||||
*/
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
if(e.getActionCommand().equals(Constants.CONFIRM)) {
|
||||
if(this.dialog.isColorValid()) {
|
||||
if(this.dialog.isNameValid()) {
|
||||
this.dialog.setConfirm(true);
|
||||
this.dialog.setVisible(false);
|
||||
}
|
||||
}
|
||||
else {
|
||||
this.dialog.repaint();
|
||||
}
|
||||
}
|
||||
else {
|
||||
this.dialog.setConfirm(false);
|
||||
if(this.dialog.isColorValid() && this.dialog.isNameValid()) {
|
||||
this.dialog.setConfirm(true);
|
||||
this.dialog.setVisible(false);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -8,35 +8,25 @@ import javax.swing.event.ChangeListener;
|
||||
import fr.iutfbleau.projetAgile.Puissance4.Utils.Constants;
|
||||
|
||||
/**
|
||||
* Listener des changements de couleurs pour chaque joueur d'un {@link fr.iutfbleau.projetAgile.Puissance4.View.ColorChooserDialog ColorChooserDialog}
|
||||
* Classe inutile, peut être remplacée par l'appuie sur le bouton confirmé (A changer Jeudi)
|
||||
*/
|
||||
public class ColorChooserListener implements ChangeListener {
|
||||
|
||||
private JComponent composant;
|
||||
private int player;
|
||||
|
||||
/**
|
||||
* Constructeur
|
||||
* @param c le composant à repaint
|
||||
* @param player le joueur dont la couleur doit être changé
|
||||
*/
|
||||
public ColorChooserListener(JComponent c, int player) {
|
||||
this.composant = c;
|
||||
this.player = player;
|
||||
}
|
||||
|
||||
/**
|
||||
* Couleur du pion du joueur change en fonction de la couleur sélectionnée
|
||||
* @param e
|
||||
* @see #ColorChooserListener(JComponent, int)
|
||||
*/
|
||||
|
||||
@Override
|
||||
public void stateChanged(ChangeEvent e) {
|
||||
if(e.getSource() instanceof ColorSelectionModel) {
|
||||
ColorSelectionModel chooser = (ColorSelectionModel) e.getSource();
|
||||
if(this.player == Constants.PLAYER_ONE)
|
||||
Constants.PLAYER_ONE_COLOR = chooser.getSelectedColor();
|
||||
else if(this.player == Constants.PLAYER_TWO)
|
||||
else if(this.player == Constants.PLAYER_THREE)
|
||||
Constants.PLAYER_TWO_COLOR = chooser.getSelectedColor();
|
||||
else
|
||||
Constants.PLAYER_THREE_COLOR = chooser.getSelectedColor();
|
||||
|
@ -24,10 +24,8 @@ public class GrilleMouseListener extends MouseInputAdapter{
|
||||
*/
|
||||
@Override
|
||||
public void mouseMoved(MouseEvent e) {
|
||||
if(Constants.DRAW_POSITION) {
|
||||
if(Constants.DRAW_POSITION)
|
||||
this.controller.hoverGrille(e.getX());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -9,24 +9,20 @@ public class ModelEventListener implements GridChangedListener {
|
||||
|
||||
/**
|
||||
* Constructeur
|
||||
* @param p le panneau du puissance 4
|
||||
* @see fr.iutfbleau.projetAgile.Puissance4.View.Puissance4Panel
|
||||
* @param p
|
||||
*/
|
||||
public ModelEventListener(Puissance4Panel p) {
|
||||
this.panel = p;
|
||||
}
|
||||
|
||||
/**
|
||||
* Modifie la vue du pion à l'emplacement modifié dans la grille
|
||||
* Ajoute un pion à l'emplacement modifié dans la grille
|
||||
*/
|
||||
@Override
|
||||
public void gridChanged(GridEvent e) {
|
||||
this.panel.addPlayerPiece(e.getColumn(), e.getRow(), e.getPlayer());
|
||||
}
|
||||
|
||||
/**
|
||||
* Modifie la vue lorsque le status de la partie change
|
||||
*/
|
||||
@Override
|
||||
public void statusChanged(StatusEvent e) {
|
||||
this.panel.changeLabel(e.getPlayerTurn());
|
||||
@ -34,11 +30,8 @@ public class ModelEventListener implements GridChangedListener {
|
||||
this.panel.setGameStatus(e.getStatus(), e.getPlayerTurn(), e.getPlayerOneScore(), e.getPlayerTwoScore(), e.getPlayerThreeScore());
|
||||
}
|
||||
|
||||
/**
|
||||
* Modifie la vue lorsque un joueur gagne (seulement si le nombre de joueur est supérieur à 2)
|
||||
*/
|
||||
@Override
|
||||
public void playerWin(PlayerEvent e){
|
||||
this.panel.playerWin(e.getJ());
|
||||
public void playerRemove(PlayerEvent e){
|
||||
this.panel.RemovePlayer(e.getJ(), e.getGrille());
|
||||
}
|
||||
}
|
||||
|
@ -43,18 +43,11 @@ public class Puissance4Controller {
|
||||
* @see fr.iutfbleau.projetAgile.Puissance4.Controller.Puissance4Controller#changeName(String, String)
|
||||
*/
|
||||
public void initPanel() {
|
||||
if(this.modele.getPlayerThreeName()!=null){
|
||||
//Cas ou il y a trois joeur ou initialise le jeu en lui précisant bien le titre
|
||||
this.panel.init("PUISSANCE 3");
|
||||
}else{
|
||||
this.panel.init("PUISSANCE 4");
|
||||
}
|
||||
this.panel.init();
|
||||
this.panel.setPlayerNumber(this.modele.getPlayerNumber());
|
||||
this.panel.changeHoverColor(this.modele.getPlayerTurn());
|
||||
this.panel.changeLabel(this.modele.getPlayerTurn());
|
||||
if(this.modele.getPlayerNumber() == 2)
|
||||
this.panel.changeScore(this.modele.getPlayerOneScore(), this.modele.getPlayerTwoScore());
|
||||
else
|
||||
this.panel.changeScore(this.modele.getPlayerOneScore(), this.modele.getPlayerTwoScore(), this.modele.getPlayerThreeScore());
|
||||
this.panel.changeScore(this.modele.getPlayerOneScore(), this.modele.getPlayerTwoScore(), this.modele.getPlayerThreeScore());
|
||||
}
|
||||
|
||||
/**
|
||||
@ -72,7 +65,6 @@ public class Puissance4Controller {
|
||||
this.modele.reset();
|
||||
this.panel.changeHoverColor(this.modele.getPlayerTurn());
|
||||
this.panel.changeLabel(this.modele.getPlayerTurn());
|
||||
this.panel.resetTitle();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -81,7 +73,7 @@ public class Puissance4Controller {
|
||||
* @see fr.iutfbleau.projetAgile.Puissance4.Model.GrilleModel#verifyColumn(int)
|
||||
*/
|
||||
public void verifyColumn(int x) {
|
||||
if(this.modele.getGameStatus() == GameStatus.PLAYING) {
|
||||
if(this.modele.getGameStatus() == GameStatus.PLAYING || this.modele.getGameStatus() == GameStatus.FIRST) {
|
||||
int column = (x * this.modele.getColumn() / grille.getWidth());
|
||||
this.modele.verifyColumn(column);
|
||||
}
|
||||
@ -93,7 +85,7 @@ public class Puissance4Controller {
|
||||
* Si x est égal à -1 efface le survol
|
||||
*/
|
||||
public void hoverGrille(int x) {
|
||||
if(this.modele.getGameStatus() == GameStatus.PLAYING) {
|
||||
if(this.modele.getGameStatus() == GameStatus.PLAYING || this.modele.getGameStatus() == GameStatus.FIRST) {
|
||||
if(x == -1) {
|
||||
this.grille.hover(-1); //Clean
|
||||
return;
|
||||
@ -136,7 +128,6 @@ public class Puissance4Controller {
|
||||
* Change le nom des joueurs dans le modèle et la vue
|
||||
* @param J1 le nom du joueur 1
|
||||
* @param J2 le nom du joueur 2
|
||||
* @param J3 le nom du joueur 3
|
||||
*/
|
||||
public void changeName(String J1, String J2, String J3) {
|
||||
this.modele.setPlayerOneName(J1);
|
||||
|
@ -9,21 +9,10 @@ public class ResetGame implements ActionListener {
|
||||
*/
|
||||
private Puissance4Controller controller;
|
||||
|
||||
|
||||
/**
|
||||
* Création du listener du bouton reset
|
||||
* @param p
|
||||
*/
|
||||
public ResetGame(Puissance4Controller p){
|
||||
this.controller = p;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Appelle la fonction ResetGame
|
||||
* @param e
|
||||
* @see #ResetGame(Puissance4Controller)
|
||||
*/
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
this.controller.reset();
|
||||
|
@ -1,5 +0,0 @@
|
||||
/**
|
||||
* fr.iutfbleau.projetAgile.Puissance4.Controller groupe toutes les classes qui controllent les évènements (Listeners) du Puissance 4
|
||||
*/
|
||||
package fr.iutfbleau.projetAgile.Puissance4.Controller;
|
||||
//Fichier vide pour la javadoc
|
@ -55,7 +55,6 @@ public abstract class AbstractGridInitiater {
|
||||
* @param playerTurn Le tour du joueur
|
||||
* @param playerOneScore Le score du joueur 1
|
||||
* @param playerTwoScore Le score du joueur 2
|
||||
* @param playerThreeScore Le score du joueur 3
|
||||
*/
|
||||
protected void fireStatusChanged(GameStatus status, int playerTurn, int playerOneScore, int playerTwoScore, int playerThreeScore) {
|
||||
StatusEvent event = null;
|
||||
@ -66,16 +65,13 @@ public abstract class AbstractGridInitiater {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Notifie tous les listeners lorsqu'un joueur gagne (supérieur à 2 joueurs)
|
||||
* @param playerRemove le joueur qui a gagné
|
||||
*/
|
||||
protected void firePlayerWin(int playerRemove){
|
||||
protected void firePlayerChanged(int playerRemove, int[][] grille){
|
||||
PlayerEvent event=null;
|
||||
for(GridChangedListener listener : getGridListeners()) {
|
||||
if(event == null)
|
||||
event= new PlayerEvent(playerRemove);
|
||||
listener.playerWin(event);
|
||||
event= new PlayerEvent(playerRemove, grille);
|
||||
listener.playerRemove(event);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -19,9 +19,9 @@ public interface GridChangedListener extends EventListener{
|
||||
void statusChanged(StatusEvent e);
|
||||
|
||||
/**
|
||||
* Méthode invoqué lorsqu'un joueur gagne
|
||||
* Méthode invoqué lors de la suppréssion d'un joueur
|
||||
* @param e evenement du joueur a supprimé
|
||||
*/
|
||||
void playerWin(PlayerEvent e);
|
||||
void playerRemove(PlayerEvent e);
|
||||
|
||||
}
|
||||
|
@ -5,22 +5,17 @@ package fr.iutfbleau.projetAgile.Puissance4.Event;
|
||||
*/
|
||||
public class PlayerEvent {
|
||||
private int J;
|
||||
private int[][] grille;
|
||||
|
||||
|
||||
/**
|
||||
* Créer un évènement
|
||||
* @param j0
|
||||
*/
|
||||
public PlayerEvent(int j0){
|
||||
public PlayerEvent(int j0, int[][] grille0){
|
||||
this.J=j0;
|
||||
this.grille=grille0;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Retourne le joueur
|
||||
* @return le joueur
|
||||
*/
|
||||
public int getJ() {
|
||||
return J;
|
||||
}
|
||||
|
||||
public int[][] getGrille() {
|
||||
return grille;
|
||||
}
|
||||
}
|
||||
|
@ -1,5 +0,0 @@
|
||||
/**
|
||||
* fr.iutfbleau.projetAgile.Puissance4.Event groupe toutes les classes représentant un évènement personnalisé du Puissance 4
|
||||
*/
|
||||
package fr.iutfbleau.projetAgile.Puissance4.Event;
|
||||
//Fichier vide pour la javadoc
|
@ -5,11 +5,10 @@ import fr.iutfbleau.projetAgile.Puissance4.Controller.Puissance4Controller;
|
||||
import fr.iutfbleau.projetAgile.Puissance4.View.Grille;
|
||||
import fr.iutfbleau.projetAgile.Puissance4.View.ColorChooserDialog;
|
||||
import fr.iutfbleau.projetAgile.Puissance4.Model.GrilleModel;
|
||||
import fr.iutfbleau.projetAgile.Puissance4.Utils.Constants;
|
||||
|
||||
import java.awt.event.ActionListener;
|
||||
import java.sql.Connection;
|
||||
import java.sql.DriverManager;
|
||||
import org.mariadb.jdbc.*;
|
||||
import java.sql.Statement;
|
||||
import java.util.concurrent.CancellationException;
|
||||
|
||||
@ -31,7 +30,6 @@ public class LancementPuissance4 implements Jeu{
|
||||
* @throws CancellationException Renvoie une exception si les utilisateurs annule le lancement de la partie
|
||||
*/
|
||||
public LancementPuissance4(JFrame fenetre) throws CancellationException{
|
||||
|
||||
String J1 = null;
|
||||
String J2 = null;
|
||||
String J3 = null;
|
||||
@ -41,11 +39,10 @@ public class LancementPuissance4 implements Jeu{
|
||||
ButtonGroup buttons = new ButtonGroup();
|
||||
buttons.add(twoPlayer);
|
||||
buttons.add(threePlayer);
|
||||
buttons.setSelected(twoPlayer.getModel(), true);
|
||||
Object[] message = {
|
||||
"Combien de joueurs ?", twoPlayer, threePlayer
|
||||
};
|
||||
int choix = JOptionPane.showConfirmDialog(fenetre, message, "Entrez le nombre de joueurs", JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE);
|
||||
int choix = JOptionPane.showConfirmDialog(fenetre, message, "Entrez le nombre de joueur", JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE);
|
||||
if(choix != JOptionPane.OK_OPTION) {
|
||||
throw new CancellationException("User cancelled");
|
||||
}
|
||||
@ -55,7 +52,6 @@ public class LancementPuissance4 implements Jeu{
|
||||
else
|
||||
playerNumber = 3;
|
||||
|
||||
Constants.resetColor();
|
||||
ColorChooserDialog chooser = new ColorChooserDialog(fenetre, true, playerNumber);
|
||||
if (chooser.getChoice()) {
|
||||
J1 = chooser.getPlayerOneName();
|
||||
@ -95,11 +91,7 @@ public class LancementPuissance4 implements Jeu{
|
||||
return this.P4.getPanel();
|
||||
}
|
||||
|
||||
/**
|
||||
* Met à joueur le nombre de joueur choisi dans la base de données
|
||||
* @param playerNumber le nombre de joueur choisi
|
||||
*/
|
||||
private void sendToDatabase(int playerNumber) {
|
||||
public void sendToDatabase(int playerNumber) {
|
||||
try {
|
||||
|
||||
Class.forName("org.mariadb.jdbc.Driver"); //Verification du pilote
|
||||
|
@ -21,12 +21,10 @@ public class GrilleModel extends AbstractGridInitiater{
|
||||
private int playerOneScore;
|
||||
private int playerTwoScore;
|
||||
private int playerThreeScore;
|
||||
private LinkedList<Integer> playersList;
|
||||
private LinkedList<Integer> tour;
|
||||
private int playerNumber;
|
||||
|
||||
/**
|
||||
* Crée le modèle et l'initialise avec des cases vides
|
||||
* @param playerNumber le nombre de joueurs
|
||||
*/
|
||||
public GrilleModel(int playerNumber) {
|
||||
super();
|
||||
@ -35,11 +33,34 @@ public class GrilleModel extends AbstractGridInitiater{
|
||||
this.grille = new int[this.column][this.row];
|
||||
this.playerOneScore = 0;
|
||||
this.playerTwoScore = 0;
|
||||
this.playerThreeScore = -1;
|
||||
this.playersList = new LinkedList<Integer>();
|
||||
this.resetList();
|
||||
if(playerNumber == 3){
|
||||
this.playerThreeScore = 0;
|
||||
this.playerThreeScore = 0;
|
||||
this.tour = new LinkedList<Integer>();
|
||||
this.tour.add(Constants.PLAYER_ONE);
|
||||
this.tour.add(Constants.PLAYER_TWO);
|
||||
if(playerNumber==3){
|
||||
this.tour.add(Constants.PLAYER_THREE);
|
||||
}
|
||||
this.playerNumber=playerNumber;
|
||||
this.reset();
|
||||
}
|
||||
|
||||
/**
|
||||
* Crée le modèle et l'initialise avec des les cases du tableau donné en arguments
|
||||
*/
|
||||
public GrilleModel(int[][] tab, int playerNumber) {
|
||||
//Faire un test pour le nombre de colonnes/lignes
|
||||
super();
|
||||
this.column = Constants.COLUMN_COUNT;
|
||||
this.row = Constants.ROW_COUNT;
|
||||
this.grille = tab;
|
||||
this.playerOneScore = 0;
|
||||
this.playerTwoScore = 0;
|
||||
this.playerThreeScore = 0;
|
||||
this.tour=new LinkedList<Integer>();
|
||||
this.tour.add(Constants.PLAYER_ONE);
|
||||
this.tour.add(Constants.PLAYER_TWO);
|
||||
if(playerNumber==3){
|
||||
this.tour.add(Constants.PLAYER_THREE);
|
||||
}
|
||||
this.playerNumber=playerNumber;
|
||||
this.reset();
|
||||
@ -54,29 +75,17 @@ public class GrilleModel extends AbstractGridInitiater{
|
||||
this.grille[i][j] = Constants.EMPTY_PLAYER;
|
||||
}
|
||||
}
|
||||
this.resetList();
|
||||
this.tour.clear();
|
||||
this.tour.add(Constants.PLAYER_ONE);
|
||||
this.tour.add(Constants.PLAYER_TWO);
|
||||
if(this.playerNumber==3){
|
||||
this.tour.add(Constants.PLAYER_THREE);
|
||||
}
|
||||
this.switchPlayer();
|
||||
this.piecePlayed = 0;
|
||||
this.setPartyStatus(GameStatus.PLAYING);
|
||||
}
|
||||
|
||||
/**
|
||||
* Remet la liste des joueurs dans l'ordre d'origine
|
||||
*/
|
||||
private void resetList() {
|
||||
this.playersList.clear();
|
||||
this.playersList.add(Constants.PLAYER_ONE);
|
||||
this.playersList.add(Constants.PLAYER_TWO);
|
||||
if(this.playerNumber==3){
|
||||
this.playersList.add(Constants.PLAYER_THREE);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Ajoute un pion dans la grille
|
||||
* @param column colonne de la grille
|
||||
* @param row ligne de la grille
|
||||
*/
|
||||
private void addPiece(int column, int row) {
|
||||
grille[column][row] = this.playerTurn;
|
||||
fireGridChanged(column, row, this.playerTurn);
|
||||
@ -84,22 +93,16 @@ public class GrilleModel extends AbstractGridInitiater{
|
||||
}
|
||||
|
||||
/**
|
||||
* Ajoute un pion dans une colonne si elle n'est pas complète, met à jour le status de la partie et change le playersList du joueur si nécessaire
|
||||
* Ajoute un pion dans une colonne si elle n'est pas complète, met à jour le status de la partie et change le tour du joueur si nécessaire
|
||||
* @param column La colonne dans laquelle ajouter le pion
|
||||
*/
|
||||
public void verifyColumn(int column) {
|
||||
for (int row = this.row - 1; row >= 0; row--) {
|
||||
if (grille[column][row] == Constants.EMPTY_PLAYER) {
|
||||
this.addPiece(column, row);
|
||||
if(this.verifyWin(column, row, this.playerTurn)){
|
||||
if(this.playersList.size() > 2){
|
||||
this.removePlayer();
|
||||
} else{
|
||||
this.setPartyStatus(GameStatus.WIN);
|
||||
}
|
||||
return;
|
||||
if(!this.verifyWin(column, row)){
|
||||
this.switchPlayer();
|
||||
}
|
||||
this.switchPlayer();
|
||||
this.verifyDraw();
|
||||
return;
|
||||
}
|
||||
@ -107,62 +110,22 @@ public class GrilleModel extends AbstractGridInitiater{
|
||||
}
|
||||
|
||||
/**
|
||||
* Supprime de la liste le joueur qui vient de gagner
|
||||
*/
|
||||
private void removePlayer(){
|
||||
this.increaseScore();
|
||||
this.removePlayerPion();
|
||||
this.firePlayerWin(this.playerTurn);
|
||||
this.playersList.pollLast();
|
||||
this.switchPlayer();
|
||||
this.verifyNewWin();
|
||||
}
|
||||
|
||||
/**
|
||||
* Vérifie si tous les joueurs ont gagnés lors du passage de 3 à 2 joueurs
|
||||
*/
|
||||
private void verifyNewWin() {
|
||||
boolean verifyFirstWin = this.verifyWinAll(this.playerTurn);
|
||||
this.switchPlayer();
|
||||
boolean verifySecondWin = this.verifyWinAll(this.playerTurn);
|
||||
if(verifyFirstWin && verifySecondWin) {
|
||||
this.setPartyStatus(GameStatus.DRAW);
|
||||
}
|
||||
else if(verifyFirstWin || verifySecondWin) {
|
||||
if(verifyFirstWin)
|
||||
switchPlayer();
|
||||
this.setPartyStatus(GameStatus.WIN);
|
||||
}
|
||||
switchPlayer();
|
||||
}
|
||||
|
||||
/**
|
||||
* Vérifie la grille en fonction de la couleur du pion
|
||||
* @param playerColor joueur associé à une couleur
|
||||
*/
|
||||
public boolean verifyWinAll(int playerColor) {
|
||||
for(int y = 0; y < this.column; y++) {
|
||||
for(int x = this.row - 1; x >= 0; x--) {
|
||||
if(this.grille[y][x] == playerColor)
|
||||
if(verifyWin(y, x, playerColor))
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Vérifie si le jeton qui vient d'être joué termine la partie
|
||||
* @param column La colonne du pion qui vient d'être joué
|
||||
* @param row La ligne du pion qui vient d'être joué
|
||||
* @return retourne true si le jeu est fini
|
||||
* @return Retourne true si le jeu est fini
|
||||
*/
|
||||
private boolean verifyWin(int column, int row, int playerColor) {
|
||||
private boolean verifyWin(int column, int row) {
|
||||
int playerColor = this.playerTurn;
|
||||
int diagonalColumn = column;
|
||||
int diagonalRow = row;
|
||||
//Vérification horizontal et vertical
|
||||
if(verifyAlignedPiece(column, 0, 0, 1, playerColor) || verifyAlignedPiece(0, row, 1, 0, playerColor)) {
|
||||
|
||||
if(this.tour.size()==3){
|
||||
this.Player3();
|
||||
}else{
|
||||
this.setPartyStatus(GameStatus.WIN);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -172,7 +135,11 @@ public class GrilleModel extends AbstractGridInitiater{
|
||||
}
|
||||
//Vérification diagonale haut à gauche -> bas à droite
|
||||
if(verifyAlignedPiece(diagonalColumn, diagonalRow, 1, 1, playerColor)) {
|
||||
|
||||
if(this.tour.size()==3){
|
||||
this.Player3();
|
||||
}else{
|
||||
this.setPartyStatus(GameStatus.WIN);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -185,27 +152,52 @@ public class GrilleModel extends AbstractGridInitiater{
|
||||
|
||||
//Vérification diagonale haut à droite -> bas à gauche
|
||||
if(verifyAlignedPiece(diagonalColumn, diagonalRow, -1, 1, playerColor)) {
|
||||
|
||||
if(this.tour.size()==3){
|
||||
this.Player3();
|
||||
}else{
|
||||
this.setPartyStatus(GameStatus.WIN);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private void Player3(){
|
||||
switch(this.playerTurn){
|
||||
case Constants.PLAYER_ONE:
|
||||
this.playerOneScore++;
|
||||
break;
|
||||
|
||||
case Constants.PLAYER_TWO:
|
||||
this.playerTwoScore++;
|
||||
break;
|
||||
|
||||
case Constants.PLAYER_THREE:
|
||||
this.playerThreeScore++;
|
||||
break;
|
||||
}
|
||||
this.fireStatusChanged(GameStatus.FIRST, playerTurn, playerOneScore, playerTwoScore, playerThreeScore);
|
||||
this.removePlayerPion();
|
||||
this.firePlayerChanged(this.playerTurn, this.grille);
|
||||
this.tour.pollLast();
|
||||
this.switchPlayer();
|
||||
}
|
||||
|
||||
/**
|
||||
* renvoie true si 4 jetons de la même couleur ou plus sont alignés
|
||||
* Retourne true si 4 jetons de la même couleur ou plus sont alignés
|
||||
* @param numColumn La colonne où commencer
|
||||
* @param numRow La ligne où commencer
|
||||
* @param columnOffset l'offset de déplacement vertical
|
||||
* @param rowOffset l'offset de déplacement horizontal
|
||||
* @param playerColor La couleur du joueur (entier)
|
||||
* @return renvoie true si 4 jetons ou plus sont alignés
|
||||
* @return Retourne true si 4 jetons ou plus sont alignés
|
||||
*/
|
||||
private boolean verifyAlignedPiece(int numColumn, int numRow, int columnOffset, int rowOffset, int playerColor) {
|
||||
int couleur = playerColor;
|
||||
int max = 0;
|
||||
int compteur = 0;
|
||||
if(this.playersList.size() == 2)
|
||||
|
||||
if(this.tour.size() == 2)
|
||||
max = Constants.ALIGNED_NUMBER_TWO;
|
||||
else
|
||||
max = Constants.ALIGNED_NUMBER_THREE;
|
||||
@ -223,23 +215,20 @@ public class GrilleModel extends AbstractGridInitiater{
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Vérifie s'il y a une égalité
|
||||
*/
|
||||
private void verifyDraw() {
|
||||
if(this.piecePlayed >= this.column * this.row)
|
||||
this.setPartyStatus(GameStatus.DRAW);
|
||||
}
|
||||
|
||||
/**
|
||||
* Change le playersList du joueur et notifie tous les listeners
|
||||
* Change le tour du joueur et notifie tous les listeners
|
||||
*/
|
||||
public void switchPlayer() {
|
||||
this.playerTurn=(int)this.playersList.remove();
|
||||
this.playersList.add((Integer)this.playerTurn);
|
||||
this.playerTurn=(int)this.tour.pollFirst();
|
||||
this.tour.add((Integer)this.playerTurn);
|
||||
|
||||
fireStatusChanged(this.gameStatus, this.playerTurn, this.playerOneScore, this.playerTwoScore, this.playerThreeScore);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Change le status de la partie et notifie tous les listeners
|
||||
* @param gameStatus le status de la partie
|
||||
@ -247,21 +236,15 @@ public class GrilleModel extends AbstractGridInitiater{
|
||||
public void setPartyStatus(GameStatus gameStatus) {
|
||||
this.gameStatus = gameStatus;
|
||||
if(gameStatus == GameStatus.WIN) {
|
||||
this.increaseScore();
|
||||
}
|
||||
fireStatusChanged(this.gameStatus, this.playerTurn, this.playerOneScore, this.playerTwoScore, this.playerThreeScore);
|
||||
}
|
||||
|
||||
/**
|
||||
* Augmente le score du joueur victorieux
|
||||
*/
|
||||
private void increaseScore() {
|
||||
if(this.playerTurn == Constants.PLAYER_ONE)
|
||||
if(this.playerTurn == Constants.PLAYER_ONE)
|
||||
playerOneScore++;
|
||||
else if(this.playerTurn == Constants.PLAYER_TWO)
|
||||
playerTwoScore++;
|
||||
else
|
||||
playerThreeScore++;
|
||||
else if(this.playerTurn == Constants.PLAYER_TWO)
|
||||
playerTwoScore++;
|
||||
else
|
||||
playerThreeScore++;
|
||||
}
|
||||
|
||||
fireStatusChanged(this.gameStatus, this.playerTurn, this.playerOneScore, this.playerTwoScore, this.playerThreeScore);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -270,42 +253,34 @@ public class GrilleModel extends AbstractGridInitiater{
|
||||
private void removePlayerPion(){
|
||||
for(int i=0; i<this.grille.length; i++){
|
||||
for(int t=0; t<this.grille[i].length; t++){
|
||||
if(this.grille[i][t] == this.playerTurn){
|
||||
this.dropColumn(i, t);
|
||||
if(this.grille[i][t] == this.playerTurn ){
|
||||
this.dropColumn(this.grille[i], t);
|
||||
this.piecePlayed--;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Fait tomber les pions de la colonne à partir de la ligne sélectionnée
|
||||
* @param col colonne de la grille
|
||||
* @param ligne ligne de la grille
|
||||
*/
|
||||
private void dropColumn(int col, int ligne){
|
||||
private void dropColumn(int[] col, int ligne){
|
||||
for(int i=ligne; i>=0; i--){
|
||||
if(i>0){
|
||||
this.grille[col][i]=this.grille[col][i-1];
|
||||
col[i]=col[i-1];
|
||||
}else{
|
||||
this.grille[col][0]=Constants.EMPTY_PLAYER;
|
||||
col[0]=Constants.EMPTY_PLAYER;
|
||||
}
|
||||
this.fireGridChanged(col, i, this.grille[col][i]);
|
||||
}
|
||||
}
|
||||
|
||||
// ----------------------- Getter et Setter --------------------------
|
||||
|
||||
/**
|
||||
* renvoie le playersList du joueur
|
||||
* @return Le playersList du joueur
|
||||
* Retourne le tour du joueur
|
||||
* @return Le tour du joueur
|
||||
*/
|
||||
public int getPlayerTurn() {
|
||||
return this.playerTurn;
|
||||
}
|
||||
|
||||
/**
|
||||
* renvoie le tableau d'entier qui représente l'état de la grille
|
||||
* Retourne le tableau d'entier qui représente l'état de la grille
|
||||
* @return Le tableau d'entier
|
||||
*/
|
||||
public int[][] getTab() {
|
||||
@ -313,7 +288,7 @@ public class GrilleModel extends AbstractGridInitiater{
|
||||
}
|
||||
|
||||
/**
|
||||
* renvoie le nombre de colonne de la grille
|
||||
* Retourne le nombre de colonne de la grille
|
||||
* @return Le nombre de colonne
|
||||
*/
|
||||
public int getColumn() {
|
||||
@ -321,7 +296,7 @@ public class GrilleModel extends AbstractGridInitiater{
|
||||
}
|
||||
|
||||
/**
|
||||
* renvoie le nombre de ligne de la grille
|
||||
* Retourne le nombre de ligne de la grille
|
||||
* @return Le nombre de ligne
|
||||
*/
|
||||
public int getRow() {
|
||||
@ -329,7 +304,7 @@ public class GrilleModel extends AbstractGridInitiater{
|
||||
}
|
||||
|
||||
/**
|
||||
* renvoie le nom du joueur 1
|
||||
* Retourne le nom du joueur 1
|
||||
* @return Un string du nom du joueur 1
|
||||
*/
|
||||
public String getPlayerOneName() {
|
||||
@ -337,7 +312,7 @@ public class GrilleModel extends AbstractGridInitiater{
|
||||
}
|
||||
|
||||
/**
|
||||
* renvoie le nom du joueur 2
|
||||
* Retourne le nom du joueur 2
|
||||
* @return Un string du nom du joueur 2
|
||||
*/
|
||||
public String getPlayerTwoName() {
|
||||
@ -345,7 +320,7 @@ public class GrilleModel extends AbstractGridInitiater{
|
||||
}
|
||||
|
||||
/**
|
||||
* renvoie le nom du joueur 3
|
||||
* Retourne le nom du joueur 3
|
||||
* @return Un string du nom du joueur 2
|
||||
*/
|
||||
public String getPlayerThreeName() {
|
||||
@ -354,7 +329,7 @@ public class GrilleModel extends AbstractGridInitiater{
|
||||
|
||||
|
||||
/**
|
||||
* renvoie le score du joueur 1
|
||||
* Retourne le score du joueur 1
|
||||
* @return Le score du joueur 1
|
||||
*/
|
||||
public int getPlayerOneScore() {
|
||||
@ -362,7 +337,7 @@ public class GrilleModel extends AbstractGridInitiater{
|
||||
}
|
||||
|
||||
/**
|
||||
* renvoie le score du joueur 2
|
||||
* Retourne le score du joueur 2
|
||||
* @return Le score du joueur 2
|
||||
*/
|
||||
public int getPlayerTwoScore() {
|
||||
@ -370,7 +345,7 @@ public class GrilleModel extends AbstractGridInitiater{
|
||||
}
|
||||
|
||||
/**
|
||||
* renvoie le score du joueur 3
|
||||
* Retourne le score du joueur 3
|
||||
* @return Le score du joueur 3
|
||||
*/
|
||||
public int getPlayerThreeScore() {
|
||||
@ -378,7 +353,7 @@ public class GrilleModel extends AbstractGridInitiater{
|
||||
}
|
||||
|
||||
/**
|
||||
* renvoie le {@link fr.iutfbleau.projetAgile.Puissance4.Utils.GameStatus status} de la partie
|
||||
* Retourne le {@link fr.iutfbleau.projetAgile.Puissance4.Utils.GameStatus status} de la partie
|
||||
* @return Le status de la partie
|
||||
*/
|
||||
public GameStatus getGameStatus() {
|
||||
@ -386,7 +361,7 @@ public class GrilleModel extends AbstractGridInitiater{
|
||||
}
|
||||
|
||||
public int getPlayerNumber() {
|
||||
return this.playersList.size();
|
||||
return this.tour.size();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1,5 +0,0 @@
|
||||
/**
|
||||
* fr.iutfbleau.projetAgile.Puissance4.Model groupe toutes les classes du modèle du Puissance 4
|
||||
*/
|
||||
package fr.iutfbleau.projetAgile.Puissance4.Model;
|
||||
//Fichier vide pour la javadoc
|
@ -9,15 +9,15 @@ public class Constants {
|
||||
/**
|
||||
* La couleur du joueur 1
|
||||
*/
|
||||
public static Color PLAYER_ONE_COLOR;
|
||||
public static Color PLAYER_ONE_COLOR = new Color(252,21,21);
|
||||
/**
|
||||
* La couleur du joueur 2
|
||||
*/
|
||||
public static Color PLAYER_TWO_COLOR;
|
||||
public static Color PLAYER_TWO_COLOR = new Color(241,205,15);
|
||||
/**
|
||||
* La couleur du joueur 3
|
||||
*/
|
||||
public static Color PLAYER_THREE_COLOR;
|
||||
public static Color PLAYER_THREE_COLOR = new Color(15,20,241);
|
||||
/**
|
||||
* La couleur d'un pion "vide"
|
||||
*/
|
||||
@ -26,11 +26,6 @@ public class Constants {
|
||||
* La couleur de fond du panneau
|
||||
*/
|
||||
public final static Color BACKGROUND_COLOR = new Color(31,31,31);
|
||||
/**
|
||||
* La couleur des boutons
|
||||
*/
|
||||
public final static Color RED = new Color(255,64,64);
|
||||
|
||||
/**
|
||||
* L'entier qui représente un pion "vide"
|
||||
*/
|
||||
@ -50,7 +45,7 @@ public class Constants {
|
||||
/**
|
||||
* Le survol du pion est activé ?
|
||||
*/
|
||||
public static boolean DRAW_POSITION = true;
|
||||
public static final boolean DRAW_POSITION = true;
|
||||
/**
|
||||
* La marge d'un pion
|
||||
*/
|
||||
@ -72,22 +67,13 @@ public class Constants {
|
||||
*/
|
||||
public final static int ALIGNED_NUMBER_THREE = 3;
|
||||
|
||||
public final static String CONFIRM = "Confirmation";
|
||||
|
||||
public final static String DENY = "Annulation";
|
||||
|
||||
|
||||
|
||||
private Constants() {
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Remet les couleurs des pions des joueurs par défaut
|
||||
*/
|
||||
public static void resetColor() {
|
||||
Constants.PLAYER_ONE_COLOR = new Color(252,21,21);
|
||||
Constants.PLAYER_TWO_COLOR = new Color(241,205,15);
|
||||
Constants.PLAYER_THREE_COLOR = new Color(15,20,241);
|
||||
}
|
||||
}
|
||||
|
@ -4,6 +4,7 @@ package fr.iutfbleau.projetAgile.Puissance4.Utils;
|
||||
* Enumeration du status d'une partie (En cours, gagné, égalité)
|
||||
*/
|
||||
public enum GameStatus {
|
||||
FIRST,
|
||||
/**
|
||||
* Status d'une partie en cours
|
||||
*/
|
||||
|
@ -1,5 +0,0 @@
|
||||
/**
|
||||
* fr.iutfbleau.projetAgile.Puissance4.View groupe toutes les classes des paramètres/constantes du jeu
|
||||
*/
|
||||
package fr.iutfbleau.projetAgile.Puissance4.Utils;
|
||||
//Fichier vide pour la javadoc
|
@ -21,26 +21,23 @@ import fr.iutfbleau.projetAgile.Puissance4.Controller.ColorChooserListener;
|
||||
import fr.iutfbleau.projetAgile.Puissance4.Utils.Constants;
|
||||
|
||||
/**
|
||||
* JDialog personnalisé permettant de choisir un nom et une couleur pour le puissance 4
|
||||
* JDialog personnalisé permettant de choisir un nom et une couleur pour deux joueur
|
||||
*/
|
||||
public class ColorChooserDialog extends JDialog{
|
||||
|
||||
private JTextField field1;
|
||||
private JTextField field2;
|
||||
private JTextField field3;
|
||||
private int playerNumber;
|
||||
private boolean confirm = false;
|
||||
|
||||
/**
|
||||
* Crée une fenêtre modale avec pour nom "Choisissez vos noms et couleurs"
|
||||
* @param owner la {@code Frame} depuis laquelle la fenetre modale est affichée
|
||||
* @param owner la {@code Frame} depuis laquelle la fenetre modale est affichée
|
||||
* @param modal specifie si la fenêtre modale bloque les interactions avec les fenêtres mères
|
||||
* @param playerNumber Nombre de joueurs
|
||||
* @see javax.swing.JDialog#JDialog(Frame, boolean)
|
||||
*/
|
||||
public ColorChooserDialog(Frame owner, boolean modal, int playerNumber) {
|
||||
super(owner, "Choisissez vos noms et couleurs",modal);
|
||||
this.playerNumber = playerNumber;
|
||||
this.setLayout(new GridBagLayout());
|
||||
GridBagConstraints gbc = new GridBagConstraints();
|
||||
|
||||
@ -62,25 +59,11 @@ public class ColorChooserDialog extends JDialog{
|
||||
playerThreeChooser.removeChooserPanel(panelsP3[i]);
|
||||
}
|
||||
|
||||
JButton confirmButton = new JButton("Confirmer");
|
||||
confirmButton.setFocusPainted(false);
|
||||
confirmButton.setActionCommand(Constants.CONFIRM);
|
||||
JButton denyButton = new JButton("Annuler");
|
||||
denyButton.setFocusPainted(false);
|
||||
denyButton.setActionCommand(Constants.DENY);
|
||||
|
||||
JPanel panelButton = new JPanel();
|
||||
panelButton.setOpaque(false);
|
||||
panelButton.add(confirmButton);
|
||||
panelButton.add(denyButton);
|
||||
|
||||
JButton bouton = new JButton("Confirmer");
|
||||
Pion pionP1 = new Pion(Constants.PLAYER_ONE);
|
||||
Pion pionP2 = new Pion(Constants.PLAYER_TWO);
|
||||
Pion pionP3 = new Pion(Constants.PLAYER_THREE);
|
||||
ColorActionListener cl = new ColorActionListener(this);
|
||||
confirmButton.addActionListener(cl);
|
||||
denyButton.addActionListener(cl);
|
||||
|
||||
bouton.addActionListener(new ColorActionListener(this));
|
||||
pionP1.setPreferredSize(new Dimension(50,50));
|
||||
pionP2.setPreferredSize(new Dimension(50,50));
|
||||
pionP3.setPreferredSize(new Dimension(50,50));
|
||||
@ -104,7 +87,7 @@ public class ColorChooserDialog extends JDialog{
|
||||
|
||||
playerTwoChooser.getSelectionModel().addChangeListener(new ColorChooserListener(pionP2, Constants.PLAYER_TWO));
|
||||
|
||||
playerThreeChooser.getSelectionModel().addChangeListener(new ColorChooserListener(pionP3, Constants.PLAYER_THREE));
|
||||
playerThreeChooser.getSelectionModel().addChangeListener(new ColorChooserListener(pionP2, Constants.PLAYER_THREE));
|
||||
|
||||
|
||||
JPanel panelP1 = new JPanel(new GridBagLayout());
|
||||
@ -112,7 +95,7 @@ public class ColorChooserDialog extends JDialog{
|
||||
JPanel panelP3 = new JPanel(new GridBagLayout());
|
||||
JLabel labelP1 = new JLabel("Nom et couleur du joueur 1");
|
||||
JLabel labelP2 = new JLabel("Nom et couleur du joueur 2");
|
||||
JLabel labelP3 = new JLabel("Nom et couleur du joueur 3");
|
||||
JLabel labelP3 = new JLabel("Nom et couleur du joueur 2");
|
||||
this.field1 = new JTextField("Joueur 1");
|
||||
this.field2 = new JTextField("Joueur 2");
|
||||
this.field3 = new JTextField("Joueur 3");
|
||||
@ -189,7 +172,7 @@ public class ColorChooserDialog extends JDialog{
|
||||
gbc.weighty = 0;
|
||||
gbc.fill = GridBagConstraints.NONE;
|
||||
gbc.anchor = GridBagConstraints.EAST;
|
||||
this.add(panelButton,gbc);
|
||||
this.add(bouton,gbc);
|
||||
|
||||
this.pack();
|
||||
this.setResizable(false);
|
||||
@ -199,26 +182,15 @@ public class ColorChooserDialog extends JDialog{
|
||||
|
||||
/**
|
||||
* Vérifie si les couleurs choisies ne sont vont pas être confondues
|
||||
* @return true si les couleurs choisies ne sont pas trop similaires renvoie true, sinon false
|
||||
* @return true si les couleurs choisies ne sont pas trop similaires les unes des unes, false sinon
|
||||
* @see <a href="https://en.wikipedia.org/wiki/Color_difference">Wikipedia</a>
|
||||
*/
|
||||
public boolean isColorValid() {
|
||||
double distanceBetweenP1AndP2 = Math.sqrt(Math.pow(Constants.PLAYER_TWO_COLOR.getRed() - Constants.PLAYER_ONE_COLOR.getRed(), 2) + Math.pow(Constants.PLAYER_TWO_COLOR.getGreen() - Constants.PLAYER_ONE_COLOR.getGreen(), 2) + Math.pow(Constants.PLAYER_TWO_COLOR.getBlue() - Constants.PLAYER_ONE_COLOR.getBlue(), 2));
|
||||
double distanceBetweenP1AndP3 = Math.sqrt(Math.pow(Constants.PLAYER_TWO_COLOR.getRed() - Constants.PLAYER_THREE_COLOR.getRed(), 2) + Math.pow(Constants.PLAYER_TWO_COLOR.getGreen() - Constants.PLAYER_THREE_COLOR.getGreen(), 2) + Math.pow(Constants.PLAYER_TWO_COLOR.getBlue() - Constants.PLAYER_THREE_COLOR.getBlue(), 2));
|
||||
double distanceBetweenP2AndP3 = Math.sqrt(Math.pow(Constants.PLAYER_TWO_COLOR.getRed() - Constants.PLAYER_THREE_COLOR.getRed(), 2) + Math.pow(Constants.PLAYER_TWO_COLOR.getGreen() - Constants.PLAYER_THREE_COLOR.getGreen(), 2) + Math.pow(Constants.PLAYER_TWO_COLOR.getBlue() - Constants.PLAYER_THREE_COLOR.getBlue(), 2));
|
||||
double distanceBetweenP1AndEmpty = Math.sqrt(Math.pow(Constants.EMPTY_COLOR.getRed() - Constants.PLAYER_ONE_COLOR.getRed(), 2) + Math.pow(Constants.EMPTY_COLOR.getGreen() - Constants.PLAYER_ONE_COLOR.getGreen(), 2) + Math.pow(Constants.EMPTY_COLOR.getBlue() - Constants.PLAYER_ONE_COLOR.getBlue(), 2));
|
||||
double distanceBetweenP2AndEmpty = Math.sqrt(Math.pow(Constants.EMPTY_COLOR.getRed() - Constants.PLAYER_TWO_COLOR.getRed(), 2) + Math.pow(Constants.EMPTY_COLOR.getGreen() - Constants.PLAYER_TWO_COLOR.getGreen(), 2) + Math.pow(Constants.EMPTY_COLOR.getBlue() - Constants.PLAYER_TWO_COLOR.getBlue(), 2));
|
||||
double distanceBetweenP3AndEmpty = Math.sqrt(Math.pow(Constants.EMPTY_COLOR.getRed() - Constants.PLAYER_THREE_COLOR.getRed(), 2) + Math.pow(Constants.EMPTY_COLOR.getGreen() - Constants.PLAYER_THREE_COLOR.getGreen(), 2) + Math.pow(Constants.EMPTY_COLOR.getBlue() - Constants.PLAYER_THREE_COLOR.getBlue(), 2));
|
||||
if(distanceBetweenP1AndP2 < 150f) {
|
||||
JOptionPane.showMessageDialog(this,"Les deux couleurs sont trop proches (1,2)","Erreur ", JOptionPane.ERROR_MESSAGE);
|
||||
return false;
|
||||
}
|
||||
if(playerNumber == 3 && distanceBetweenP1AndP3 < 150f) {
|
||||
JOptionPane.showMessageDialog(this,"Les deux couleurs sont trop proches (1,3)","Erreur ", JOptionPane.ERROR_MESSAGE);
|
||||
return false;
|
||||
}
|
||||
if(playerNumber == 3 && distanceBetweenP2AndP3 < 150f) {
|
||||
JOptionPane.showMessageDialog(this,"Les deux couleurs sont trop proches (2,3)","Erreur ", JOptionPane.ERROR_MESSAGE);
|
||||
JOptionPane.showMessageDialog(this,"Les deux couleurs sont trop proches","Erreur ", JOptionPane.ERROR_MESSAGE);
|
||||
return false;
|
||||
}
|
||||
else if(distanceBetweenP1AndEmpty < 150f) {
|
||||
@ -229,10 +201,6 @@ public class ColorChooserDialog extends JDialog{
|
||||
JOptionPane.showMessageDialog(this,"La couleur du joueur 2 est trop sombre","Erreur ", JOptionPane.ERROR_MESSAGE);
|
||||
return false;
|
||||
}
|
||||
else if(playerNumber == 3 && distanceBetweenP3AndEmpty < 150f) {
|
||||
JOptionPane.showMessageDialog(this,"La couleur du joueur 3 est trop sombre","Erreur ", JOptionPane.ERROR_MESSAGE);
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -243,10 +211,8 @@ public class ColorChooserDialog extends JDialog{
|
||||
public boolean isNameValid() {
|
||||
String J1 = null;
|
||||
String J2 = null;
|
||||
String J3 = null;
|
||||
J1 = field1.getText();
|
||||
J2 = field2.getText();
|
||||
J3 = field3.getText();
|
||||
if(J1.length() > 10) {
|
||||
J1 = J1.substring(0, 9);
|
||||
this.field1.setText(J1);
|
||||
@ -254,25 +220,13 @@ public class ColorChooserDialog extends JDialog{
|
||||
if(J2.length() > 10) {
|
||||
J2 = J2.substring(0, 9);
|
||||
this.field2.setText(J2);
|
||||
}
|
||||
if(J3.length() > 10) {
|
||||
J3 = J3.substring(0, 9);
|
||||
this.field3.setText(J3);
|
||||
}
|
||||
if(J1.replaceAll("\\s", "").isEmpty() || J2.replaceAll("\\s", "").isEmpty() || J3.replaceAll("\\s", "").isEmpty()) {
|
||||
}
|
||||
if(J1.isEmpty() || J2.isEmpty()) {
|
||||
JOptionPane.showMessageDialog(this,"Un des noms est vides","Erreur ", JOptionPane.ERROR_MESSAGE);
|
||||
return false;
|
||||
}
|
||||
else if(J1.compareTo(J2) == 0) {
|
||||
JOptionPane.showMessageDialog(this,"Les deux noms sont identiques (1,2)","Erreur ", JOptionPane.ERROR_MESSAGE);
|
||||
return false;
|
||||
}
|
||||
else if(J1.compareTo(J3) == 0) {
|
||||
JOptionPane.showMessageDialog(this,"Les deux noms sont identiques (1,3)","Erreur ", JOptionPane.ERROR_MESSAGE);
|
||||
return false;
|
||||
}
|
||||
else if(J2.compareTo(J3) == 0) {
|
||||
JOptionPane.showMessageDialog(this,"Les deux noms sont identiques (2,3)","Erreur ", JOptionPane.ERROR_MESSAGE);
|
||||
JOptionPane.showMessageDialog(this,"Les deux noms sont identiques","Erreur ", JOptionPane.ERROR_MESSAGE);
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
@ -305,8 +259,7 @@ public class ColorChooserDialog extends JDialog{
|
||||
|
||||
|
||||
/**
|
||||
* Permet de confirmer le choix de l'utilisateur
|
||||
* @param b le booléen
|
||||
* Permet de confirmer la choix de l'utilisateur
|
||||
*/
|
||||
public void setConfirm(boolean b) {
|
||||
this.confirm = b;
|
||||
|
@ -79,7 +79,19 @@ public class Grille extends JPanel{
|
||||
}
|
||||
}
|
||||
this.repaint();
|
||||
}
|
||||
}
|
||||
|
||||
public void RemovePlayer(int Joueur, int[][] j){
|
||||
for (int x = 0; x < this.column; x++) {
|
||||
for (int y = 0; y < this.row; y++) {
|
||||
this.grille[x][y].setPlayer(j[x][y]);
|
||||
this.grille[x][y].setHover(false);
|
||||
}
|
||||
}
|
||||
this.repaint();
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Change la couleur de survol des pions selon le tour du joueur
|
||||
@ -138,4 +150,7 @@ public class Grille extends JPanel{
|
||||
}
|
||||
}
|
||||
|
||||
public void removePlayerPion(int Joueur){
|
||||
|
||||
}
|
||||
}
|
@ -76,9 +76,6 @@ public class Pion extends JComponent{
|
||||
Pion.HIGHLIGHT_COLOR = c;
|
||||
}
|
||||
|
||||
/**
|
||||
* Paint le pion
|
||||
*/
|
||||
@Override
|
||||
protected void paintComponent(Graphics g) {
|
||||
Graphics2D g2 = (Graphics2D) g.create();
|
||||
|
@ -21,8 +21,7 @@ public class Puissance4Panel extends JPanel{
|
||||
private String playerOneName;
|
||||
private String playerTwoName;
|
||||
private String playerThreeName;
|
||||
private JLabel titre;
|
||||
private String title;
|
||||
private int playerNumber;
|
||||
|
||||
/**
|
||||
* Crée un panneau avec la grille
|
||||
@ -40,10 +39,8 @@ public class Puissance4Panel extends JPanel{
|
||||
/**
|
||||
* Ajoute tous les composants autres que la grille au panneau (Bouton recommencer, accueil, le nom du joueur qui joue, le score)
|
||||
* Il faut appeler cette fonction après avoir initialisé les différents variables du jeu (noms des joueurs)
|
||||
* @param title Nom du JLabel
|
||||
*/
|
||||
public void init(String title) {
|
||||
this.title = title;
|
||||
public void init() {
|
||||
GridBagLayout gbl = new GridBagLayout();
|
||||
this.setLayout(gbl);
|
||||
GridBagConstraints gbc = new GridBagConstraints();
|
||||
@ -61,9 +58,9 @@ public class Puissance4Panel extends JPanel{
|
||||
this.add(this.menu, gbc);
|
||||
|
||||
|
||||
this.titre = new JLabel(title);
|
||||
this.titre.setForeground(Color.WHITE);
|
||||
this.titre.setFont(new Font("",Font.BOLD, 40));
|
||||
JLabel titre = new JLabel("PUISSANCE 4");
|
||||
titre.setForeground(Color.WHITE);
|
||||
titre.setFont(new Font("",Font.BOLD, 40));
|
||||
|
||||
gbc.gridx = 1;
|
||||
gbc.gridy = 0;
|
||||
@ -75,7 +72,7 @@ public class Puissance4Panel extends JPanel{
|
||||
gbc.weighty = 0;
|
||||
gbc.insets = new Insets(0, 0, 0, 0);
|
||||
|
||||
this.add(this.titre, gbc);
|
||||
this.add(titre, gbc);
|
||||
|
||||
gbc.gridx = 1;
|
||||
gbc.gridy = 1;
|
||||
@ -128,14 +125,13 @@ public class Puissance4Panel extends JPanel{
|
||||
gbc.insets = new Insets(10, 0, 0, 0);
|
||||
|
||||
this.add(this.reset, gbc);
|
||||
|
||||
|
||||
reset.setBackground(Constants.RED);
|
||||
reset.setBackground(new Color(255,64,64));
|
||||
reset.setForeground(Color.WHITE);
|
||||
reset.setFocusPainted(false);
|
||||
reset.setBorder(new EmptyBorder(5,10,5,10));
|
||||
|
||||
menu.setBackground(Constants.RED);
|
||||
menu.setBackground(new Color(255,64,64));
|
||||
menu.setForeground(Color.WHITE);
|
||||
menu.setFocusPainted(false);
|
||||
menu.setBorder(new EmptyBorder(5,10,5,10));
|
||||
@ -158,6 +154,7 @@ public class Puissance4Panel extends JPanel{
|
||||
case Constants.PLAYER_ONE:
|
||||
this.playerTurn.setText("Tour de : " + this.playerOneName);
|
||||
break;
|
||||
|
||||
case Constants.PLAYER_TWO:
|
||||
this.playerTurn.setText("Tour de : " + this.playerTwoName);
|
||||
break;
|
||||
@ -205,7 +202,6 @@ public class Puissance4Panel extends JPanel{
|
||||
* @param playerTurn le tour du joueur actuel
|
||||
* @param playerOneScore le score du joueur 1
|
||||
* @param playerTwoScore le score du joueur 2
|
||||
* @param playerThreeScore le score du joueur 3
|
||||
*/
|
||||
public void setGameStatus(GameStatus status, int playerTurn, int playerOneScore, int playerTwoScore, int playerThreeScore) {
|
||||
this.grille.hover(-1);
|
||||
@ -225,37 +221,24 @@ public class Puissance4Panel extends JPanel{
|
||||
this.playerTurn.setText("Egalité");
|
||||
break;
|
||||
|
||||
case FIRST:
|
||||
JOptionPane.showMessageDialog(this, "Victoire de : " + (playerTurn == Constants.PLAYER_ONE ? this.playerOneName : this.playerTwoName), "Victoire", JOptionPane.DEFAULT_OPTION);
|
||||
break;
|
||||
|
||||
default:
|
||||
this.changeLabel(playerTurn);
|
||||
break;
|
||||
}
|
||||
if(playerThreeScore == -1)
|
||||
if(this.playerNumber == 2)
|
||||
this.changeScore(playerOneScore, playerTwoScore);
|
||||
else
|
||||
this.changeScore(playerOneScore, playerTwoScore, playerThreeScore);
|
||||
}
|
||||
|
||||
/**
|
||||
* Envoie un popup avec un message de victoire
|
||||
* @param player joueur
|
||||
*/
|
||||
public void playerWin(int player){
|
||||
switch(player){
|
||||
case 1:
|
||||
JOptionPane.showMessageDialog(this, "Le joueur "+this.playerOneName+" a gagné");
|
||||
break;
|
||||
case 2:
|
||||
JOptionPane.showMessageDialog(this, "Le joueur "+this.playerTwoName+" a gagné");
|
||||
break;
|
||||
case 3:
|
||||
JOptionPane.showMessageDialog(this, "Le joueur "+this.playerThreeName+" a gagné");
|
||||
break;
|
||||
}
|
||||
this.titre.setText("PUISSANCE 4");
|
||||
}
|
||||
|
||||
public void resetTitle() {
|
||||
this.titre.setText(title);
|
||||
public void RemovePlayer(int Player, int[][] grille){
|
||||
this.grille.RemovePlayer(Player, grille);
|
||||
this.changeHoverColor(Player);
|
||||
this.changeLabel(Player);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -276,12 +259,16 @@ public class Puissance4Panel extends JPanel{
|
||||
|
||||
/**
|
||||
* Permet de définir le nom du joueur 3
|
||||
* @param playerThreeName le nom du joueur
|
||||
* @param playerTwoName le nom du joueur
|
||||
*/
|
||||
public void setPlayerThreeName(String playerThreeName) {
|
||||
this.playerThreeName = playerThreeName;
|
||||
}
|
||||
|
||||
public void setPlayerNumber(int playerNumber) {
|
||||
this.playerNumber = playerNumber;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retourne la grille du Puissance 4
|
||||
* @return La grille du Puissance 4
|
||||
@ -305,6 +292,5 @@ public class Puissance4Panel extends JPanel{
|
||||
public void accueilButton(ActionListener l){
|
||||
this.menu.addActionListener(l);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
@ -1,5 +0,0 @@
|
||||
/**
|
||||
* fr.iutfbleau.projetAgile.Puissance4.View groupe toutes les classes de la vue du Puissance 4
|
||||
*/
|
||||
package fr.iutfbleau.projetAgile.Puissance4.View;
|
||||
//Fichier vide pour la javadoc
|
Loading…
Reference in New Issue
Block a user