Package vues.solo

Source Code of vues.solo.Panel_ModeSolo

/*
  Copyright (C) 2010 Aurelien Da Campo
 
  This program is free software; you can redistribute it and/or modify
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 3 of the License, or
  (at your option) any later version.

  This program is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  GNU General Public License for more details.

  You should have received a copy of the GNU General Public License
  along with this program; if not, write to the Free Software
  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/

package vues.solo;

import i18n.Langue;

import java.awt.*;
import java.awt.event.*;
import java.io.File;

import javax.swing.*;
import javax.swing.border.EmptyBorder;

import vues.Fenetre_MenuPrincipal;
import vues.GestionnaireDesPolices;
import vues.LookInterface;
import vues.Panel_MenuPrincipal;
import vues.commun.Fenetre_HTML;

import exceptions.AucunePlaceDisponibleException;
import models.jeu.Jeu;
import models.jeu.Jeu_Solo;
import models.joueurs.Equipe;
import models.joueurs.Joueur;
import models.outils.Astuces;
import models.outils.GestionnaireSons;
import models.outils.MeilleursScores;
import models.outils.Outils;
import models.outils.Score;
import models.terrains.*;

/**
* Fenetre du menu principal du jeu.
* <p>
* Affiche un menu permettant au joueur de choisir
* sur quel terrain il veut jouer.
* <p>
* Les boutons des terrains ont ete fait completement statiques
* pour gagner un temps precieux.
*
* @author Aurelien Da Campo
* @version 1.0 | 15 decembre 2009
* @since jdk1.6.0_16
*/
public class Panel_ModeSolo extends JPanel implements ActionListener, Runnable
{
  // constantes statiques
    private static final long serialVersionUID   = 1L;
  private static final ImageIcon I_QUITTER   = new ImageIcon("img/icones/door_out.png");
  private static final ImageIcon I_AIDE     = new ImageIcon("img/icones/help.png");
  private static final ImageIcon I_SCORE      = new ImageIcon("img/icones/star.png");
  private static final int IMAGE_MENU_LARGEUR = 120;
  private static final int IMAGE_MENU_HAUTEUR = 120;
  private static final ImageIcon icoCADENAS      = new ImageIcon("img/icones/lock.png");
 
  private final int MARGES_PANEL                 = 40;
   

  // elements du formulaire
  JLabel lblTitre = new JLabel(Langue.getTexte(Langue.ID_TITRE_PARTIE_SOLO));
 
  private final JMenuItem itemAPropos        = new JMenuItem(Langue.getTexte(Langue.ID_TXT_BTN_A_PROPOS),I_AIDE);
  private final JMenuItem itemQuitter         = new JMenuItem(Langue.getTexte(Langue.ID_TXT_BTN_QUITTER),I_QUITTER);
 
  private final JMenuItem itemMSElementTD     = new JMenuItem(ElementTD.NOM);
    private final JMenuItem itemMSSpiral        = new JMenuItem(Spiral.NOM);
    private final JMenuItem itemMSDesert        = new JMenuItem(Desert.NOM);
    private final JMenuItem itemMSWaterWorld    = new JMenuItem(WaterWorld.NOM);
 
  private final JButton[] boutonsTerrains     = new JButton[4];
  private final JButton[] boutonsScore        = new JButton[4];
  private final JButton bRetour              = new JButton(Langue.getTexte(Langue.ID_TXT_BTN_RETOUR));
 
  private JProgressBar chargementTerrain;
  private Thread thread;
    private boolean chargementTermine;
  private JFrame parent;
 
  private JLabel lblInfo = new JLabel(Langue.getTexte(Langue.ID_TXT_CLIQUER_SUR_TERRAIN));

