Commit 61de9717 authored by Loïc Perine's avatar Loïc Perine
Browse files

Merge branch 'master' into 'test'

# Conflicts:
#   src/info1/Vue/OptPartie.java
parents 0b4d0f76 555b8c75
......@@ -12,6 +12,11 @@ import javax.swing.JPanel;
import info1.application.appli;
/**
* JDialog afficahnt la vue du choix de la partie (créer ou rejoindre)
*
* @version 1.0
*/
public class ChoixModePartie extends JDialog {
......@@ -29,7 +34,11 @@ public class ChoixModePartie extends JDialog {
private JPanel choix = new JPanel();
/**
* Créer la vue de la fenêtre
*
* @param titre le titre de la fenêtre
*/
public ChoixModePartie(String titre) {
this.setTitle(titre);
......@@ -74,8 +83,25 @@ public class ChoixModePartie extends JDialog {
this.setAlwaysOnTop(true);
}
public void fixeListenerEtreHost(ActionListener action) { etreHost.addActionListener(action); }//OptPartie.afficherheberger
public void fixeListenerEtreGuest(ActionListener action) { etreGuest.addActionListener(action); }//Optpartie.afficherrejoindre
/**
* Gère le bouton "Créer une partie"
*
* @param action l'action de cliquer sur le bouton
*/
public void fixeListenerEtreHost(ActionListener action) { etreHost.addActionListener(action); }
/**
* Gère le bouton "Rejoindre une partie"
*
* @param action l'action de cliquer sur le bouton
*/
public void fixeListenerEtreGuest(ActionListener action) { etreGuest.addActionListener(action); }
/**
* Gère le bouton "Retour"
*
* @param action l'action de cliquer sur le bouton
*/
public void fixeListenerRetourCreerFlotte(ActionListener action) { retourChoix.addActionListener(action); }
}
......@@ -35,6 +35,13 @@ import info1.ships.NavyFleet;
import info1.ships.Ship;
import info1.ships.Submarine;
/**
* JPanel affichant la vue pour créer & placer les bateaux sur le plateau.
*
* @version 1.0
*/
public class CreationFlotte extends JPanel {// JPanel {
private static final JLabel[] LISTE_BATEAUX_V_BE = new JLabel[] { new JLabel("Cuirrassé"), new JLabel("Croiseur"),
......@@ -61,7 +68,13 @@ public class CreationFlotte extends JPanel {// JPanel {
private JButton refresh;
private Coord selectedCell;
/**
* Création de la vue de la page
*
* @param titre le titre de la fenêtre
*/
public CreationFlotte(String titre) {
super(new BorderLayout());
this.setName(titre);
for (JLabel label : LISTE_BATEAUX_V_BE) {
......@@ -102,6 +115,16 @@ public class CreationFlotte extends JPanel {// JPanel {
insets.bottom + (int) DIMENSION_REFRESH.getHeight(), (int) DIMENSION_REFRESH.getWidth(),
(int) DIMENSION_REFRESH.getHeight());
liste.add(refresh);
liste.add(new JLabel(" "));
liste.add(new JLabel(" Pour placer les bateaux, cliquer d'abord"));
liste.add(new JLabel(" sur la cellule de départ, puis la cellule"));
liste.add(new JLabel(" de fin."));
liste.add(new JLabel(" "));
liste.add(new JLabel(" Le nombre de cellule entre le début et la"));
liste.add(new JLabel(" fin détermine la taille du bateau."));
liste.add(new JLabel(" "));
liste.add(new JLabel(" Pour supprimer les bateaux, cliquer sur"));
liste.add(new JLabel(" la cellule contennant le bateau."));
boutons.add(retour);
boutons.add(reset);
......@@ -150,15 +173,30 @@ public class CreationFlotte extends JPanel {// JPanel {
return label;
}
/**
* Retourne la cellule selectionnée sur la grille
*
* @return la cellule sélectionnée
*/
public Object getSelectedCell() {
return selectedCell;
}
/**
* Ajoute le surlignement de sélection sur les cellules sélectionnées
*
* @param cell les coordonnées de la cellule sélectionnée
*/
public void selectionCell(Coord cell) {
map.ajouterViseur(cell);
selectedCell = cell;
}
/**
* Permet d'ajouter un bateau sur les cellules sélectionnées
*
* @param cell les coordonnées de la cellule sélectionnée
*/
public void creerBateau(Coord cell) throws BadCoordException, CoordsBadShipException {
Ship newShip;
map.resetCell(selectedCell);
......@@ -214,6 +252,11 @@ public class CreationFlotte extends JPanel {// JPanel {
}
}
/**
* Permet d'effacer les bateaux sur la cellule sélectionnée
*
* @param cell les coordonées de la cellule sélectionnée
*/
public void effacerBateau(Coord cell) {
for (IShip ship : appli.getFlotte().getShips()) {
if (ship.getCoords().contains(cell)) {
......@@ -231,10 +274,20 @@ public class CreationFlotte extends JPanel {// JPanel {
}
}
/**
* Créé la liste des bateaux restant à placer
*
* @return les bateaux restants
*/
public LinkedList<JLabel> getBateauxRestants() {
return bateauxRestant;
}
/**
* Sélectionne la version du jeu voulue
*
* @param version la version du jeu
*/
public void setVersion(boolean version) {
appli.setVersion(version);
if (appli.getFlotte().isFrenchConfiguration() != appli.getVersion() && appli.getFlotte().isComplete()) {
......@@ -249,18 +302,38 @@ public class CreationFlotte extends JPanel {// JPanel {
version ? Arrays.asList(LISTE_BATEAUX_V_FR) : Arrays.asList(LISTE_BATEAUX_V_BE));
}
/**
* Lance le choix de la partie (héberger ou rejoindre)
*
* @param l l'appuie sur le bouton
*/
public void fixeListenerOuvrirChoixPartie(ActionListener l) {
ready.addActionListener(l);
}
/**
* Annule le placement des bateaux
*
* @param l l'appuie sur le bouton
*/
public void fixeListenerResetFlotte(ActionListener l) {
reset.addActionListener(l);
}
/**
* Annule la création de la flotte / Retour au menu
*
* @param l l'appuie sur le bouton
*/
public void fixeListenerFermerCreation(ActionListener l) {
retour.addActionListener(l);
}
/**
* Place un bateau sur la cellule sélectionnée
*
* @param l l'appuie sur le bouton
*/
public void fixeListenerAjouterBateau(MouseListener l) {
map.addMouseListener(l);
}
......
......@@ -18,6 +18,11 @@ import javax.swing.text.StyleContext;
import info1.application.appli;
/**
* JDialog affichant les crédits du jeu
*
* @version 2.1
*/
public class Credits extends JDialog {
public static final int WIDTH = 500;
......@@ -48,7 +53,7 @@ public class Credits extends JDialog {
"Discord - pour avoir permis de garder contact entre Loïc et les autres\n" +
"Wikipédia - pour ces incroyables règles de la bataille navale en partie utilisées\n" +
"Les professeurs présents - pour leur soutien durant toute cette semaine\n" +
"les repas à 1€ de la cafet'", Color.WHITE);
"La cafet' - pour ses repas à 1€", Color.WHITE);
credits.setMargin(new Insets(5, 5, 5, 5));
......
......@@ -4,22 +4,25 @@ import info1.ships.ICoord;
import info1.ships.INavyFleet;
import info1.ships.IShip;
/**
* Gère la map
*/
public abstract interface IMap{
public abstract void ajouterPlouf(ICoord cell);
public abstract void ajouterBoom(ICoord cell);
public abstract void ajouterBateau(IShip ship);
public abstract void resetGrille();
public abstract void ajouterFlotte(INavyFleet flotte);
public abstract void noyerBateau(ICoord cell); //doit aussi supprimer les boom
public abstract void ajouterViseur(ICoord cell);
public abstract void resetCell(ICoord cell);
}
......@@ -8,6 +8,11 @@ import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JPanel;
/**
* JPanel gérant l'insertion des images dans les vues
*
* @version 1.0
*/
class ImagePanel extends JPanel {
private Image image;
......
......@@ -15,7 +15,7 @@ import info1.ships.IShip;
public class Map extends JPanel implements IMap {
/**
* représentation graphique de la grille de jeu, permets d'ajouter les images
* Représentation graphique de la grille de jeu, permets d'ajouter les images
* sur la grille de jeu
*/
private BufferedImage image;
......
......@@ -16,6 +16,11 @@ import javax.swing.JButton;
import javax.swing.JPanel;
/**
* JPanem affichant le menu principal du jeu
*
* @version 3.2
*/
public class MenuPrincipal extends JPanel {
// Les composants graphiques de la vue soumis à modification
......@@ -32,11 +37,15 @@ public class MenuPrincipal extends JPanel {
private String langue = "Français";
/**
* Affiche la vue du Menu
*
* @param titre le titre de la fenêtre
*/
public MenuPrincipal(String titre) {
super(new BorderLayout());
this.setName(titre);
try {
creerFlotte = new JButton(new ImageIcon((ImageIO.read(new File("img/interface/bouton/BoutonJouer1.png"))).getScaledInstance(175, 70, Image.SCALE_SMOOTH)));
creerFlotte.setRolloverIcon(new ImageIcon((ImageIO.read(new File("img/interface/bouton/BoutonJouer1Hover.png"))).getScaledInstance(175, 70, Image.SCALE_SMOOTH)));
......@@ -110,31 +119,56 @@ public class MenuPrincipal extends JPanel {
this.setPreferredSize(new Dimension(WIDTH,HEIGHT));
}
/**
* Gère le bouton "Jouer"
*
* @param action l'action d'appuyer sur le bouton
*/
public void fixeListenerCreerFlotte(ActionListener action) { creerFlotte.addActionListener(action); }
public void fixeListenerOuvrirRegles(ActionListener action) {
regles.addActionListener(action);
}
/**
* Gère le bouton "Règles"
*
* @param action l'action d'appuyer sur le bouton
*/
public void fixeListenerOuvrirRegles(ActionListener action) { regles.addActionListener(action); }
/**
* Gère le bouton "Options"
*
* @param action l'action d'appuyer sur le bouton
*/
public void fixeListenerOuvrirOptions(ActionListener action) { options.addActionListener(action); }
/**
* Gère le bouton "Crédits"
*
* @param action l'action d'appuyer sur le bouton
*/
public void fixeListenerOuvrirCredits(ActionListener action) { credits.addActionListener(action); }
/**
* Gère le bouton "Quitter"
*
* @param action l'action d'appuyer sur le bouton
*/
public void fixeListenerQuitterJeu(ActionListener action) { quitter.addActionListener(action); }
/**
* Sélectionne la langue du jeu
*
* @param nouvelle la langue du jeu
*/
public void setLangue( boolean nouvelle) { this.langue = nouvelle ? "Belge" : "Français"; }
/**
*Gère la langue du jeu
*
* @return la langue du jeu
*/
public String getLangue() { return this.langue; }
public void fixeListenerOuvrirOptions(ActionListener action) {
options.addActionListener(action);
}
public void fixeListenerOuvrirCredits(ActionListener action) {
credits.addActionListener(action);
}
public void fixeListenerQuitterJeu(ActionListener action) {
quitter.addActionListener(action);
}
public void setLangue( boolean nouvelle) {
this.langue = nouvelle ? "Belge" : "Français";
}
public String getLangue() {
return this.langue;
}
@Override
protected void paintComponent(Graphics g) {
......
......@@ -20,46 +20,53 @@ import com.mashape.unirest.http.exceptions.UnirestException;
import info1.application.appli;
import info1.network.Game;
import info1.network.Network;
import java.awt.event.*;
/**
* JPanel affichant les options d'une partie
*
* @version 1.0
*/
public class OptPartie extends JPanel {
/*______Composant pour la fenetre CreerPartie______*/
private JRadioButton vFr;
private JRadioButton vBe;
//------Composant généraux------
private JCheckBox custom;
private JCheckBox tirRepete;
private JCheckBox grosTir;
private JButton retourChoix;
private JButton retourMenu;
private JLabel entreePseudoLabel;
private JTextField choixPseudo;
private JButton creerPartie;
private JPanel optCarry;
/*______Composant pour la fenetre RejoindrePartie______*/
//------Composant pour la fenetre CreerPartie------
private JButton creerPartie;
//------Composant pour la fenetre RejoindrePartie------
private JButton retourChoix;
private JButton retourMenu;
private JButton actualiser;
private JButton joinPartie;
private JLabel entreePseudoLabel;
private JTextField entreePseudo;
private JLabel ChercherLabel;
private JTextField AChercher;
private JTextField recherche;
private Game[] listeParties;
private JList<Game> parties;
/*_____Composant du Panel principal_____*/
//------Composant du Panel principal------
private JPanel rejoindre;
private JPanel heberger;
private boolean customize;
private boolean creer;
private boolean join;
/**
* Affiche la vue de la fenêtre
*
* @param titre le titre de la fenêtre
*/
public OptPartie(String titre) {
this.setName(titre);
//faire une liste des parties initialisées avec le nom dans un label et un bouton rejoindre.
......@@ -71,11 +78,10 @@ public class OptPartie extends JPanel {
rejoindre = new JPanel();
heberger = new JPanel();
customize = false;
creer = false;
join = false;
/*____________________panel rejoindre____________________*/
/*------------------------panel rejoindre------------------------*/
rejoindre.setLayout(new BorderLayout());
......@@ -85,10 +91,10 @@ public class OptPartie extends JPanel {
joinPartie = new JButton("Rejoindre la partie");
entreePseudoLabel = new JLabel("Entrez votre pseudo : ");
entreePseudo = new JTextField();
choixPseudo = new JTextField();
ChercherLabel = new JLabel("chercher une partie :");
AChercher = new JTextField();
recherche = new JTextField();
listeParties = new Game[0];
......@@ -97,13 +103,13 @@ public class OptPartie extends JPanel {
JPanel ecriturePanelWest = new JPanel();
ecriturePanelWest.setLayout(new GridLayout(4, 2));
ecriturePanelWest.add(entreePseudoLabel);
ecriturePanelWest.add(entreePseudo);
ecriturePanelWest.add(new JPanel()); ecriturePanelWest.add(new JPanel());
ecriturePanelWest.add(choixPseudo);
ecriturePanelWest.add(new JPanel());
ecriturePanelWest.add(new JPanel());
ecriturePanelWest.add(ChercherLabel); //TODO
ecriturePanelWest.add(AChercher);
ecriturePanelWest.add(recherche);
ecriturePanelWest.add(new JPanel()); ecriturePanelWest.add(new JPanel());
......@@ -136,28 +142,20 @@ public class OptPartie extends JPanel {
//demander une flotte
rejoindre.setVisible(false);
principal.add(rejoindre,BorderLayout.WEST);
/*____________________panel creer____________________*/
/*------------------------panel creer------------------------*/
heberger.setLayout(new GridLayout());
vFr = new JRadioButton("version Française", true);
vBe = new JRadioButton("version Belge", false);
custom = new JCheckBox("partie customisée (non fonctionnel)", false);
tirRepete = new JCheckBox("tir répété", false);
grosTir = new JCheckBox("tir amélioré", false);
creerPartie = new JButton("Créer la partie");
optCarry = new JPanel();
optCarry.setLayout(new GridLayout(3,2));
optCarry.add(vFr);
optCarry.add(vBe);
optCarry.add(custom);
optCarry.add(creerPartie);
heberger.add(optCarry);
heberger.setVisible(false);
principal.add(heberger,BorderLayout.EAST);
/*____________________fin des layouts____________________*/
/*------------------------fin des layouts------------------------*/
principal.setVisible(true);
this.add(principal);
......@@ -166,47 +164,62 @@ public class OptPartie extends JPanel {
}
/**
* Affiche la fenêtre pour héberger une partie
*/
public void afficherHeberger() {//useless du coup ?
changerTitre("creer une partie");
heberger.setVisible(true);
rejoindre.setVisible(false);
}
/**
* Affiche la fenêtre pour rejoindre une partie
*/
public void afficherRejoindre() { //pareil
changerTitre("rejoindre une partie");
heberger.setVisible(false);
rejoindre.setVisible(true);
}
/**
* Change le titre de la partie
*
* @param nouveau le nouveau nom de la partie
*/
public void changerTitre(String nouveau) {
this.setName(nouveau);
}
public String getPseudoChoisi(){
return entreePseudo.getText();
/**
* Permet de choisir un pseudo
*
* @return le pseudo choisi
*/
public String getPseudo(){
return choixPseudo.getText();
}
/**
* Permet de chercher une partie
*
* @return le résultat de la recherche
*/
public String getChercher(){
return AChercher.getText();
return recherche.getText();
}
/**
* Permet d'actualiser la recherche
*/
public void actualiser(){
if(join == true)
if(join || creer)
{
this.rejoindre.setVisible(true);
this.heberger.setVisible(false);
this.rejoindre.setVisible(join);
this.heberger.setVisible(!join);
//foreach partie dans la liste partie : créer un nouveau ensemble de composants
// contenant : player.getName et game.getID + type (belge, fr) et bouton rejoindre
}
else {
if(creer == true){
this.heberger.setVisible(true);
this.rejoindre.setVisible(false);
if(customize == true) { //l'action listener de customize va actualiser
optCarry.add(tirRepete);
optCarry.add(grosTir);
}
}
}
}
//_____________________________________________listeners_____________________________________________//
public void FixeListenerCreation(ActionListener listener)
......
......@@ -5,6 +5,11 @@ import java.awt.*;
import java.awt.event.ActionListener;
import info1.application.*;
/**
* JDialog affichant les options
*