import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Desktop;
import java.awt.FlowLayout;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
import javax.swing.border.TitledBorder;
public class FenetreAccueil extends JFrame implements Vue {
private static final long serialVersionUID = 1L;
//
//Barre de menu
//Contenu de la fenetre
private JTextField login = new JTextField(10);
private JPasswordField mdp = new JPasswordField(10);
private JButton connec = new JButton("Se connecter");
private JButton visiter = new JButton("Visite le site du jeu !");
private JLabel info = new JLabel();
private JButton quitter = new JButton("Quitter le jeu");
private JButton inscription = new JButton("S'inscrire");
private JButton apropos = new JButton("A propos...");
/**
* Creation de la fen�tre d'accueil
*/
public FenetreAccueil()
{
// IMPOSSIBLE DE LANCER LE JEU
if (!estExecutable())
{
JOptionPane.showMessageDialog(null, "Fichiers internes introuvables !");
System.exit(0); // on quitte
}
build();
}
/**
* Teste si il manque au moins un fichier dans la base embarquee
* @return
*/
public boolean estExecutable()
{
return new File(".fichiers/joueur").exists()
&& new File(".fichiers/niveau").exists()
&& new File(".fichiers/termine").exists();
}
public void build()
{
this.setTitle("Jeu - Wallcat"); /* Titre de la fen�tre */
this.setSize(750, 200); /* Largeur et hauteur */
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); /* Click sur la croix rouge */
this.setResizable(false); /* Non redimensionnable */
this.setLocationRelativeTo(null); /* Apparait au centre de l'�cran */
buildContentPane(); /* Construit le panel */
doAllActions(); /* Affecte toutes les actions */
setVisible(true); /* Devient visible */
}
/**
* Construction du panel
*/
public void buildContentPane()
{
/* On affecte un layout de type BorderLayout*/
/* Ce layout permet de placer des composants
� des points cardinaux pr�cis
*/
/* NORTH, WEST, EAST, SOUTH ou CENTER */
getContentPane().setLayout(new BorderLayout());
/* Formulaire de connexion centrale */
buildFormulaire();
/* Panel d'actions � l'est */
buildActions();
}
/**
* Construction du contenu central
*/
public void buildFormulaire()
{
JPanel formulaire = new JPanel(new FlowLayout(FlowLayout.LEFT));
formulaire.add(new JLabel("Pseudo"));
formulaire.add(login);
formulaire.add(new JLabel("Mot de passe"));
formulaire.add(mdp);
formulaire.add(connec);
formulaire.add(new JLabel("Pas encore inscrit ?"));
formulaire.add(inscription);
formulaire.add(visiter);
formulaire.add(info);
info.setOpaque(true); // le rend opaque pour pouvoir changer sa couleur
info.setForeground(Color.RED);
formulaire.setBorder(BorderFactory.createTitledBorder(null,"",TitledBorder.DEFAULT_POSITION, TitledBorder.LEFT));
getContentPane().add(formulaire,BorderLayout.CENTER);
getContentPane().add(new JLabel("<html><b>WallCat tous droits reserves</b></html>"),BorderLayout.SOUTH);
}
public void buildActions()
{
Box action = Box.createVerticalBox();
action.add(quitter);
action.add(apropos);
action.setBorder(new TitledBorder(null,null,TitledBorder.CENTER,TitledBorder.DEFAULT_POSITION));
getContentPane().add(action,BorderLayout.EAST);
}
/**
* Verifie si le pseudo appartient � un joueru
* @param pseudo
* @return
*/
public boolean bonPseudo(final String pseudo)
{
for (Joueur j : PlayerFactory.getAllJoueurs())
{
if (j.getPseudo().equals(pseudo.toLowerCase()))
return true;
}
return false;
}
public static String getEncodedPassword(final String key) {
byte[] uniqueKey = key.getBytes();
byte[] hash = null;
try {
hash = MessageDigest.getInstance("MD5").digest(uniqueKey);
} catch (NoSuchAlgorithmException e) {
JOptionPane.showMessageDialog(null,
"Encodement non supporte par votre systeme",
"Erreur",
JOptionPane.ERROR_MESSAGE);
}
StringBuffer hashString = new StringBuffer();
for ( int i = 0; i < hash.length; ++i ) {
String hex = Integer.toHexString(hash[i]);
if ( hex.length() == 1 ) {
hashString.append('0');
hashString.append(hex.charAt(hex.length()-1));
} else {
hashString.append(hex.substring(hex.length()-2));
}
}
return hashString.toString();
}
public String getInformationsJoueur(String pseudo)
{
BufferedReader reader = null;
String ligne;
try {
reader = new BufferedReader(new FileReader(new File(".fichiers/joueur")));
ligne = reader.readLine();
while (ligne != null)
{
if (ligne.startsWith(pseudo.toLowerCase()))
{
return ligne;
}
ligne = reader.readLine();
}
reader.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
JOptionPane.showMessageDialog(null, "Erreur dans la lecture du fichier","Erreur",
JOptionPane.ERROR_MESSAGE);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
/**
* Retourne vrai si le mot de passe du pseudo login correspondant au mot de passe donn� en param�tre
* @param login
* @param mot
* @return
*/
public boolean verifieMotDePasse(final String login, final String mot)
{
return getEncodedPassword(mot).equals(this.getInformationsJoueur(login.toLowerCase()).split(",")[1]);
}
/**
* Ajout de toutes les actions dans les boutons du panel
*/
public void doAllActions()
{
// listener pour se connecter
connec.addActionListener(new ActionConnection());
// listener pour visiter le site web
visiter.addActionListener(new ActionVisiter());
// listener pour quitter le jeu
quitter.addActionListener(new ActionQuitter());
// listener qui affiche une pop-up avec un mot pour les joueurs
apropos.addActionListener(new ActionAPropos());
// listener qui ouvre le formulaire d'inscription
inscription.addActionListener(new ActionInscription());
}
/**
* Se connecte au jeu
*/
public void connection()
{
// si il a oubli� un champ...
if (login.getText().isEmpty()||mdp.getPassword().length==0)
{
JOptionPane.showMessageDialog(null, "Vous avez oublie un champ","Erreur",JOptionPane.ERROR_MESSAGE);
return;
}
// verification des mots de passe
if (!bonPseudo(login.getText())||!verifieMotDePasse(login.getText(), new String(mdp.getPassword())))
{
info.setText("Le pseudo ou le mot de passe ne correspondent pas !");
}
else
{
dispose();
new FenetrePanelCompte(PlayerFactory.getJoueur(login.getText()));
}
}
private class ActionConnection implements ActionListener
{
@Override
public void actionPerformed(ActionEvent arg0) {
connection();
}
}
public void erreurOuvertureBrower()
{
JOptionPane.showMessageDialog(null, "Une erreur s'est produite lors de l'ouverture du navigateur !","Erreur",JOptionPane.ERROR_MESSAGE);
return;
}
private class ActionVisiter implements ActionListener
{
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
// ouvrir le site web sur le navigateur par d�faut
if ( Desktop.isDesktopSupported() ) {
// On r�cup�re l'instance du desktop :
Desktop desktop = Desktop.getDesktop();
// On v�rifie que la fonction browse est bien support�e :
if (desktop.isSupported(Desktop.Action.BROWSE)) {
// Et on lance l'application associ� au protocole :
try {
desktop.browse(new URI("http://www.wallcat-lejeu.com"));
} catch (IOException e1) {
// TODO Auto-generated catch block
erreurOuvertureBrower();
} catch (URISyntaxException e1) {
// TODO Auto-generated catch block
erreurOuvertureBrower();
}
}
else
{
JOptionPane.showMessageDialog(null,
"Votre syst�me ne supporte pas l'ouverture",
"Erreur",
JOptionPane.ERROR_MESSAGE);
}
}
}
}
private class ActionQuitter implements ActionListener
{
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
int res = JOptionPane.showConfirmDialog(null,
"Voulez-vous vraiment quitter ?","Confirmation",
JOptionPane.YES_NO_OPTION);
if (res == JOptionPane.YES_OPTION)
{
dispose();
System.exit(0);
}
}
}
private class ActionInscription implements ActionListener
{
@Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
new FenetreInscription();
}
}
private class ActionAPropos implements ActionListener
{
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
JOptionPane.showMessageDialog(null, "<html>" +
"Ce jeu a ete realise par 2 personnes actuellement en stage de fin de diplome<br>" +
"Il a pour but de vous faire reflechir et de vous montrer nos competences<br>" +
"Il a ete realise par : <ul>" +
"<li>Mathieu Freville</li>" +
"<li>Baptiste Quide</li>" +
"</ul>" +
"Le principe est simple : il vous suffit de pousser les tapettes en direction des souris.<br>" +
"Attention, vous devez attraper toutes les souris ! Soyez inventif...<br>" +
"Enjoy ! </html>","A propos",JOptionPane.INFORMATION_MESSAGE);
}
}
}