  /**
   * Constructeur de la fenetre du menu principal
   */
  public Panel_ModeSolo(JFrame parent)
  {
    //-------------------------------
    //-- preferances de le fenetre --
    //-------------------------------
      this.parent = parent;
      setLayout(new BorderLayout());
    parent.setTitle(Langue.getTexte(Langue.ID_TITRE_PARTIE_SOLO)+" - ASD Tower Defense");

    setBorder(new EmptyBorder(new Insets(MARGES_PANEL, MARGES_PANEL,
                MARGES_PANEL, MARGES_PANEL)));
   
    setBackground(LookInterface.COULEUR_DE_FOND_PRI);

    //--------------------------------------
        //-- chargement des scores et étoiles --
        //--------------------------------------
   
      String[] nomTerrains = new String[]{"ElementTD","Spiral","Desert","WaterWorld"};
        Score[] scoresMax    = new Score[4];
        MeilleursScores ms;
        int nbEtoiles = 0;
       
        for(int i=0; i < nomTerrains.length; i++)
        { 
            ms = new MeilleursScores(nomTerrains[i]);
           
            if(ms.getScores().size() > 0)
            {
                Score score = ms.getScores().get(0);
                nbEtoiles += score.getNbEtoiles();
                scoresMax[i] = score;
            }
            else
                scoresMax[i] = new Score(" ",0,0);
        }
   
   
    //----------------------------
        //-- création du formulaire --
        //----------------------------
   
    JPanel pFormulaire = new JPanel(new BorderLayout());
    pFormulaire.setOpaque(false);
   
   
    //------------------------------
        //-- titre + nombre d'étoiles --
        //------------------------------
    JPanel pNord = new JPanel(new BorderLayout());
    pNord.setOpaque(false);
   
    // titre
    lblTitre.setFont(GestionnaireDesPolices.POLICE_TITRE);
    lblTitre.setForeground(LookInterface.COULEUR_TEXTE_PRI);
    pNord.add(lblTitre,BorderLayout.WEST);
   
    // étoiles
    JPanel pNbEtoiles = new JPanel(new FlowLayout());
    pNbEtoiles.setOpaque(false);
   
    JLabel lblNbEtoiles = new JLabel(nbEtoiles+" x");
    lblNbEtoiles.setFont(GestionnaireDesPolices.POLICE_SOUS_TITRE);
    lblNbEtoiles.setForeground(LookInterface.COULEUR_TEXTE_PRI);
   
    pNbEtoiles.add(lblNbEtoiles);
    pNbEtoiles.add(new JLabel(I_SCORE));
    pNord.add(pNbEtoiles,BorderLayout.EAST);
   
        pFormulaire.add(pNord,BorderLayout.NORTH);
   
   
    //-----------------------------
    //-- chargement des terrains --
    //-----------------------------
   
    // attent que toutes les images soit complementements chargees
    MediaTracker tracker = new MediaTracker(this);
    tracker.addImage(ElementTD.IMAGE_MENU, 0);
    tracker.addImage(Spiral.IMAGE_MENU, 1);
    tracker.addImage(Desert.IMAGE_MENU, 2);
    tracker.addImage(WaterWorld.IMAGE_MENU, 3);
   
    try {
      tracker.waitForAll();
    }
    catch (InterruptedException e){
      e.printStackTrace();
    }
   
    // creation des boutons
    boutonsTerrains[0] = new JButton(new ImageIcon(
              Outils.redimentionner(ElementTD.IMAGE_MENU,
                  IMAGE_MENU_LARGEUR,IMAGE_MENU_HAUTEUR)));
   
    boutonsTerrains[1] = new JButton(new ImageIcon(
              Outils.redimentionner(Spiral.IMAGE_MENU,
                  IMAGE_MENU_LARGEUR,IMAGE_MENU_HAUTEUR)));
   
    boutonsTerrains[2] = new JButton(new ImageIcon(
              Outils.redimentionner(Desert.IMAGE_MENU,
                  IMAGE_MENU_LARGEUR,IMAGE_MENU_HAUTEUR)));
   
    boutonsTerrains[3] = new JButton(new ImageIcon(
              Outils.redimentionner(WaterWorld.IMAGE_MENU,
                  IMAGE_MENU_LARGEUR,IMAGE_MENU_HAUTEUR)));

    // ajout des boutons au panel et ajout des ecouteurs
    JPanel pBoutonsTerrains = new JPanel(new FlowLayout());
   
    pBoutonsTerrains.setBorder(new EmptyBorder(new Insets(60, 0, 0, 0)));
   
   
    pBoutonsTerrains.setOpaque(false);
   
    for(int i=0; i < boutonsTerrains.length; i++)
    {
        JButton bouton = boutonsTerrains[i];
        GestionnaireDesPolices.setStyle(bouton);
       
       
        JPanel pInfoTerrain = new JPanel(new BorderLayout());
        pInfoTerrain.setOpaque(false);
       
       
        bouton.addActionListener(this);
        pInfoTerrain.add(bouton,BorderLayout.NORTH);
       
        // recuperation du meilleur score
        Score score = scoresMax[i];
       
        pInfoTerrain.add(new Panel_Etoiles(score),BorderLayout.CENTER);
       
       
        if(score.getValeur() > 0)
        {
            String txt = score.getNomJoueur()+" - "+score.getValeur()+"";
       
            JButton bScore = new JButton(txt);
       
              boutonsScore[i] = bScore;
             
              GestionnaireDesPolices.setStyle(bScore);
              bScore.addActionListener(this);

              pInfoTerrain.add(bScore,BorderLayout.SOUTH);
        }
        else
        {
            JPanel tmp = new JPanel();
            tmp.setPreferredSize(new Dimension(1,30));
            tmp.setOpaque(false);
            pInfoTerrain.add(tmp,BorderLayout.SOUTH);
        }
        //-----------------------------------------
          //-- bloquage des terrains - progression --
          //-----------------------------------------
       
        if(i == 1 && nbEtoiles < 1)
        {
            bouton.setEnabled(false);
           
            JLabel lbl = new JLabel(Langue.getTexte(Langue.ID_TXT_1_ETOILE_MIN),icoCADENAS,0);
                lbl.setForeground(LookInterface.COULEUR_TEXTE_PRI);
           
            pInfoTerrain.add(lbl,BorderLayout.SOUTH);
        }
           
        if(i == 2 && nbEtoiles < 3)
        {
                bouton.setEnabled(false);
               
                JLabel lbl = new JLabel(String.format(Langue.getTexte(Langue.ID_TXT_X_ETOILES_MIN),3),icoCADENAS,0);
                lbl.setForeground(LookInterface.COULEUR_TEXTE_PRI);
               
            pInfoTerrain.add(lbl,BorderLayout.SOUTH);
        }
       
        if(i == 3 && nbEtoiles < 7)
        {
            bouton.setEnabled(false);
           
            JLabel lbl = new JLabel(String.format(Langue.getTexte(Langue.ID_TXT_X_ETOILES_MIN),7),icoCADENAS,0);
                lbl.setForeground(LookInterface.COULEUR_TEXTE_PRI);
               
                pInfoTerrain.add(lbl,BorderLayout.SOUTH);
        }

        // ajout au panel
        pBoutonsTerrains.add(pInfoTerrain);
    }

    JPanel pCentre = new JPanel(new BorderLayout());
    pCentre.setOpaque(false);
   
    pCentre.add(pBoutonsTerrains,BorderLayout.NORTH);
   
    JLabel lblAstuce = new JLabel("\""+Astuces.getAstuceAleatoirement()+"\"");
    lblAstuce.setFont(GestionnaireDesPolices.POLICE_SOUS_TITRE);
    lblAstuce.setForeground(LookInterface.COULEUR_TEXTE_PRI);
   
    JPanel pPourCentrer = new JPanel();
    pPourCentrer.setOpaque(false);
    pPourCentrer.add(lblAstuce);
    pPourCentrer.setBorder(new EmptyBorder(0, 0, 100, 0));
    pCentre.add(pPourCentrer,BorderLayout.SOUTH);
       
    pFormulaire.add(pCentre,BorderLayout.CENTER);
   
   
   
      //-------------------
        //-- bouton retour --
        //-------------------
   
    JPanel pFond = new JPanel(new BorderLayout());
   
   
   
   
    pFond.setOpaque(false);
    pFond.setBorder(new EmptyBorder(0, 0, 0, 100));
   
   
    bRetour.addActionListener(this);
    bRetour.setPreferredSize(new Dimension(80,50));
    GestionnaireDesPolices.setStyle(bRetour);
    pFond.add(bRetour,BorderLayout.WEST);
        pFormulaire.add(pFond,BorderLayout.SOUTH);


        lblInfo.setFont(GestionnaireDesPolices.POLICE_INFO);
        //lblInfo.setForeground(GestionnaireDesPolices.COULEUR_INFO);
        lblInfo.setForeground(LookInterface.COULEUR_TEXTE_PRI);
       
        pFond.add(lblInfo,BorderLayout.EAST);
       
    add(pFormulaire,BorderLayout.CENTER);
  }

