Commit e3f0c0bd authored by Hugo DACLON's avatar Hugo DACLON
Browse files

Appli qui marche presque tout comme il faut

parent d6986d43
......@@ -89,7 +89,7 @@ public class CreationFlotte extends JPanel {// JPanel {
ready.setPreferredSize(DIMENSION_RESET);
retour = new JButton("Déserter");
ready.setPreferredSize(DIMENSION_RETOUR);
refresh = new JButton(new ImageIcon("img/interface/bouton/creationFlotte/BoutonRafraichirMap.png"));
refresh = new JButton(new ImageIcon("img/interface/bouton/BoutonRafraichirMap.png"));
refresh.setText("Raffraichir la carte");
refresh.setPreferredSize(DIMENSION_REFRESH);
......@@ -220,17 +220,16 @@ public class CreationFlotte extends JPanel {// JPanel {
selectedCell = null;
throw new CoordsBadShipException();
}
for (IShip flotteShip : appli.getFlotte().getShips()) {
for (ICoord c : newShip.getCoords()) {
if (flotteShip.getCoords().contains(c)) {
selectedCell = null;
throw new CoordsBadShipException();
}
}
}
selectedCell = null;
appli.getFlotte().add(newShip);
map.ajouterBateau(newShip);
switch(appli.getFlotte().add(newShip)){
case 0 :
map.ajouterBateau(newShip);
break;
case -2 :
throw new CoordsBadShipException();
case -3 :
throw new CoordsBadShipException();
}
}
private boolean isVertical(Coord cell) {
......@@ -337,4 +336,13 @@ public class CreationFlotte extends JPanel {// JPanel {
public void fixeListenerAjouterBateau(MouseListener l) {
map.addMouseListener(l);
}
public void fixeListenerRefresh(ActionListener l){
refresh.addActionListener(l);
}
public void actualiserMap(){
map.resetGrille();
map.ajouterFlotte(appli.getFlotte());
}
}
......@@ -2,18 +2,10 @@ package info1.Vue;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionListener;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import java.awt.*;
import javax.imageio.ImageIO;
import javax.swing.*;
import com.mashape.unirest.http.exceptions.UnirestException;
......@@ -21,140 +13,147 @@ import info1.application.appli;
import info1.network.Game;
import info1.network.Network;
import java.awt.event.*;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
/**
* JPanel affichant les options d'une partie
*
* @version 1.0
*/
public class OptPartie extends JPanel {
//------Composant généraux------
private JButton retourChoix;
private JButton retourMenu;
private JButton retourCreation;
private JLabel entreePseudoLabel;
private JTextField choixPseudo;
private JPanel optCarry;
//------Composant pour la fenetre CreerPartie------
//------Composant pour la fenetre CreerPartie------
private JButton creerPartie;
private JButton hostPartie;
private JPanel boutonCarryHost;
private JTextField choixPseudoHost;
//------Composant pour la fenetre RejoindrePartie------
//------Composant pour la fenetre RejoindrePartie------
private JButton actualiser;
private JButton joinPartie;
private JPanel boutonCarryJoin;
private JTextField choixPseudoJoin;
private JLabel ChercherLabel;
private JTextField recherche;
private Game[] listeParties;
private JList<Game> parties;
//------Composant du Panel principal------
private JPanel rejoindre;
private JPanel heberger;
private boolean creer;
private boolean host;
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.
this.setBackground(appli.BACKGROUND_COLOR);
JPanel principal = new JPanel(new BorderLayout());
JPanel centrage = new JPanel(new BorderLayout());
JPanel[] gap = new JPanel[]{new JPanel(),new JPanel(),new JPanel(),new JPanel(),new JPanel()};
for (JPanel jPanel : gap) {
jPanel.setPreferredSize(new Dimension(20,20));
}
//GridLayout lay = new GridLayout(4,5);
rejoindre = new JPanel();
heberger = new JPanel();
rejoindre = new JPanel(new BorderLayout());
heberger = new JPanel(new BorderLayout());
creer = false;
host = false;
join = false;
/*------------------------panel rejoindre------------------------*/
rejoindre.setLayout(new BorderLayout());
retourChoix = new JButton("retour");
retourMenu = new JButton("retour à la création de flotte");
actualiser = new JButton("actualiser");
joinPartie = new JButton("Rejoindre la partie");
//création des boutons
try {
retourMenu = new JButton("retour");
retourCreation = new JButton("retour à la création de flotte");
actualiser = new JButton((new ImageIcon((ImageIO.read(new File("img/interface/bouton/BoutonRafraichirMap.png"))).getScaledInstance(48,48, Image.SCALE_SMOOTH))));
actualiser.setText("Actualiser");
joinPartie = new JButton("Rejoindre la partie");
} catch (IOException e) {
System.out.println("erreur lors du chargement d'une image");
e.printStackTrace();
}
entreePseudoLabel = new JLabel("Entrez votre pseudo : ");
choixPseudo = new JTextField();
choixPseudoJoin = new JTextField();
choixPseudoJoin.setText(appli.getPlayer().getName());
ChercherLabel = new JLabel("chercher une partie :");
recherche = new JTextField();
parties = new JList<Game>(new DefaultListModel<Game>());
actualiserListe();
JPanel PanelWest = new JPanel();
PanelWest.setLayout(new GridLayout(4, 2));
listeParties = new Game[0];
parties = new JList<Game>(listeParties);
JPanel ecriturePanelWest = new JPanel();
ecriturePanelWest.setLayout(new GridLayout(4, 2));
ecriturePanelWest.add(entreePseudoLabel);
ecriturePanelWest.add(choixPseudo);
ecriturePanelWest.add(new JPanel());
ecriturePanelWest.add(new JPanel());
ecriturePanelWest.add(ChercherLabel); //TODO
ecriturePanelWest.add(recherche);
ecriturePanelWest.add(new JPanel()); ecriturePanelWest.add(new JPanel());
PanelWest.add(entreePseudoLabel); PanelWest.add(choixPseudoJoin);
PanelWest.add(new JPanel()); PanelWest.add(new JPanel());
PanelWest.add(ChercherLabel); PanelWest.add(recherche);
PanelWest.add(new JPanel()); PanelWest.add(new JPanel());
centrage.add(PanelWest, BorderLayout.WEST);
rejoindre.add(ecriturePanelWest, BorderLayout.WEST);
boutonCarryJoin = new JPanel();
boutonCarryJoin.setLayout(new BoxLayout(boutonCarryJoin, BoxLayout.X_AXIS));
JPanel boutonCarryRejoindre = new JPanel();
boutonCarryRejoindre.setLayout(new BoxLayout(boutonCarryRejoindre, BoxLayout.X_AXIS));
boutonCarryJoin.add(retourCreation);
boutonCarryJoin.add(gap[0]);
boutonCarryJoin.add(retourMenu);
boutonCarryJoin.add(gap[1]);
boutonCarryJoin.add(joinPartie);
boutonCarryJoin.add(gap[2]);
boutonCarryJoin.add(actualiser);
boutonCarryRejoindre.add(retourMenu);
boutonCarryRejoindre.add(retourChoix);
boutonCarryRejoindre.add(joinPartie);
boutonCarryRejoindre.add(actualiser);
rejoindre.add(boutonCarryJoin, BorderLayout.SOUTH);
rejoindre.add(boutonCarryRejoindre, BorderLayout.SOUTH);
JPanel vide = new JPanel();
vide.setPreferredSize(new Dimension(100,100));
centrage.add(new JScrollPane(parties), BorderLayout.EAST);
rejoindre.setVisible(false);
rejoindre.add(centrage,BorderLayout.CENTER);
rejoindre.add(vide,BorderLayout.NORTH);
rejoindre.add(vide,BorderLayout.NORTH);
principal.add(rejoindre,BorderLayout.WEST);
/*------------------------panel creer------------------------*/
try {
vide = new JPanel();
vide.setPreferredSize(new Dimension(150,150));
JPanel panelPseudo = new JPanel();
panelPseudo.setLayout(new GridLayout(2,2));
listeParties = (Network.listInitializedGames(appli.getServerUrl())).toArray(new Game[0]);
parties = new JList<Game>(listeParties);
} catch (UnirestException e) {
e.printStackTrace();
}
choixPseudoHost = new JTextField();
choixPseudoHost.setText(appli.getPlayer().getName());
entreePseudoLabel = new JLabel("Entrez votre pseudo : ");
panelPseudo.add(entreePseudoLabel); panelPseudo.add(choixPseudoHost);
panelPseudo.add(new JPanel()); panelPseudo.add(new JPanel());
rejoindre.add(new JScrollPane(parties), BorderLayout.EAST);
//player.getName et game.getID + type (belge, fr)
//bouton actualiser
//demander une flotte
rejoindre.setVisible(false);
principal.add(rejoindre,BorderLayout.WEST);
/*------------------------panel creer------------------------*/
heberger.setLayout(new GridLayout());
creerPartie = new JButton("Créer la partie");
optCarry = new JPanel();
hostPartie = new JButton("Créer la partie");
boutonCarryHost = new JPanel();
optCarry.setLayout(new GridLayout(3,2));
optCarry.add(creerPartie);
boutonCarryHost.setLayout(new BoxLayout(boutonCarryHost,BoxLayout.X_AXIS));
boutonCarryHost.add(retourCreation);
boutonCarryHost.add(gap[3]);
boutonCarryHost.add(retourMenu);
boutonCarryHost.add(gap[4]);
boutonCarryHost.add(hostPartie);
heberger.add(optCarry);
heberger.setVisible(false);
heberger.add(panelPseudo, BorderLayout.CENTER);
heberger.add(boutonCarryHost, BorderLayout.SOUTH);
heberger.setVisible(false);
heberger.add(vide,BorderLayout.NORTH);
principal.add(heberger,BorderLayout.EAST);
/*------------------------fin des layouts------------------------*/
principal.setVisible(true);
......@@ -164,56 +163,34 @@ 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);
}
/**
* Permet de choisir un pseudo
*
* @return le pseudo choisi
*/
public String getPseudo(){
return choixPseudo.getText();
public String getPseudoHost(){
return choixPseudoHost.getText();
}
public String getPseudoJoin(){
return choixPseudoJoin.getText();
}
/**
* Permet de chercher une partie
*
* @return le résultat de la recherche
*/
public String getChercher(){
return recherche.getText();
}
/**
* Permet d'actualiser la recherche
*/
public void actualiser(){
if(join || creer)
public void actualiserPage(){
if(join || host)
{
this.rejoindre.setVisible(join);
this.heberger.setVisible(!join);
......@@ -221,7 +198,47 @@ public class OptPartie extends JPanel {
// contenant : player.getName et game.getID + type (belge, fr) et bouton rejoindre
}
}
//_____________________________________________listeners_____________________________________________//
public void FixeListenerCreation(ActionListener listener)
{creerPartie.addActionListener(listener);}
public void actualiserListe() {
DefaultListModel<Game> listModel = (DefaultListModel<Game>) parties.getModel();
listModel.clear();
ArrayList<Game> newListe = new ArrayList<Game>();
try {
newListe = (ArrayList<Game>) Network.listInitializedGames(appli.getServerUrl());
} catch (UnirestException e) {
System.out.println("Server Error");
e.printStackTrace();
}
for (Game game : newListe) {
if (game.toString().toLowerCase().contains(recherche.getText().toLowerCase())){
listModel.addElement(game);
}
}
}
public Game getPartie(){
return parties.getSelectedValue();
}
public void fixeListenerRecherche(KeyListener l){
recherche.addKeyListener(l);
}
public void fixeListenerActualiserListe(ActionListener l){
actualiser.addActionListener(l);
}
public void fixeListenerRetourMenu(ActionListener l){
retourMenu.addActionListener(l);
}
public void fixeListenerRetourCreationFlotte(ActionListener l){
retourCreation.addActionListener(l);
}
public void fixeListenerJoin(ActionListener l){
joinPartie.addActionListener(l);
}
public void fixeListenerHost(ActionListener l){
hostPartie.addActionListener(l);
}
}
......@@ -16,7 +16,8 @@ import info1.Vue.PageJeu;
import info1.Vue.ViewManager;
import info1.controlleur.AjouterBateau;
import info1.controlleur.ChangerVersionControleur;
//import info1.controlleur.CreerPartieControleur;
import info1.controlleur.HostControleur;
import info1.controlleur.JoinControleur;
import info1.controlleur.OuvrirChoixPartieControleur;
import info1.controlleur.OuvrirCreditsControleur;
import info1.controlleur.OuvrirCreerFlotteControleur;
......@@ -25,6 +26,8 @@ import info1.controlleur.OuvrirOptionsControleur;
import info1.controlleur.OuvrirReglesControleur;
import info1.controlleur.OuvrirRejoindrePartieControleur;
import info1.controlleur.QuitterJeuControleur;
import info1.controlleur.RechercheControleur;
import info1.controlleur.RefreshControlleur;
import info1.controlleur.RetourAuMenuControleur;
import info1.controlleur.SelectCell;
import info1.controlleur.Shoot;
......@@ -115,16 +118,21 @@ public class appli {
fenetre.setMainView(accueil);
}
public static void afficherOptPartie(boolean heberger) {// TODO ajouter les listener
public static void afficherOptPartie(boolean heberger) {
OptPartie optionsPartie = new OptPartie("Que voulez vous faire ?");
if (heberger)
{
if (heberger){
optionsPartie.afficherHeberger();
// optionsPartie.FixeListenerCreation(new CreerPartieControleur(optionsPartie));
}
else
optionsPartie.fixeListenerRetourMenu(new RetourAuMenuControleur());
optionsPartie.fixeListenerRetourCreationFlotte(new OuvrirCreerFlotteControleur());
optionsPartie.fixeListenerHost(new HostControleur(optionsPartie));
}else{
optionsPartie.afficherRejoindre();
optionsPartie.fixeListenerActualiserListe(new RefreshControlleur(optionsPartie));
optionsPartie.fixeListenerRecherche(new RechercheControleur(optionsPartie));
optionsPartie.fixeListenerRetourMenu(new RetourAuMenuControleur());
optionsPartie.fixeListenerRetourCreationFlotte(new OuvrirCreerFlotteControleur());
optionsPartie.fixeListenerJoin(new JoinControleur(optionsPartie));
}
fenetre.setMainView(optionsPartie);
}
......@@ -134,6 +142,7 @@ public class appli {
creerFlotte.fixeListenerOuvrirChoixPartie(new OuvrirChoixPartieControleur());
creerFlotte.fixeListenerResetFlotte(new ChangerVersionControleur(creerFlotte));
creerFlotte.fixeListenerAjouterBateau(new AjouterBateau(creerFlotte));
creerFlotte.fixeListenerRefresh(new RefreshControlleur(creerFlotte));
fenetre.setMainView(creerFlotte);
}
......
package info1.controlleur;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.BoxLayout;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import com.mashape.unirest.http.exceptions.UnirestException;
import info1.Vue.OptPartie;
import info1.application.appli;
import info1.network.BadIdException;
import info1.network.Network;
import info1.network.Player;
import info1.ships.BadCoordException;
import info1.ships.UncompleteFleetException;
public class HostControleur implements ActionListener {
private Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
private int screenWidth = (int) screenSize.getWidth();
private int screenHeight = (int) screenSize.getHeight();
OptPartie options;
public HostControleur(OptPartie options)
{this.options=options;}
@Override
public void actionPerformed(ActionEvent e) {
if (options.getPseudoHost().equals("")||options.getPseudoHost().contains(" ")||options.getPseudoHost()==null){
JOptionPane.showMessageDialog(appli.getFenetre(), "Veuillez saisir un pseudo valide (sans espace et d'au moins 1 charactère)");
return;
}
appli.setPlayer(new Player(options.getPseudoHost()));
//inscription du joueur de appli si il n'est pas déjà fait
try {
Network.suscribeNewPlayer(appli.getServerUrl(), appli.getPlayer());
} catch (UnirestException e2) {
JOptionPane.showMessageDialog(appli.getFenetre(), "Erreur lors de la création du joueur.");
e2.printStackTrace();
return;
}
try {
appli.setGame(Network.initNewGame(appli.getServerUrl(), appli.getPlayer(), appli.getFlotte()));
} catch (UnirestException e2) {
JOptionPane.showMessageDialog(appli.getFenetre(), "Erreur lors de la création du joueur.");
e2.printStackTrace();
return;
} catch (UncompleteFleetException e2) {
JOptionPane.showMessageDialog(appli.getFenetre(), "Erreur lors de la création du joueur.");
e2.printStackTrace();
return;
} catch (BadCoordException e2) {
JOptionPane.showMessageDialog(appli.getFenetre(), "Erreur lors de la création du joueur.");
e2.printStackTrace();
return;
}
JDialog attente = new JDialog(appli.getFenetre(),"Attente");
JPanel panelPrincipal = new JPanel();
JLabel label = new JLabel("en attente d'un adversaire...");
JLabel id = new JLabel ("L'id de votre partie est : "+Integer.toString(appli.getGame().getId()));
label.setForeground(Color.WHITE);
label.setBackground(appli.BACKGROUND_COLOR);
id.setForeground(Color.WHITE);
label.setBackground(appli.BACKGROUND_COLOR);
label.setFont(new Font("Serif", Font.BOLD, 16));
id.setFont(new Font("Serif", Font.BOLD, 16));
panelPrincipal.setBackground(appli.BACKGROUND_COLOR);
panelPrincipal.setLayout(new BoxLayout(panelPrincipal, BoxLayout.Y_AXIS));
panelPrincipal.add(label);
panelPrincipal.add(id);
panelPrincipal.setPreferredSize(new Dimension(200,50));
attente.setContentPane(panelPrincipal);
attente.setModal(true);
attente.setModalityType(JDialog.ModalityType.APPLICATION_MODAL);
attente.setLocation((screenWidth-200)/2, (screenHeight-50)/2);
attente.pack();
attente.setResizable(false);
attente.setAlwaysOnTop(true);
attente.setVisible(true);
try {
while(Network.getInfo(appli.getServerUrl(),appli.getGame(), appli.getPlayer())!=10){
try { attente.wait(); } catch (InterruptedException e1) {System.out.println("haha");}
}
} catch(IllegalMonitorStateException e2){
JOptionPane.showMessageDialog(appli.getFenetre(), "La partie à été annulée");
} catch (UnirestException e1) {
JOptionPane.showMessageDialog(appli.getFenetre(), "Erreur Serveur.");
e1.printStackTrace();
return;
} catch (BadIdException e1) {
JOptionPane.showMessageDialog(appli.getFenetre(), "Erreur, la game est mal initialisée.");
e1.printStackTrace();
return;
}
}
}
\ No newline at end of file
package info1.controlleur;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JOptionPane;
import com.mashape.unirest.http.exceptions.UnirestException;
import info1.Vue.OptPartie;
import info1.application.appli;
import info1.network.Network;
import info1.network.Player;
import info1.ships.BadCoordException;
import info1.ships.UncompleteFleetException;
public class JoinControleur implements ActionListener{
OptPartie options;
public JoinControleur(OptPartie options) {
this.options = options;
}
@Override
public void actionPerformed(ActionEvent e) {