Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème de Thread

Sujet résolu
Anonyme
    9 octobre 2011 à 12:09:53

    Bonjour bonjour,
    je créé un jeu et j'ai un léger(gros) problème avec mes thread , je créé un thread pour chaque monstre qui au bout d'un certain temps les fait ce déplacer , lors du changement d'image, tout les monstres prennent la meme image et lorsque l'un meurt , il meurent tous , dois-je vous donner mon code complet ?
    voici les classes intéréssée :
    RunLanguide.java
    package ThreadObjetMap;
    
    import GUI.*;
    import ObjetMap.*;
    import Level.*;
    
    public class RunLanguide implements Runnable{
    	private int i;
    	private int j;
    	private int m = 0;
    	private boolean deplacement = false;
    	private String derPosition = "";
    	private Fenetre fen;
    	private Thread t1;
    	public RunLanguide(int i1, int j1, Fenetre fen){
    		i = i1;
    		j= j1;
    		System.out.println(i+"-"+j);
    		this.fen = fen;
    	}
    	public boolean depGauche(){
    		if(fen.getPanJeu().getCarte().getCase()[i - 1][j].getOm(2).isWalkable()){
    			m = 0;
    			/*while(m < 17){
    				fen.getPanJeu().repaint();
    				if(fen.getPanJeu().getCarte().getCase()[i - 1][j].getOm(2).isWalkable()){
    				m++;
    				}
    				try {
    					Thread.sleep(3);
    				} catch (InterruptedException e) {
    					// TODO Auto-generated catch block
    					e.printStackTrace();
    				}
    						fen.getPanJeu().getCarte().getCase()[i][j].getOm(2).setDecalageX(-m * 2);
    			}*/
    			if(fen.getPanJeu().getCarte().getCase()[i - 1][j].getOm(2).isWalkable()){
    				fen.getPanJeu().getCarte().getCase()[i][j].getOm(2).getImg().set(0,"Monstres/Languide/gauche/pos1.png");
    				fen.getPanJeu().getCarte().getCase()[i - 1][j].setOm(fen.getPanJeu().getCarte().getCase()[i][j].getOm(2), 2);
    				System.out.println(fen.getPanJeu().getCarte().getCase()[i][j].getOm(2).isDeplacement());
    				fen.getPanJeu().getCarte().getCase()[i][j].setOm(new Air(), 2);
    				i = i - 1;
    				deplacement = true;
    				derPosition = "droite";
    				fen.getPanJeu().getCarte().getCase()[i][j].getOm(2).setDecalageX(0);
    				fen.getPanJeu().getCarte().getCase()[i][j].getOm(2).setDecalageY(0);
    			}
    			return true;
    		}
    		return false;
    	}
    	public boolean depDroite(){
    		if(fen.getPanJeu().getCarte().getCase()[i + 1][j].getOm(2).isWalkable()){
    			m = 0;
    			/*while(m < 17){
    				fen.getPanJeu().repaint();
    				if(fen.getPanJeu().getCarte().getCase()[i + 1][j].getOm(2).isWalkable()){
    				m++;
    				}
    				try {
    					Thread.sleep(3);
    				} catch (InterruptedException e) {
    					// TODO Auto-generated catch block
    					e.printStackTrace();
    				}
    						fen.getPanJeu().getCarte().getCase()[i][j].getOm(2).setDecalageX(m * 2);
    			}*/
    			if(fen.getPanJeu().getCarte().getCase()[i + 1][j].getOm(2).isWalkable()){
    				fen.getPanJeu().getCarte().getCase()[i][j].getOm(2).getImg().set(0,"Monstres/Languide/droite/pos1.png");
    				fen.getPanJeu().getCarte().getCase()[i + 1][j].setOm(fen.getPanJeu().getCarte().getCase()[i][j].getOm(2), 2);
    				System.out.println(fen.getPanJeu().getCarte().getCase()[i][j].getOm(2).isDeplacement());
    				fen.getPanJeu().getCarte().getCase()[i][j].setOm(new Air(), 2);
    				i = i + 1;
    				deplacement = true;
    				derPosition = "gauche";
    				fen.getPanJeu().getCarte().getCase()[i][j].getOm(2).setDecalageX(0);
    				fen.getPanJeu().getCarte().getCase()[i][j].getOm(2).setDecalageY(0);
    			}
    			return true;
    		}
    		return false;
    	}
    	public boolean depHaut(){
    		if(fen.getPanJeu().getCarte().getCase()[i][j - 1].getOm(2).isWalkable()){
    			m = 0;
    			/*while(m < 17){
    				fen.getPanJeu().repaint();
    				if(fen.getPanJeu().getCarte().getCase()[i][j - 1].getOm(2).isWalkable()){
    				m++;
    				}
    				try {
    					Thread.sleep(3);
    				} catch (InterruptedException e) {
    					// TODO Auto-generated catch block
    					e.printStackTrace();
    				}
    						fen.getPanJeu().getCarte().getCase()[i][j].getOm(2).setDecalageY(-m * 2);
    			}*/
    			if(fen.getPanJeu().getCarte().getCase()[i][j - 1].getOm(2).isWalkable()){
    				fen.getPanJeu().getCarte().getCase()[i][j].getOm(2).getImg().set(0,"Monstres/Languide/haut/pos1.png");
    				fen.getPanJeu().getCarte().getCase()[i][j - 1].setOm(fen.getPanJeu().getCarte().getCase()[i][j].getOm(2), 2);
    				System.out.println(fen.getPanJeu().getCarte().getCase()[i][j].getOm(2).isDeplacement());
    				fen.getPanJeu().getCarte().getCase()[i][j].setOm(new Air(), 2);
    				j = j - 1;
    				deplacement = true;
    				derPosition = "bas";
    				fen.getPanJeu().getCarte().getCase()[i][j].getOm(2).setDecalageX(0);
    				fen.getPanJeu().getCarte().getCase()[i][j].getOm(2).setDecalageY(0);
    			}
    			return true;
    		}
    		return false;
    	}
    	public boolean depBas(){
    		if(fen.getPanJeu().getCarte().getCase()[i][j + 1].getOm(2).isWalkable()){
    			m = 0;
    			/*while(m < 17){
    				fen.getPanJeu().repaint();
    				if(fen.getPanJeu().getCarte().getCase()[i][j + 1].getOm(2).isWalkable()){
    				m++;
    				}
    				try {
    					Thread.sleep(3);
    				} catch (InterruptedException e) {
    					// TODO Auto-generated catch block
    					e.printStackTrace();
    				}
    						fen.getPanJeu().getCarte().getCase()[i][j].getOm(2).setDecalageY(m * 2);
    			}*/
    			if(fen.getPanJeu().getCarte().getCase()[i][j + 1].getOm(2).isWalkable()){
    				fen.getPanJeu().getCarte().getCase()[i][j].getOm(2).getImg().set(0,"Monstres/Languide/bas/pos1.png");
    			fen.getPanJeu().getCarte().getCase()[i][j + 1].setOm(fen.getPanJeu().getCarte().getCase()[i][j].getOm(2), 2);
    			System.out.println(fen.getPanJeu().getCarte().getCase()[i][j].getOm(2).isDeplacement());
    			fen.getPanJeu().getCarte().getCase()[i][j].setOm(new Air(), 2);
    			j = j + 1;
    			deplacement = true;
    			derPosition = "haut";
    			fen.getPanJeu().getCarte().getCase()[i][j].getOm(2).setDecalageX(0);
    			fen.getPanJeu().getCarte().getCase()[i][j].getOm(2).setDecalageY(0);
    			}
    			
    			return true;
    		}
    		return false;
    	}
    	public void run() {
    		//Tant que j'ai des vie je ne meurs pas
    		while(fen.isJouer() && fen.getPanJeu().getCarte().getCase()[i][j].getOm(2).getVie() > 0){	
    			try {
    				Thread.sleep(550);
    				//Attaque languide
    				
    				
    				deplacement = false;
    				if(i + 1 == fen.getPanJeu().getCarte().posX && j == fen.getPanJeu().getCarte().posY && !fen.getPanJeu().getCarte().getCase()[i][j].getOm(2).isAttq()){
    					t1 = new Thread(new RunAttqLanguide(1, i, j, fen));	
    					t1.start();
    					fen.getPanJeu().getCarte().getCase()[i][j].getOm(2).setAttq(true);
    				}
    				if(i - 1 == fen.getPanJeu().getCarte().posX && j == fen.getPanJeu().getCarte().posY && !fen.getPanJeu().getCarte().getCase()[i][j].getOm(2).isAttq()){
    					t1 = new Thread(new RunAttqLanguide(0, i, j, fen));
    					t1.start();
    					fen.getPanJeu().getCarte().getCase()[i][j].getOm(2).setAttq(true);
    				}
    				if(j - 1 == fen.getPanJeu().getCarte().posY && i == fen.getPanJeu().getCarte().posX && !fen.getPanJeu().getCarte().getCase()[i][j].getOm(2).isAttq()){
    					t1 = new Thread(new RunAttqLanguide(2, i, j, fen));
    					t1.start();
    					fen.getPanJeu().getCarte().getCase()[i][j].getOm(2).setAttq(true);
    				}
    				if(j + 1 == fen.getPanJeu().getCarte().posY && i == fen.getPanJeu().getCarte().posX && !fen.getPanJeu().getCarte().getCase()[i][j].getOm(2).isAttq()){
    					t1 = new Thread(new RunAttqLanguide(3, i, j, fen));
    					t1.start();
    					fen.getPanJeu().getCarte().getCase()[i][j].getOm(2).setAttq(true);
    				}
    				//Algorithme de déplacement
    				deplacement = false;
    				while(!deplacement && !fen.getPanJeu().getCarte().getCase()[i][j].getOm(2).isAttq())
    				{
    					if(fen.getPanJeu().getCarte().posX  > i && i < fen.getPanJeu().getCarte().getNB_BLOCS_LARGEUR() - 1 && !derPosition.equals("droite")){
    						if(!depDroite())
    						{
    							if(fen.getPanJeu().getCarte().posY > j && j < fen.getPanJeu().getCarte().getNB_BLOCS_LARGEUR() - 1 && !derPosition.equals("bas")){
    								if(!depBas()&& !derPosition.equals("gauche")){
    									depGauche();
    								}		
    							}
    							else if(!derPosition.equals("haut"))
    							{
    								if(!depHaut() && !derPosition.equals("gauche")){
    									depGauche();
    								}
    							}
    						}
    					}
    					else if(fen.getPanJeu().getCarte().posX < i && i > 0 && !derPosition.equals("gauche")){
    						if(!depGauche())
    						{
    							if(fen.getPanJeu().getCarte().posY > j && j < fen.getPanJeu().getCarte().getNB_BLOCS_LARGEUR() - 1 && !derPosition.equals("bas")){
    								if(!depBas() && !derPosition.equals("gauche")){
    									depGauche();
    								}		
    							}
    							else if(!derPosition.equals("haut"))
    							{
    								if(!depHaut() && !derPosition.equals("droite")){
    									depDroite();
    								}
    							}
    						}
    					}		
    					else if(fen.getPanJeu().getCarte().posY > j && j < fen.getPanJeu().getCarte().getNB_BLOCS_LARGEUR() - 1 && !derPosition.equals("bas")){
    						if(!depBas())
    						{
    							if(fen.getPanJeu().getCarte().posX  > i && i < fen.getPanJeu().getCarte().getNB_BLOCS_LARGEUR() - 1 && !derPosition.equals("gauche")){
    								if(!depGauche() && !derPosition.equals("haut")){
    									depHaut();
    								}		
    							}   
    							else if(!derPosition.equals("droite")){
    								if(!depDroite() && !derPosition.equals("haut")){
    									depHaut();
    								}
    							}
    							
    						}
    					}
    					else if(fen.getPanJeu().getCarte().posY < j && j > 0 && !derPosition.equals("haut")){
    						if(!depHaut())
    						{
    							if(fen.getPanJeu().getCarte().posX  > i && i < fen.getPanJeu().getCarte().getNB_BLOCS_LARGEUR() - 1 && !derPosition.equals("gauche")){
    								if(!depGauche() && !derPosition.equals("bas")){
    									depBas();
    								}		
    							}   
    							else if(!derPosition.equals("droite")){
    								if(!depDroite() && !derPosition.equals("bas")){
    									depBas();
    								}
    							}
    							
    						}
    					}
    				}
    				if(!fen.isBougerPerso)
    				{
    					fen.getPanJeu().repaint();
    				}
    				
    			} catch (InterruptedException e) {
    				e.printStackTrace();
    			}
    		}
    		if(fen.getPanJeu().getCarte().getCase()[i][j].getOm(2).getVie() <= 0)
    		{
    			fen.getPanJeu().getCarte().getCase()[i][j].setOm(new Air(), 2);
    		}
    		fen.getPanJeu().repaint();
    	}
    }
    
    Fenetre.java
    package GUI;
    
    import java.awt.BorderLayout;
    import java.awt.Dimension;
    import java.awt.event.KeyEvent;
    import java.awt.event.KeyListener;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseListener;
    import java.awt.event.MouseMotionListener;
    import java.io.File;
    import java.io.IOException;
    import java.util.ArrayList;
    
    import javax.imageio.ImageIO;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
    
    import Level.*;
    import Listener.*;
    import ObjetMap.*;
    import ThreadObjetMap.*;
    @SuppressWarnings("serial")
    public class Fenetre extends JFrame{
    	//Les panneaux et containers
    	private PanneauJeuAmeliore panJeu;
    	private PanneauMenu panMenu;
    	private PanneauTutoJeu ptj;
    	private PanneauTutoE pte;
    	private PanneauEditeur pe;
    	private JPanel jpe;
    	private PanneauChoixObjet panChoixObjet;
    	
    	//Les listeners
    	private MouseListener mmmListener = new MouseMenuListener(this);
    	private ClavierJouerListener Cjl = new ClavierJouerListener(this);
    	private KeyListener CEL = new ClavierEditeurListener(this);
    	private MouseListener MEL = new MouseEditeurListener(this);
    	private MouseListener MCNL = new MouseChoixModeListener(this);
    	private MouseMotionListener MMEL = new MouseMotionEditeurListener(this);
    	private MouseListener mouseChoixEditList = new MouseChoixEditeurListener(this);
    	private KeyListener clavierMenuListener = new ClavierMenuListener(this);
    	//ObjetMap pour sauvegarde temporaire et instanciations
    	private ObjetMap perso = new Perso();
    	private ObjetMap persoNiv = new Perso();
    	private ObjetMap air = new Air();
    	//Sauvegarder et charger les niveau
    	private CSNiveau sauvChargNiv = new CSNiveau();
    	//Thread d'instanciations
    	private Thread t;
    	private Thread t1;
    	//boolean servant à connaitre ou se trouve le joueur (Menu, jeu, editeur...)
    	private boolean men = false;
    	private boolean Jouer = false;
    	private boolean Editer = false;
    	private boolean MenuChoixMode = false;
    	/*True : Editer niveau aventure
    	 *False : Editer niveau editeur*/
    	private boolean niveauAventure = true;
    	//Boolean de direction du personnage
    	private boolean haut = true, bas = false, gauche = false, droite = false;
    	//objetChoisi dans l'editeur
    	private int objetActuel = 0;
    	//cette variable permet de connaitre ou se trouve le joueur
    	private int menu = 0;
    	//Niveau actuel
    	private int lvl = 1;
    	//zone actuelle
    	private int zone = 1;
    	//Liste des languides
    	private ArrayList<Thread> languide = new ArrayList<Thread>();
    	private JScrollPane scrollEditeur;
    	private JScrollPane scroll = new JScrollPane();
    	private JPanel jp;
    	private MouseListener mouseMapEList = new MouseMapEditeurListener(this);
    	private MouseListener mouseChoixNiveauxListener = new MouseChoixNiveauxListener(this);
    	private MouseMotionListener mouseMotionChoixNiveauxListener = new MouseChoixNiveauxListener(this);
    	private PanneauEtatEditeur panEtatEditeur = new PanneauEtatEditeur(this);
    	private PanneauMenuChoixNiveau panChoixNiv = new PanneauMenuChoixNiveau(this, niveauAventure);
    	public boolean isBougerPerso = false;
    	private boolean MenuChoixNiveaux = false;
    	public int setTaille(int i, int j){
    		this.setSize(i+ 5,j + 29+34);
    		return 0;	
    	}
    	public int setTailleI(int i, int j){
    		this.setSize(i+ 5,j + 29+34+34);
    		return 0;	
    	}
    	public Fenetre(){
    
    		//Initialisation
    		this.setTitle("Fera Fortunius 0.2");
    		this.setLocation(80, 0);
    		this.setVisible(true);
    		this.setDefaultCloseOperation(0);
    		this.setResizable(false);
    		while(true)
    		{	//Si tu veux jouer mais que tu ne joues pas encore
    			if(getMenu() == 1 && isJouer() == false)
    			{	
    				//initJ
    				this.setVisible(false);
    				ptj = new PanneauTutoJeu();
    				this.setContentPane(ptj);
    				ptj.repaint();
    				try {
    					this.setSize(ImageIO.read(new File("Tutoriel et Menu/tutoJ.png")).getHeight(), ImageIO.read(new File("Tutoriel et Menu/tutoJ.png")).getWidth()+ 20);
    				} catch (IOException e1) {
    					e1.printStackTrace();
    				}
    				this.setVisible(true);
    				try {
    					Thread.sleep(3000);
    				} catch (InterruptedException e) {
    					e.printStackTrace();
    				}
    				setJouer(true);
    				this.setVisible(false);
    				/*/
    				for(int i = 1; i < 41; i++)
    					getSauvChargNiv().sauvegarderNiveau(i, new Carte(20, 20), true);
    				for(int i = 1; i < 21; i++)
    					getSauvChargNiv().sauvegarderNiveau(i, new Carte(20, 20), false);/**/
    				setPanJeu(new PanneauJeuAmeliore(getSauvChargNiv().chargerNiveau(getLvl(), isNiveauAventure())));
    				panJeu.setAffichage(false);
    				getPanJeu().lvl = lvl;
    				//Création Thread Languide !
    				for(int i = 0; i < getPanJeu().getCarte().getNB_BLOCS_LARGEUR(); i++){
    					for(int j = 0; j < getPanJeu().getCarte().getNB_BLOCS_HAUTEUR(); j++){
    						if(getPanJeu().getCarte().getCase()[i][j].getOm(2).getNom().equals(new Languide().getNom())){
    							System.out.println("I"+i+"J"+j);
    							getLanguide().add(new Thread(new RunLanguide(i, j, this)));
    						}
    					}
    				}
    				for(int i = 0; i < getPanJeu().getCarte().getNB_BLOCS_LARGEUR(); i++){
    					for(int j = 0; j < getPanJeu().getCarte().getNB_BLOCS_HAUTEUR(); j++){
    						if(getPanJeu().getCarte().getCase()[i][j].getOm(2).getNom().equals(new Momyramide().getNom())){
    							System.out.println("I"+i+"J"+j);
    							getLanguide().add(new Thread(new RunMomyramide(i, j, this)));
    						}
    					}
    				}
    				//A l'attaque petit monstre !
    				for(int i = 0; i < getLanguide().size(); i++)
    				{
    						getLanguide().get(i).start();
    				}
    				t = new Thread(new RunPics(this));
    				t.start();
    				t = new Thread(new RunPerso(this));
    				t.start();
    				getPanJeu().repaint();
    				System.out.println("Jouer !");
    				this.addKeyListener(getCjl());
    				getSauvChargNiv().sauvegarderNiveau(getLvl(), getPanJeu().getCarte(), isNiveauAventure());
    				this.setSize((14 * 34) + 34, 14 * 34 + 34);
    				this.setContentPane(getPanJeu());
    				this.setVisible(true);
    				Editer = false;
    				men = false;
    				MenuChoixMode = false;
    				MenuChoixNiveaux = false;
    				panJeu.setAffichage(true);
    			}
    			//Si tu veux aller au menu et que tu n'est pas au menu
    			if(getMenu() == 0 && men == false){
    				//initialisationMenu
    				setLvl(1);
    				this.setVisible(false);
    				try {
    					this.setIconImage(ImageIO.read(new File("icone.png")));
    				} catch (IOException e) {
    					e.printStackTrace();
    				}
    				panMenu = new PanneauMenu();
    				this.setSize(520, 540);	
    				this.setContentPane(panMenu);
    				panMenu.repaint();
    				this.addMouseListener(mmmListener);
    				this.addKeyListener(clavierMenuListener);
    				setJouer(false);
    				Editer = false;
    				men = true;
    				MenuChoixMode = false;
    				MenuChoixNiveaux = false;
    				this.setVisible(true);	
    			}
    			//Si tu veux Editer un niveau mais que tu n'es pas dans l'editeur
    			if(getMenu() == 2 && Editer == false){
    				//initialisation editeur
    				niveauAventure = false;
    				this.setVisible(false);
    				pte = new PanneauTutoE();
    				this.setContentPane(pte);
    				pte.repaint();
    				try {
    					this.setSize(ImageIO.read(new File("Tutoriel et Menu/tutoE.png")).getHeight(), ImageIO.read(new File("Tutoriel et Menu/tutoE.png")).getWidth()+ 20);
    				} catch (IOException e1) {
    					e1.printStackTrace();
    				}
    				this.setVisible(true);
    				try {
    					Thread.sleep(3000);
    				} catch (InterruptedException e) {
    					e.printStackTrace();
    				}
    				setLvl(1);
    				this.setVisible(false);
    				setPe(new PanneauEditeur(getSauvChargNiv().chargerNiveau(getLvl(), isNiveauAventure())));
    				setPanChoixObjet(new PanneauChoixObjet());
    				jpe = new JPanel();
    				scrollEditeur = new JScrollPane(getPanChoixObjet());
    				setScroll(new JScrollPane(pe));
    				getPe().lvl = 1;
    				scrollEditeur.setPreferredSize(new Dimension(250, 13 * 34 + 64));
    				pe.setPreferredSize(new Dimension((getPe().getCarte().getNB_BLOCS_LARGEUR() * 34) + 5,getPe().getCarte().getNB_BLOCS_HAUTEUR() * 34 + 29));
    				getScroll().setPreferredSize(new Dimension(13 * 34, 13 * 34));
    				this.setResizable(true);
    				this.setSize(new Dimension((13* 34)+ 68 + 265,13 * 34 + 200));
    				this.setLayout(new BorderLayout());
    				this.add(getScroll(), BorderLayout.CENTER);
    				jpe.add(scrollEditeur);
    				this.add(jpe, BorderLayout.EAST);
    				this.add(getPanEtatEditeur(), BorderLayout.NORTH);
    				this.addKeyListener(CEL);
    				pe.addMouseListener(mouseMapEList);
    				getPanEtatEditeur().addMouseListener(MEL);
    				pe.addMouseMotionListener(MMEL);
    				panChoixObjet.addMouseListener(mouseChoixEditList);
    				setJouer(false);
    				Editer = true;
    				men = false;
    				MenuChoixMode = false;
    				MenuChoixNiveaux = false;
    				getPe().repaint();
    				this.setVisible(true);
    				
    			}
    			//Si tu veux aller au menuChoixNiveaux et que tu n'y es pas !
    			if(getMenu() == 3 && MenuChoixMode == false)
    			{
    				//initialisation menu choix niveaux
    				this.setVisible(false);
    				try {
    					this.setSize(ImageIO.read(new File("Tutoriel et Menu/menuChoixNiveaux.png")).getHeight(), ImageIO.read(new File("Tutoriel et Menu/menuChoixNiveaux.png")).getWidth()+ 20);
    				} catch (IOException e) {
    					e.printStackTrace();
    				}
    				this.setContentPane(new PanMenuChoixMode());
    				this.setVisible(true);
    				this.addMouseListener(MCNL);
    				this.setSize(519, 539);
    				setJouer(false);
    				Editer = false;
    				men = false;
    				MenuChoixMode = true;
    				MenuChoixNiveaux = false;
    			}
    			if(getMenu() == 4 && MenuChoixNiveaux == false)
    			{
    				this.setVisible(false);
    				this.setSize(500, 520);	
    				panChoixNiv = new PanneauMenuChoixNiveau(this, niveauAventure);
    				getPanChoixNiv().setPreferredSize(new Dimension(475, getSauvChargNiv().getNbNiveau(niveauAventure) * 90 + 75));
    				getPanChoixNiv().setSize(new Dimension(475, getSauvChargNiv().getNbNiveau(niveauAventure) * 90 + 75));
    				scroll = new JScrollPane(getPanChoixNiv());
    				
    				scroll.setPreferredSize(new Dimension(475, 500));
    				this.setContentPane(scroll);
    				this.setVisible(true);
    				setJouer(false);
    				Editer = false;
    				men = false;
    				MenuChoixMode = false;
    				MenuChoixNiveaux = true;
    				getPanChoixNiv().repaint();
    				panChoixNiv.addMouseListener(mouseChoixNiveauxListener);
    				panChoixNiv.addMouseMotionListener(mouseMotionChoixNiveauxListener);
    				scroll.addMouseMotionListener(mouseMotionChoixNiveauxListener);
    			}
    			//Verification position Joueur (Menu, Editeur , jeu...)
    			if( men == false && getMenu() != 0){
    				this.removeMouseListener(mmmListener);	
    				this.removeKeyListener(clavierMenuListener);
    			}	
    			if(isJouer() == false && getMenu() != 1){
    				this.removeKeyListener(getCjl());	
    			}
    			if(Editer == false && getMenu() != 2){
    				this.removeKeyListener(CEL);
    				getPanEtatEditeur().removeMouseListener(MEL);
    				if(pe != null)
    				{
    					pe.removeMouseListener(mouseMapEList);
    					pe.removeMouseMotionListener(MMEL);
    				}
    				
    				if(panChoixObjet != null)
    					panChoixObjet.removeMouseListener(mouseChoixEditList);
    			}
    			if(MenuChoixMode == false && getMenu() != 3){
    				this.removeMouseListener(MCNL);
    			}	
    			if(MenuChoixNiveaux == false && getMenu() != 4){
    				panChoixNiv.removeMouseListener(mouseChoixNiveauxListener);
    				panChoixNiv.removeMouseMotionListener(mouseMotionChoixNiveauxListener);
    				scroll.removeMouseMotionListener(mouseMotionChoixNiveauxListener);
    			}	
    		}
    	}
    	public Fenetre getFenetre()
    	{
    		return this;
    	}
    	public boolean isJouer() {
    		if(Jouer){
    			return true;
    		}
    		else
    			return false;
    	}
    	public void setJouer(boolean jouer) {
    		Jouer = jouer;
    	}
    	public PanneauJeuAmeliore getPanJeu() {
    		return panJeu;
    	}
    	public void setPanJeu(PanneauJeuAmeliore panJeu) {
    		this.panJeu = panJeu;
    	}
    	public ArrayList<Thread> getLanguide() {
    		return languide;
    	}
    	public void setLanguide(ArrayList<Thread> languide) {
    		this.languide = languide;
    	}
    	public int getMenu() {
    		return menu;
    	}
    	public void setMenu(int menu) {
    		this.menu = menu;
    	}
    	public ObjetMap getPersoNiv() {
    		return persoNiv;
    	}
    	public void setPersoNiv(ObjetMap persoNiv) {
    		this.persoNiv = persoNiv;
    	}
    	public int getLvl() {
    		return lvl;
    	}
    	public void setLvl(int lvl) {
    		this.lvl = lvl;
    	}
    
    	public CSNiveau getSauvChargNiv() {
    		return sauvChargNiv;
    	}
    	public void setSauvChargNiv(CSNiveau sauvChargNiv) {
    		this.sauvChargNiv = sauvChargNiv;
    	}
    
    	public boolean isNiveauAventure() {
    		return niveauAventure;
    	}
    	public void setNiveauAventure(boolean niveauAventure) {
    		this.niveauAventure = niveauAventure;
    	}
    
    	public ObjetMap getPerso() {
    		return perso;
    	}
    	public void setPerso(ObjetMap perso) {
    		this.perso = perso;
    	}
    
    	public boolean isGauche() {
    		if(gauche){
    			return true;
    		}
    		else
    			return false;
    	}
    	public void setGauche(boolean gauche) {
    		this.gauche = gauche;
    	}
    
    	public ObjetMap getAir() {
    		return air;
    	}
    	public void setAir(ObjetMap air) {
    		this.air = air;
    	}
    
    	public boolean isHaut() {
    		if(haut){
    			return true;
    		}
    		else
    			return false;
    	}
    	public void setHaut(boolean haut) {
    		this.haut = haut;
    	}
    
    	public boolean isBas() {
    		if(bas){
    			return true;
    		}
    		else
    			return false;
    	}
    	public void setBas(boolean bas) {
    		this.bas = bas;
    	}
    
    	public boolean isDroite() {
    		if(droite){
    			return true;
    		}
    		else
    			return false;
    	}
    	public void setDroite(boolean droite) {
    		this.droite = droite;
    	}
    
    	public PanneauEditeur getPe() {
    		return pe;
    	}
    	public void setPe(PanneauEditeur pe) {
    		this.pe = pe;
    	}
    
    	public int getObjetActuel() {
    		return objetActuel;
    	}
    	public void setObjetActuel(int objetActuel) {
    		this.objetActuel = objetActuel;
    	}
    
    	public int getZone() {
    		return zone;
    	}
    	public void setZone(int zone) {
    		this.zone = zone;
    	}
    	public PanneauChoixObjet getPanChoixObjet() {
    		return panChoixObjet;
    	}
    	public void setPanChoixObjet(PanneauChoixObjet panChoixObjet) {
    		this.panChoixObjet = panChoixObjet;
    	}
    	public PanneauMenu getPanMenu() {
    		return panMenu;
    	}
    	public void setPanMenu(PanneauMenu panMenu) {
    		this.panMenu = panMenu;
    	}
    	public PanneauEtatEditeur getPanEtatEditeur() {
    		return panEtatEditeur;
    	}
    	public void setPanEtatEditeur(PanneauEtatEditeur panEtatEditeur) {
    		this.panEtatEditeur = panEtatEditeur;
    	}
    	public ClavierJouerListener getCjl() {
    		return Cjl;
    	}
    	public void setCjl(ClavierJouerListener cjl) {
    		Cjl = cjl;
    	}
    	public JScrollPane getScroll() {
    		return scroll;
    	}
    	public void setScroll(JScrollPane scroll) {
    		this.scroll = scroll;
    	}
    	public PanneauMenuChoixNiveau getPanChoixNiv() {
    		return panChoixNiv;
    	}
    	public void setPanChoixNiv(PanneauMenuChoixNiveau panChoixNiv) {
    		this.panChoixNiv = panChoixNiv;
    	}
    }
    

    Avez vous besoin d'autre chose ?
    Merci de votre aide
    • Partager sur Facebook
    • Partager sur Twitter
      9 octobre 2011 à 22:10:34

      Avant toute choses, il ne faut pas utiliser les Threads façon objet mais façon tâche.
      Lorsque tu fais 1 Thread par monstre, chaque Thread gère un monstre. Donc chaque Thread gèrent un objet. En somme, tes Threads sont orientés objets.
      Il faut qu'un Thread soit orienter tâche et non objet. Donc l'idéal serait que tu possèdes un Thread pour la gestion de tous tes mobs.
      C'est le même principe avec un serveur. Il ne faut pas faire un Thread par client mais un Thread pour tous les clients.

      Un dernier conseil: évite les classes divines! Les classes divines sont les classes qui gèrent 10^99^7² choses! N'hésites pas à décomposer ton application en plusieurs classes. Plus il y a de classes, mieux c'est (sans aller dans l'abus pour autant ;) ) !
      Personnellement, mes classes tournent très souvent autour de 100 - 150 lignes. J'évite au maximum les classes avec 500 lignes de codes!

      En suivant ces conseils, tu viendras plus facilement à bout de nombreux beugs!

      Donc pour moi, la solution à ton problème serait que tu refasses ton logiciel en divisant ton code en plusieurs classes et que tu réduises ton nombre de Threads en respectant bien le modèle 1 Thread = 1 tâche et non 1 Thread = 1 objet!

      Voili Voilou ^^ ! J'espère avoir pu t'aider!
      • Partager sur Facebook
      • Partager sur Twitter
      Anonyme
        12 octobre 2011 à 17:28:15

        Merci merci , je vais me dépêcher de réorganiser ça , l'on verra bien ce que cela va donner , je vais donc répartir , et trouver un moyen de gérer tout les mobs en un seul Thread :D. Je considère ce sujet comme résolu , car je pense pouvoir recréer quelque chose de potable donc sur ce , merci !
        • Partager sur Facebook
        • Partager sur Twitter

        Problème de Thread

        × 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