    /**
     * Gestionnaire des evenements.
     * <p>
     * Cette methode est appelee en cas d'evenement
     * sur un objet ecouteur de ActionListener
     *
     * @param ae l'evenement associe
     */
  public void actionPerformed(ActionEvent ae)
  {
    Object source = ae.getSource();
   
    // quitter
    if(source == itemQuitter)
      System.exit(0); // Fermeture correcte du logiciel
   
    // a propos
    else if(source == itemAPropos)
        new Fenetre_HTML(Langue.getTexte(Langue.ID_TXT_BTN_A_PROPOS), new File(Langue.getTexte(Langue.ID_ADRESSE_A_PROPOS)),parent);
   
    // les terrains
    else if(source == boutonsTerrains[0])
    {
        Jeu jeu = new Jeu_Solo();
        lancerJeu(jeu, new ElementTD(jeu));
    }
    else if(source == boutonsTerrains[1])
    {
        Jeu jeu = new Jeu_Solo();
            lancerJeu(jeu, new Spiral(jeu));
    }
    else if(source == boutonsTerrains[2])
    {
        Jeu jeu = new Jeu_Solo();
        lancerJeu(jeu, new Desert(jeu));
    }
    else if(source == boutonsTerrains[3])
    {
        Jeu jeu = new Jeu_Solo();
        lancerJeu(jeu, new WaterWorld(jeu));
    }
    else if(source == itemMSElementTD)
        new Fenetre_MeilleursScores(ElementTD.NOM, parent);
    else if(source == itemMSSpiral)
            new Fenetre_MeilleursScores(Spiral.NOM, parent);
    else if(source == itemMSDesert)
            new Fenetre_MeilleursScores(Desert.NOM, parent);
    else if(source == itemMSWaterWorld)
            new Fenetre_MeilleursScores(WaterWorld.NOM, parent);
    else if(source == bRetour)
    {
        parent.getContentPane().removeAll();
            parent.getContentPane().add(new Panel_MenuPrincipal(parent),
                    BorderLayout.CENTER);
            parent.getContentPane().validate();
    }
    else if(source == boutonsScore[0])
            new Fenetre_MeilleursScores("ElementTD", parent);   
        else if(source == boutonsScore[1])
            new Fenetre_MeilleursScores("Spiral", parent);
        else if(source == boutonsScore[2])
            new Fenetre_MeilleursScores("Desert", parent);
        else if(source == boutonsScore[3])
            new Fenetre_MeilleursScores("WaterWorld", parent);  
  }

