Skip to content
Snippets Groups Projects
VueJoueur.java 6.18 KiB
Newer Older
package puissance4.vue;

import puissance4.controleur.Puissance4Controleur;

import javax.swing.*;
import java.awt.*;

public class VueJoueur extends JFrame {

    private Puissance4Controleur game;
    private JLabel jlJoueur;
    private JLabel jlGagnant;

    public VueJoueur(Puissance4Controleur game){
        this.game=game;

        //On créer la vue
        this.setSize( 1000, 800);
        JPanel vue= new JPanel(new BorderLayout());

AMOCA OKKES's avatar
AMOCA OKKES committed
        //Affichage des infos en haut de la grille (gagnant, tour du joueur) + boutton recommancer
        JPanel info = new JPanel(new GridLayout(1,3));
        jlGagnant = new JLabel("Aucun gagnant");
        jlJoueur = new JLabel("Tour du joueur : "+this.game.getJoueurCourant().getNom());
        JButton recommancer = new JButton("Recommancer");
        recommancer.setCursor(Cursor.getPredefinedCursor(12));

AMOCA OKKES's avatar
AMOCA OKKES committed
        //Ajout dans le jpanel info + changement de couleur en fonction du joueur courant
        info.add(jlGagnant);
        info.add(jlJoueur);
        info.add(recommancer);

        info.setBackground(Color.BLACK);
        jlGagnant.setForeground(Color.WHITE);
        jlJoueur.setForeground(this.game.getJoueurCourant().getColor().getCouleur());

        //Evenement du bouton recommancer
        recommancer.addActionListener(e -> {
            this.game.getGrilleCourant().viderGrille();
            this.majGrille();
        });

        //Récupération ligne & colonne
        int nbLigne = this.game.getGrilleCourant().getNblignes();
        int nbColonne = this.game.getGrilleCourant().getNbColonnes();

        //New grille
        JPanel grille = new JPanel(new GridLayout(nbLigne+1, nbColonne));

        //On créé chaque case
        for(int colonne = 0; colonne < nbColonne; colonne++)
        {
            for(int ligne = 0; ligne < nbLigne; ligne++)
            {
                //Création ligne & colonne
                JLabel cases = new JLabel();
                cases.setBorder(BorderFactory.createLineBorder(Color.BLACK));

                //Ajout de la case à la grille
                grille.add(cases);
            }
        }

        //Bouttons pour jouer
        for(int i = 0; i < nbColonne; i++)
        {
            int col = i;
            JButton buttonPLay = new JButton("Jouer colonne :"+(col+1));
BARBI HUGO's avatar
BARBI HUGO committed
            buttonPLay.addActionListener(e -> this.play(col));
            grille.add(buttonPLay);
            buttonPLay.setCursor(Cursor.getPredefinedCursor(12));
        }

        //Ajout dans la grille
        vue.add(grille, BorderLayout.CENTER);
        vue.add(info, BorderLayout.NORTH);

        //Affichage de la vue
        this.setContentPane(vue);
        this.setVisible(true);
        this.setDefaultCloseOperation(EXIT_ON_CLOSE);
    }

BARBI HUGO's avatar
BARBI HUGO committed
    public void play(int colonne)
AMOCA OKKES's avatar
AMOCA OKKES committed
        if(this.game.peutJouer(colonne)) {
            if (this.game.getWinner()!=null){
AMOCA OKKES's avatar
AMOCA OKKES committed
                String colorWinner="Jaune";
                if (this.game.getWinner().getColor().getCouleur()==Color.RED){
                    colorWinner="Rouge";
                }

AMOCA OKKES's avatar
AMOCA OKKES committed
                //Affichage du gagant
                this.jlGagnant.setText(this.game.getWinner().getNom()+" A GAGNÉ LA PARTIE !");
                this.jlGagnant.setForeground(this.game.getJoueurCourant().getColor().getCouleur());

AMOCA OKKES's avatar
AMOCA OKKES committed
                JOptionPane.showMessageDialog(this,
                        this.game.getWinner().getNom()+" ("+colorWinner+") A GAGNÉ LA PARTIE !");
AMOCA OKKES's avatar
AMOCA OKKES committed
                this.game.setWinner(null);
                this.game.getGrilleCourant().viderGrille();
AMOCA OKKES's avatar
AMOCA OKKES committed
            }
BARBI HUGO's avatar
BARBI HUGO committed
            this.majGrille();
        }
        else {
            System.out.println("Colonne rempli !");
        }

        //Test si la grille est pleine
        if(!this.game.getGrilleCourant().getCases()[0][this.game.getGrilleCourant().getNblignes()-1].estVide()){
            if(!this.game.getGrilleCourant().getCases()[1][this.game.getGrilleCourant().getNblignes()-1].estVide()){
                if(!this.game.getGrilleCourant().getCases()[2][this.game.getGrilleCourant().getNblignes()-1].estVide()){
                    if(!this.game.getGrilleCourant().getCases()[3][this.game.getGrilleCourant().getNblignes()-1].estVide()){
                        if(!this.game.getGrilleCourant().getCases()[4][this.game.getGrilleCourant().getNblignes()-1].estVide()){
                            if(!this.game.getGrilleCourant().getCases()[5][this.game.getGrilleCourant().getNblignes()-1].estVide()){
                                if(!this.game.getGrilleCourant().getCases()[6][this.game.getGrilleCourant().getNblignes()-1].estVide()){
                                    this.game.joueurSuivant();
                                    this.game.getGrilleCourant().viderGrille();
                                    JOptionPane.showMessageDialog(this, "EGALITÉ ! Nouvelle partie.");
                                    this.majGrille();
                                }
                            }
                        }
                    }
                }
            }
        }

        this.jlJoueur.setText("Tour du joueur : "+this.game.getJoueurCourant().getNom());
        this.jlJoueur.setForeground(this.game.getJoueurCourant().getColor().getCouleur());
BARBI HUGO's avatar
BARBI HUGO committed
    public void majGrille()
    {
        int nbLigne = this.game.getGrilleCourant().getNblignes();
        int nbColonne = this.game.getGrilleCourant().getNbColonnes();
        JPanel grille = (JPanel)((BorderLayout)this.getContentPane().getLayout()).getLayoutComponent(BorderLayout.CENTER);
        int but = 0;

        for (int i = nbLigne-1; i >= 0; i--)
        {
            for(int j = 0; j < nbColonne; j++)
            {
                if(this.game.getGrilleCourant().getCases()[j][i].estVide()) //Si la case est vide
                {
                    grille.getComponent(but).setBackground(Color.WHITE);
                    ((JLabel) grille.getComponent(but)).setOpaque(true);
                }
                else{
                    grille.getComponent(but).setBackground(this.game.getGrilleCourant().getCases()[j][i].getPion().getCouleur());
                    ((JLabel) grille.getComponent(but)).setOpaque(true);
                }
                but++;
            }
        }
    }
}