Partage
  • Partager sur Facebook
  • Partager sur Twitter

[ActionListener] Entre plusieurs classes ?

    22 février 2012 à 0:28:03

    Bonjour à tous, voilà, je me perds un petit peu. Je suis en train de créer un pendu en Java, et jusqu'à présent tout va bien, j'ai créé ces classes :
    - Une classe Pendu qui contient le déroulement classique d'une partie (récupération d'un mot dans un dictionnaire .txt, évolution de la partie et du score),
    - Une classe Mot qui est un simple mot à trouver,
    - Une classe Clavier qui consiste en un clavier virtuel de boutons,
    - Et une classe Bouton qui justement sont des boutons de A à Z qui se désactivent après le clic dessus. Chaque clic sur un bouton est censé faire évoluer la partie, en testant la lettre dans le mot en cours.

    Seulement je suis perdu au niveau de l'ActionListener. J'ai un peu de mal à visualiser où je dois le placer. Je suppose que c'est dans la classe Bouton, mais dans ce cas comment interagir avec Clavier et Pendu ? Voici mon code actuel :

    (note : pour le moment, je travaille ça en console, mais je veux pouvoir rendre le tout graphique, et récupérer la lettre non pas par une entrée clavier mais par ce clavier virtuel est la première étape.)

    package util;
    
    import java.io.BufferedReader;
    import java.io.FileNotFoundException;
    import java.io.FileReader;
    import java.io.IOException;
    import java.util.Scanner;
    
    /*********************
     * Ce pendu consiste en une partie où le joueur doit trouver 10 mots.
     * 
     */
    
    public class Pendu
    {
    	private BufferedReader br;
    	private Mot listeMot [] = new Mot [10];
    	private String [] motCache = new String [10];
    	private boolean [] tabBooleen = new boolean [26];
    	private boolean gagne = false;
    	private char lettreTest;
    	private int score = 0, tentativesRestantes, scoreTemp;
    	private int [] tabScores = {1,3,3,2,1,4,2,4,1,8,10,1,2,1,1,3,8,1,1,1,1,4,10,10,10,10};
    	private Clavier clavier = new Clavier();
    
    	public Pendu()
    	{
    		clavier.afficherClavier();
    		int nombreMots = 0;
    		try
    		{
    			br = new BufferedReader(new FileReader("liste.txt"));
    			while(br.ready() == true)
    			{
    				br.readLine();
    				nombreMots++;
    			}
    			br.close();
    		}
    		catch (FileNotFoundException e) {}
    		catch (IOException e) {}
    
    		for(int i = 0 ; i < 10 ; i++)
    		{
    			int choix = ((int) (Math.random() * nombreMots) - 1), j = 0;
    			motCache[i] = "";
    			try
    			{
    				br = new BufferedReader(new FileReader("liste.txt"));
    				while(br.ready() == true && j <= choix)
    				{
    					if(j == choix) listeMot[i] = new Mot(br.readLine());
    					else br.readLine();
    					j++;
    				}
    			}
    			catch (FileNotFoundException e) {e.printStackTrace();}
    			catch (IOException e) {e.printStackTrace();}
    			for(int k = 0 ; k < listeMot[i].getNom().length() ; k++) 
    				if(k == 0 || listeMot[i].getNom().charAt(k) == '-') motCache[i] += listeMot[i].getNom().charAt(k);
    				else motCache[i] += "_";
    		} // On a récupéré 10 mots dans la liste listeMot
    
    		for(int i = 0 ; i < tabBooleen.length ; i++) tabBooleen[i] = false;
    
    		for(int partieEnCours = 0 ; partieEnCours < 10 ; partieEnCours++)
    		{
    			tentativesRestantes = 9; gagne = false; scoreTemp = 0;
    			System.out.println("\nC'est parti pour la partie " + (partieEnCours + 1) + "\n");
    			while(tentativesRestantes > 0 && !gagne)
    			{
    				lettreTest = essaiLettre(tentativesRestantes, motCache[partieEnCours]);
    
    
    
    				char car = Character.toUpperCase(lettreTest);
    				int index = car - 65;
    
    				tabBooleen[index] = true;
    				/**************/
    				if(letterInTheWord(index, motCache[partieEnCours], listeMot[partieEnCours].getNom()))
    				{
    					char car2 = (char) (index + 65);
    					scoreTemp += tabScores[index] * tentativesRestantes;
    					for(int i = 0 ; i < motCache[partieEnCours].length() ; i++)
    					{
    						if(car2 == listeMot[partieEnCours].getNom().charAt(i)) motCache[partieEnCours] = replaceCharAt(motCache[partieEnCours], i, car2);
    					}
    					if(completeWord(motCache[partieEnCours])) gagne = true;
    				}
    				else
    				{
    					tentativesRestantes--;
    					char car2 = (char) (index + 65);
    					System.out.println("La lettre " + car2 + " n'est pas dans le mot !");
    				}
    			}
    			if(tentativesRestantes < 1)
    			{
    				score -= 100;
    				if(score < 0) score = 0;
    				System.out.println("Perdu ! Le mot à trouver était : " + listeMot[partieEnCours].getNom() + ".\nVotre score actuel : " + score + " points.\n");
    			}
    			if(gagne)
    			{
    				score += scoreTemp;
    				System.out.println("Gagné ! Vous avez trouvé le mot " + listeMot[partieEnCours].getNom() + " !\nVotre score actuel : " + score + " points.\n");
    			}
    		}
    		System.out.println("Partie terminée ! Score final : " + score + " points.");
    	}
    
    	public boolean completeWord(String nom)
    	{
    		for(int i = 0 ; i < nom.length() ; i++)
    		{
    			if(nom.charAt(i) == '_') return false;
    		}
    		return true;
    	}
    
    	public boolean letterInTheWord(int index, String string, String mot)
    	{
    		char car = (char) (index + 65);
    		for(int i = 0 ; i < string.length() ; i++)
    		{
    			if(car == mot.charAt(i))
    			{
    				System.out.println("La lettre " + car + " est dans le mot !");
    				return true;
    			}
    		}
    		return false;
    	}
    
    	public char essaiLettre(int tries, String word)
    	{
    		String letter;
    		Scanner sc = new Scanner(System.in);
    		if(tries != 1)
    		{
    			System.out.println("Il vous reste " + tries + " coups à jouer.\nMot secret : " + word + "\nProposez une lettre...  ");
    		}
    		else
    		{
    			System.out.println("Il vous reste " + tries + " coup à jouer.\nMot secret : " + word + "\nProposez une lettre...  ");
    		}
    		letter = sc.nextLine();
    		System.out.println();
    		return letter.charAt(0);
    	} 
    
    	public static String replaceCharAt(String s, int pos, char c) 
    	{
    		return s.substring(0,pos) + c + s.substring(pos+1);
    	}
    }
    


    package util;
    import java.awt.Color;
    import javax.swing.JFrame;
    
    public class Clavier extends JFrame
    {
    	private static final long serialVersionUID = 1L;
    	Bouton bouton [] = new Bouton [26];
    	int n;
    	
        public Clavier()
        {
        	super();
        }
        
        public void afficherClavier()
        {
        	for(int i = 0 ; i < 26 ; i++)
        	{
        		bouton[i] = new Bouton(i);
        		this.getContentPane().add(bouton[i]);
        	}
        	this.getContentPane().setLayout(null);
        	this.setTitle("Clavier de saisie");
        	this.setBounds(55,480,610,240);
        	this.getContentPane().setBackground(Color.LIGHT_GRAY);
        	this.setDefaultCloseOperation(EXIT_ON_CLOSE);
        	this.setVisible(true);	
        }
    
    	public void setValeur(int n2)
        {
    		this.n = n2;
        }
    	
    	public int getValeur()
    	{
    		return this.n;
    	}
    }
    


    package util;
    
    public class Partie
    {
    	public static void main(String [] args)
        {
    	    new Pendu();
        }
    }
    


    package util;
    
    public class Mot
    {
    	String nom;
    	
    	public Mot(String nom)
        {
    		this.nom = nom;
        }
    	
    	public String getNom() { return nom; } 
    	public void setNom(String nom) { this.nom = nom; } 
    }
    


    package util;
    import java.awt.Color;
    import java.awt.Font;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import javax.swing.JButton;
    
    
    public class Bouton extends JButton implements ActionListener
    {
    	private static final long serialVersionUID = 1L;
    	private int n;
    	
        public Bouton(int n)
        {
        	super();
        	this.setN(n);
        	this.setText(((char)(n+65))+"");
        	this.setFont(new Font("Georgia", 1, 12));
        	this.setBackground(Color.WHITE);
        	this.setForeground(Color.BLACK);
        	if(n<9)
        		this.setBounds((10+((n%9)*65)), 10, 60, 60);
        	else if(n<18)
        		this.setBounds((10+((n%9)*65)), 75, 60, 60);
        	else
        		this.setBounds((10+((n%9)*65)), 140, 60, 60);
        	this.addActionListener(this);
        }
    
    	public int getN()
        {
    	    return n;
        }
    
    	public void setN(int n)
        {
    	    this.n = n;
        }
    
        public void actionPerformed(ActionEvent e)
        {
        	this.setBackground(Color.LIGHT_GRAY);
        	this.setEnabled(false);
        }
    }
    


    PS : mon fichier texte contient plusieurs milliers d'entrées, donc je ne vais évidemment pas le transmettre ici, mais il s'agit d'un bête fichier texte avec une liste de mots en majuscules et sans accents, séparés par un retour à la ligne.
    • Partager sur Facebook
    • Partager sur Twitter

    [ActionListener] Entre plusieurs classes ?

    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
    • Editeur
    • Markdown