  /**
   * Permet de lancer un jeu.
   *
   * Elle créer les équipes pour un jeu solo
   *
   * @param jeu le jeu
   * @param terrain le terrain
   */
    private void lancerJeu(Jeu jeu, Terrain terrain)
    {
        GestionnaireSons.arreterTousLesSons(Fenetre_MenuPrincipal.FICHIER_MUSIQUE_MENU);
       
        actionnerBarreDeChargement();
       
        terrain.initialiser();
        jeu.setTerrain(terrain);
        Equipe equipe = jeu.getEquipes().get(0); // les equipes sont créer par le terrain
        Joueur joueur = new Joueur("Joueur");
       
        try{
            equipe.ajouterJoueur(joueur);
        }
        catch (AucunePlaceDisponibleException e){
            e.printStackTrace();
        }
       
        jeu.setJoueurPrincipal(joueur);
        jeu.initialiser();
        new Fenetre_JeuSolo(jeu);
       
        chargementTermine = true;
        parent.dispose();
    }

    synchronized private void actionnerBarreDeChargement()
    { 
        thread = new Thread(this);
        thread.start();  
    }

    @Override
    public void run()
    {
       /* version.setText("   CHARGEMENT DE LA CARTE");
        version.setForeground(Color.BLACK);*/
        chargementTerrain = new JProgressBar();
        add(chargementTerrain,BorderLayout.SOUTH);
        validate();
       
        int pourcent = 0;
       
        while(!chargementTermine)
        {
            pourcent = (pourcent+2)%100;
    
            chargementTerrain.setValue(pourcent);
            // TODO EXCEPTION ICI java.lang.ClassCastException
            //chargementTerrain.paintImmediately(0,0,1000,200);
           
            try{
                Thread.sleep(10);
            }
            catch (InterruptedException e){
                e.printStackTrace();
            }
        }
    }
}
TOP

Related Classes of vues.solo.Panel_ModeSolo

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.