Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 28/11/2012, à 18:04

compte supprimé

Impossible de créer une nouvelle instance Jeu[Résolu]

Bonsoir à tous.

Je développe un jeu d'awalé(jeu où il faut capturer les graines de son adversaire.. bref)
Le problème c'est que dans ma vue(ma fenêtre, parce que OUI, j'essaie d'implanter le design pattern MVO lol)  je n'arrive pas à instancier dans mon constructeur de ma classe Fenetre le jeu!
(jeu = new Jeu() ne semble pas fonctionner pourtant pas d'erreur de syntaxe venant du compilo, Jeu étant la classe contenant tout le gameplay, si je peux parler de gameplay lol)

Voilà une partie de mon CS Fenetre, là où je choppe des f*£$¤ exceptions. ^^^

 public Fenetre(){
//... du blabla ...
//On initialise enfin la partie! 
      System.out.println("Construction du jeu..");
      
      jeu = new Jeu(); //Mais à part ça... TOUT EST NORMAL! je mets new Jeu()... ce qui veut dire, langage java, que je construis une instance de la classe jeu et lui, qu'est-ce qu'il fait? Et bah rien! Il ne fait rien! C'est quoi ce BUGUE de M*¤$@?
      jeu.addObservateur(this);
      jeu.initialisation();
      
      //On rend visible la fenêtre!
      this.setVisible(true);

En effet, je vois bien s'afficher dans mon terminal "Construction jeu"
mais pas "Jeu construit!" (qui doit être affiché à la fin du constructeur Jeu.
Conclusion, mon instance n'a pas été crée. Wtf?

Merci de m'aider à comprendre les causes. C'est pas que je commence à être inquiet, non, non mais je dois rendre ce projet après demain et plus rien ne fonctionne.. :s

PS: Les exceptions renvoyées sont:
Exception in Thrad "main" java.lang.NullPointerException
      at awale.view.Fenetre blbablablablabla
      at awale.Awale.main

Dernière modification par ChrisLeturc (Le 18/12/2012, à 12:43)

#2 Le 29/11/2012, à 13:53

Epehj

Re : Impossible de créer une nouvelle instance Jeu[Résolu]

Salut,

L'exception est tout de même assez claire, tu utilises dans ta classe Fenetre un objet que tu n'as pas instancié, d'où le NullPointerException.
La deuxième ligne

Exception in Thrad "main" java.lang.NullPointerException
      at awale.view.Fenetre blbablablablabla

te donnera la ligne exacte de ton erreur, qui sera surement new Jeu()

Il faut ensuite débugger et tu trouveras vite l'erreur…

Dernière modification par Epehj (Le 29/11/2012, à 13:59)


Linux user #447629 - Ubuntu user # 21770
C'est en sciant que Léonard devint scie

Hors ligne

#3 Le 29/11/2012, à 13:54

binnette

Re : Impossible de créer une nouvelle instance Jeu[Résolu]

Salut, zip ton code et met le à notre disposition. On pourra tester pour voir si ça compile chez nous.
Tu peux utiliser :
https://www.wetransfer.com/
https://www.yousendit.com/

@+


Avez-vous consulté la documentation et demandé à Google ?
Merci d'être précis. Qui fait quoi et comment ? Donnez le constructeur, le modèle et l'architecture de votre machine.
Demandé traitée ? Ajoutez [Résolu] au début du sujet de votre discussion.

Hors ligne

#4 Le 29/11/2012, à 14:53

compte supprimé

Re : Impossible de créer une nouvelle instance Jeu[Résolu]

J'ai compris qu'il n'était pas instancié mais pourquoi il ne s'instancie pas alors que dans le constructeur de Fenêtre, j'instancie bien l'attribut Jeu.

Et pour envoyer mes scripts, je l'envoie à quelle adresse? ^^
(parce que ça fait beaucoup de lignes quand même. tongue)

Je suis fou et je fais un copie collé de fenêtre et Jeu.

package awale.view;

import java.awt.BorderLayout;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;


import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;


import awale.observer.Observateur;
import awale.model.*;

/**
   *Fenêtre graphique du jeu d'awalé.
   */

public class Fenetre extends JFrame implements Observateur{
  /** Instance du jeu. */
  private Jeu jeu;//this c'est l'observateur!!

  /** JLabel contenant le titre du jeu. */
  private JLabel titre = new JLabel();
  /** JLabel contenant le nombre de graines capturées par le camp nord. */
  private JLabel nbGrainesNord = new JLabel();
  /** JLabel contenant le nombre de graines capturées par le camp sud. */
  private JLabel nbGrainesSud = new JLabel();
  
  /** JLabel des informations sur l'était du jeu, plus donne des conseils au joueur. */
  private JLabel informations = new JLabel();
  
  /** JPanel qui joue le rôle du container! */
  private JPanel boite = new JPanel();
  
  /** Ne sert à rien..*/
  private boolean continuer = true;
  
  /** Le Thread effectuant le coup..*/
  private Thread t;
  
  /** Le Panel du nord avec tous ses boutons.*/
  private JPanel nord = new JPanel();
  Case c6n = new Case("4");
  Case c5n = new Case("4");
  Case c4n = new Case("4");
  Case c3n = new Case("4");
  Case c2n = new Case("4");
  Case c1n = new Case("4");
  
  /** Le Panel du sud avec tous ses boutons.*/
  private JPanel sud = new JPanel();
  Case c1s = new Case("4");
  Case c2s = new Case("4");
  Case c3s = new Case("4");
  Case c4s = new Case("4");
  Case c5s = new Case("4");
  Case c6s = new Case("4");
  

  
   /**
      *Notre classe fenêtre dans le rôle de.. La vue! 
      *
   */
  
  public Fenetre(){
      //On initialise la JFrame
      this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      this.setResizable(false);
      this.setSize(500, 150);
      this.setLocationRelativeTo(null);



      //On initialise le JLabel
      Font police = new Font("~Le jeu d'awalé~", Font.TYPE1_FONT, 30);

      this.titre.setFont(police);
      this.titre.setText("~Le jeu d'awalé~");

      //On ajoute le JLabel à la JFrame
      this.boite.add(this.titre);


      //On initialise le JLabel pour les graines capturées pour le camp nord.
      nbGrainesNord.setText("O graine capturée pour le nord!");
      Font police2 = new Font("DS-digital", Font.TYPE1_FONT, 10);
      this.nbGrainesNord.setFont(police2);

      //On ajoute le JLabel à la JFrame
      this.boite.add(this.nbGrainesNord);


      /*Mise en place des différents boutons représentant le plateau du jeu*/

      //On définit le layout en lui indiquant qu'il travaillera en ligne pour l'affichage de tous les trous avec leurs graines.
      nord.setLayout(new BoxLayout(nord, BoxLayout.LINE_AXIS));
      nord.add(c6n);
      nord.add(c5n);
      nord.add(c4n);
      nord.add(c3n);
      nord.add(c2n);
      nord.add(c1n);

      sud.setLayout(new BoxLayout(sud, BoxLayout.LINE_AXIS));
      sud.add(c1s);
      sud.add(c2s);
      sud.add(c3s);
      sud.add(c4s);
      sud.add(c5s);
      sud.add(c6s);




      //On positionne maintenant ces trois lignes en colonne
      boite.setLayout(new BoxLayout(boite, BoxLayout.PAGE_AXIS));
      boite.add(nord);
      boite.add(sud);




      //Même chose mais pour le camp sud.
      nbGrainesSud.setText("O graine capturée pour le sud!");
      this.nbGrainesSud.setFont(police2);

      this.boite.add(this.nbGrainesSud);


      //On initialise le JLabel des informations.
      Font police3 = new Font("Comic-Sans-MS", Font.TYPE1_FONT, 15);
      this.informations.setFont(police3);
      this.informations.setText("A vous de jouer!");

      this.getContentPane().add(boite);
      this.getContentPane().add(this.informations,  BorderLayout.SOUTH);


      //On désactive tous les boutons adverses.. on verra plus tard pour le paramétrage du nombre de joueurs.
      c6n.setEnabled(false);
      c5n.setEnabled(false);
      c4n.setEnabled(false);
      c3n.setEnabled(false);
      c2n.setEnabled(false);
      c1n.setEnabled(false);
   
      
      //On met sous écoute tous les boutons!
      c1s.addActionListener(new Case1Listener());
      c2s.addActionListener(new Case2Listener());
      c3s.addActionListener(new Case3Listener());
      c4s.addActionListener(new Case4Listener());
      c5s.addActionListener(new Case5Listener());
      c6s.addActionListener(new Case6Listener());

      


      //On initialise enfin la partie! 
      System.out.println("Construction du jeu..");
      
      jeu = new Jeu();
      jeu.addObservateur(this);
      jeu.initialisation();
      
       c6n.setText("PROUT2!");
      //On rend visible la fenêtre!
      this.setVisible(true);
     
      
   }


   public void lancerCoup(int valBouton){
      jeu.coup(valBouton);
      System.out.println("COUP::"+valBouton);
      
   }







   public class Case1Listener implements ActionListener{
    public void actionPerformed(ActionEvent arg0) {
      System.out.println("Case 0 jouée!");
      //t = new Thread(new Coup(0)); //Notre tableau va de 0 à 5! ATTENTION!!
     // t.start();
    }
  }
  public class Case2Listener implements ActionListener{
    public void actionPerformed(ActionEvent arg0) {
      System.out.println("Case 1 jouée!");
      //t = new Thread(new Coup(1)); //Notre tableau va de 0 à 5! ATTENTION!!
     // t.start();
    }
  }
  public class Case3Listener implements ActionListener{
    public void actionPerformed(ActionEvent arg0) {
      System.out.println("Case 2 jouée!");
      //t = new Thread(new Coup(2)); //Notre tableau va de 0 à 5! ATTENTION!!
      //t.start();
    }
  }
  public class Case4Listener implements ActionListener{
    public void actionPerformed(ActionEvent arg0) {
      System.out.println("Case 3 jouée!");
      //t = new Thread(new Coup(3)); //Notre tableau va de 0 à 5! ATTENTION!!
    //t.start();
    }
  }
  public class Case5Listener implements ActionListener{
    public void actionPerformed(ActionEvent arg0) {
      System.out.println("Case 4 jouée!");
      //t = new Thread(new Coup(4)); //Notre tableau va de 0 à 5! ATTENTION!!
     // t.start();
      
    }
  }
  public class Case6Listener implements ActionListener{
    public void actionPerformed(ActionEvent arg0) {
      System.out.println("Case 5 jouée!");
      t = new Thread(new Coup(5)); //Notre tableau va de 0 à 5! ATTENTION!!
      t.start();
      //Fenetre.lancerCoup(5, jeu);
    }
  }
  
  public class Coup implements Runnable{
      private final int valBouton;
      public Coup(final int valBouton){
         this.valBouton = valBouton;
      }
      
      //On execute le coup passé dans le constructeur!
      @Override public void run(){
         //Dans ce coup, nous devons à la toute fin, désactiver les boutons qui ne pourront pas être joués! 
         
         //On effectue le coup, la partie doit s'actualiser! 
         lancerCoup(valBouton);
         
         /*On vérifie si tous les coups sont légaux sinon on désactive le bouton correspondant à l'action à effectuer!*/
         if(jeu.isLegal(0))
            c1s.setEnabled(true);
         else
            c1s.setEnabled(false);
            
         if(jeu.isLegal(1))
            c2s.setEnabled(true);
         else
            c2s.setEnabled(false);
         
         if(jeu.isLegal(2))
            c3s.setEnabled(true);
         else
            c3s.setEnabled(false);
            
         if(jeu.isLegal(3))
            c4s.setEnabled(true);
         else
            c4s.setEnabled(false);
         
         if(jeu.isLegal(4))
            c5s.setEnabled(true);
         else
            c5s.setEnabled(false);
            
         if(jeu.isLegal(5))
            c6s.setEnabled(true);
         else
            c6s.setEnabled(false);
      }
  }
  
  
  @Override public void update(Jeu jeu){
      //this.jeu = new Jeu(jeu); 
      /*this.jeu.setTour() = jeu.getTour();
		this.jeu.setNbTour() = jeu.getNbTour();
		this.jeu.setNbPlayer() = jeu.getNbPlayer();
		this.jeu.setState() = jeu.getState();*/
		
		
		//this.jeu.updateObservateur();
		//this.joueur = new Joueur[2];
		
      c1n.ajuster(""+jeu.getTable().getNord(1)+"");
      
      if(jeu.isLegal(0))
            c1s.setEnabled(true);
         else
            c1s.setEnabled(false);
            
         if(jeu.isLegal(1))
            c2s.setEnabled(true);
         else
            c2s.setEnabled(false);
         
         if(jeu.isLegal(2))
            c3s.setEnabled(true);
         else
            c3s.setEnabled(false);
            
         if(jeu.isLegal(3))
            c4s.setEnabled(true);
         else
            c4s.setEnabled(false);
         
         if(jeu.isLegal(4))
            c5s.setEnabled(true);
         else
            c5s.setEnabled(false);
            
         if(jeu.isLegal(5))
            c6s.setEnabled(true);
         else
            c6s.setEnabled(false);
  }
  
  
  
}
package awale.model;


import java.util.*;

import awale.observer.Observable;
import awale.observer.Observateur;
//import awale; 
/**
  *Jeu, le jeu d'Awalé à proprement parlé.. la classe Main crée une instance de cette classe et l'utilise pour lancer une partie.
  *.
  *@version 0.1
*/
public class Jeu implements Observable{
   /**
      *Liste des observateurs.
      */
   private ArrayList<Observateur> listObservateur = new ArrayList<Observateur>();
   /**
	* Indique à quel camp de jouer. 0 pour sud, 1 pour nord.
	*/
	protected int tour;
	/**
	* Indique le nombre de tour joués. 
	*/
	protected int nbTour;
	/**
	* Indique le nombre de joueurs qui ne sont pas des robots. Par défaut, on aura 1 joueur contre 1 robot.
	*/
	protected int nbPlayer;
	
	/**
	* La table crée pour gérer les graines posées sur la table.
	*/
	protected Table table;
	/**
	* Chacun des joueurs(Robot ou pas..) .
	*/
	protected Joueur[] joueur; //Joueur est une class abstraite, player est le joueur, bot est le robot.
	
	/**
	   *Pour vérifier dans quel état le jeu est: -1 normal, 0 (joueur 0) a gagné la partie(sud), 1 (joueur 1) a gagné la partie(nord), 2 match nul!
	   */
	protected int state;

	
	
	
	/**
	* Constructeur par défaut de la classe Jeu.
	* <p>On initialise tout à zéro par défaut. Ainsi il n'y a que des joueurs robots</p>
	*
	*/
	public void Jeu()
	{
		this.tour=0;
		this.nbTour=0;
		this.nbPlayer=1;
		this.state = -1;
		this.table = new Table();
		this.joueur = new Joueur[2];
		
		System.out.println("Jeu construit!");
	}
	
	/**
	* Constructeur logique de la classe Jeu.
	* <p>On initialise tout à zéro par défaut</p>
	* 
	* @param obs  L'observateur passé en paramètre! 
	*/
	public void Jeu(Observateur obs)
	{
		this.tour=0;
		this.nbTour=0;
		this.nbPlayer=1;
		this.state = -1;
		this.listObservateur.add(obs);
		this.table = new Table();
		this.joueur = new Joueur[2];
		
		System.out.println("Jeu construit!");
	}
	/**
	* Constructeur logique de la classe Jeu.
	* <p>On initialise tout à zéro par défaut</p>
	* 
	* @param obs  L'observateur passé en paramètre! 
	* @param jeu Jeu passé en argument pour y effectuer une copie de celui-ci
	*/
	/*public void Jeu(Observateur obs, Jeu jeu)
	{
		this.tour = jeu.getTour();
		this.nbTour = jeu.getNbTour();
		this.nbPlayer= jeu.NbPlayer();
		this.state = jeu.getState();
		this.listObservateur.add(obs);
		this.joueur = new Joueur[2];
		
	}*/

   /**
	*  Accesseur de tour.
	*  
	*  @return renvoie le joueur qui doit jouer.
	*/ 
	protected int getTour(){ return tour; }
	/**
	*  Accesseur de nbTour.
	*  
	*  @return renvoie le nombre de tour joués.
	*/ 
	protected int getNbTour(){ return nbTour; }
	/**
	*  Accesseur de joueur.
	*  
	*  @return renvoie les indications du joueur pour visualiser ses points.
	*/ 
	protected Joueur getPlayer(int num){ return joueur[num]; }
	
	protected Joueur getJoueur(int num){ return joueur[num]; }
   
   /**
	*  Accesseur de l'état du jeu.
	*  
	*  @return renvoie l'état courant du jeu instancié.
	*/ 	
	public int getState(){ return state; }
	
	/**
	*  Accesseur de table.
	*  
	*  @return renvoie la table.
	*/ 
	public Table getTable(){ return table ; }

   /**
	*  Mutateur de tour..
	*  
	*  @param val précise à qui de jouer.
	*/ 
	protected void setTour(int val){ tour=val; }
   /**
	*  Mutateur de nbTour..
	*  
	*  @param val ajuste le nombre de tour .
	*/ 
	protected void setNbTour(int val){ nbTour=val; }


	/**
	*  On passe au tour suivant..
	*  
	*  @param val ajuste le nombre de tour .
	*/ 
	public void tourSuivant(){
		nbTour++; //On incrémente le nombre de tour joués.
		if(tour==1) //On indique qui devra jouer au prochain tour. 
		{
			//this.setTour(0);	
			tour = 0;
		}
		else
		{
			//this.setTour(1);	
			tour = 1;//Dans ce langage true est différent de 1! Du moins il ne le reconnait pas, c'est pas très pratique.
		}
	}
	
	/**
	*  Méthode qui vérifie si quelqu'un a gagné?
	*  
	*  @return 0 si quelqu'un a gagné sinon (1 donc on continue à jouer!).
	*/ 
	public boolean checkState() //Vérifie si quelqu'un a gagné ou non..
	{
		if(joueur[0].getNbGraineCapture()==25)
		{	
			avertissement("Le joueur n°0 a capturé 25 graines! Le sud a gagné!");
			state = 0;
			return false;
		}
		else if(joueur[1].getNbGraineCapture()==25)
		{
			avertissement("Le joueur n°1 a capturé 25 graines! Le nord a gagné!");
			state = 1;
			return false;
		}
		else if(table.getNbGraineJeu()==6)
		{
			avertissement("Il ne reste plus que 6 graines en jeu! ");
			if(joueur[0].getNbGraineCapture()>joueur[1].getNbGraineCapture())
			{
				avertissement("Le joueur n°0 a capturé plus de graines que le joueur n°1! Le sud a gagné!");
				state = 0;
				return false;
			}
			else if(joueur[0].getNbGraineCapture()==joueur[1].getNbGraineCapture())
			{
				avertissement("Le joueur n°0 a capturé autant de graines que le joueur n°1! Match nul!");
				state = 2;
				return false;
			}
			else
			{
				avertissement("Le joueur n°1 a capturé plus de graines que le joueur n°0! Le nord a gagné!");
				state = 1;
				return false;
			}
			
		}
		return true;
	}
	/**
	  *Pour initialiser la partie, on lance la méthode initialisation(). Elle met les graines sur la table et dit quel est le joueur qui doit jouer le premier.
	*/
	public void initialisation()
	{
		tour = pileFace();//On décide aléatoirement qui commencera! 0 pour sud(joueur[0]), 1 pour nord(joueur[1]).
		//On initialise la table aussi ie 4 graines par trou. 
		System.out.println("Au joueur: "+tour+" de jouer!");
		table.depart();
		
		//Initialisation du joueur(sud):
		joueur[0] = new Player(0);
		//joueur[0] = new Joueur(0);
		//Initialisation du robot(nord) utilisant un minmax de profondeur 3:
		joueur[1] = new Bot(1, 3);
		
	}
	
	
	/**
	   *Effectue le coup choisi par le joueur ou l'IA.
	   *
	   * @param valCoup Argument du coup à effectuer sur l'instance jeu.
	   */
	
	
	public void coup(final int valCoup){
	   //Sert au deboggage:
      System.out.print("Lancement du coup:");
      System.out.println(valCoup);
      
      //On récupère le joueur qui vient d'effectuer l'ordre.
      int numJ = this.getTour();
	   int caseCourante = -1; //Pour connaître la case o`u se trouve les graines à manger! 
	   
	   boolean continuer = true; //Faut-il continuer à manger les graines? Deux conditions: nous ne sommes pas dans notre camp, il y a 2 ou 3 graines dans la caseCourante! 
	   
	   
	  //pas besoin de vérifier si notre coup est légal, il l'est puisque pour le joueur les cases non-légales sont désactivées et pour l'IA, on vérifie toujours avant si nous pouvons jouer tel ou tel coup. 
	
	   
	   //Quel joueur est en train de jouer? 
	   if(numJ==1)//nord!
	   {
	      /*On effectue le déplacement des graines*/
		   caseCourante = table.dptNord(valCoup); //dptNord nous renvoie la case o`u l'on peut manger des graines.
		   if(caseCourante!=-1)//-1 est renvoyé quand on n'a pas le droit de mamamer sinon la case courante à manger!
		   {
			   //On exécute la capture!
			   while(continuer)
			   {
				   joueur[numJ].addNbGraineCapture(table.getSud(caseCourante%6));//On est dans le camps adverse sinon on n'aurait pas pu manger!
				   
				   //On met à jour l'emplacement o`u l'on vient de manger les graines.
				   table.setSud(0,caseCourante%6);//Nous devons retirer de la partie les graines qui viennent d'être mangées!
				   //Faut-il continuer la boucle ie sommes nous dans notre propre camp? ou la case précédente possède-t-elle 1 ou plus de trois graines?
			      caseCourante=caseCourante%6 -1;
			      //Si la caseCourante est négative, on est dans notre camp. On ne mange pas les graines! 
			      if(caseCourante<0)
			         continuer = false;
			   }
		
		   }
	   }
	   else
	   {
		   caseCourante = table.dptSud(valCoup);
		   if(caseCourante!=-1)//-1 est renvoyé quand on n'a pas le droit de mamamer sinon la case courante à manger!
		   {
			   //On exécute la capture!
			   while(continuer)
			   {
				   joueur[numJ].addNbGraineCapture(table.getNord(caseCourante%6));//On est dans le camps adverse sinon on n'aurait pas pu manger!
				   table.setNord(0,caseCourante%6);//Nous devons retirer de la partie les graines qui viennent d'être mangées!
				   //Faut-il continuer la boucle ie sommes nous dans notre propre camp? ou la case précédente possède-t-elle 1 ou plus de trois graines?
			
			   }
		
		   }
	   }
	   //Le tour est fini, on passe au tour suivant!
	   tourSuivant();
	   
	   /*	return true; //Pour continuer à jouer..
	   return false; //Pour arrêter!*/
	  
      //On avertit les observateurs que le jeu a été mis à jour

      this.updateObservateur();
		
      try {
        Thread.sleep(100);
      } catch (InterruptedException e) {
        e.printStackTrace();
      }
      
	}
	
	
	
	
	
	
	
	
	
	
	
	
	/**
	  *Permet de vérifier si le coup choisi est légal!
	  *Règle spéciale 1: si l'adversaire n'a plus de graines, nous sommes obligés de jouer un coup qui le nourrisse. Si c'est impossible, on doit arrêter la partie!
	  *Règle spéciale 2: si un coup mange toutes les graines de l'adversaire, on peut le jouer mais on ne lui mange aucune graine! --> contrôle effectué lors de la capture! :)
	  *
	  *@param choice le coup qu'on désire vérifier.
	  *
	  *@return false si le coup est impossible sinon true.
	*/
	public boolean isLegal( int choice) //Si le coup est valide on renvoie true.  choice: 0 à 5 camp sud, de 6 à 11 camp nord. 
	{
		//Qui est en train de jouer? Sud 0, Nord 1? --> On cherche à connaître qui est l'adversaire?!
		if(tour==1)//C'est au nord de jouer!
		{
		   //Si le camp est vide(le complément du complément), on doit s'arranger pour nourrir l'adversaire! Donc le coup présent choisi nourrit-il le joueur adverse? On vérifie.. On effectue cette vérification à l'instar de la méthode pour déplacer les graines!
				if(!Jeu.isNotEmpty(table.getSud()))
				{
					Table tableVerif = new Table(table); //Pour effectuer une vérification sur une copie.. 
					return tableVerif.checkDptNord(choice);	
				}
				else{
				
				}
		}
		else
		{
		   //Si le camp est vide, on doit s'arranger pour nourrir l'adversaire! Donc le coup présent choisi nourrit-il le joueur adverse? On vérifie.. On effectue cette vérification à l'instar de la méthode pour déplacer les graines!
				if(!isNotEmpty(table.getNord()))
				{
					Table tableVerif = new Table(table); //Pour effectuer une vérification sur une copie.. 
					return tableVerif.checkDptSud(choice);	
				}
		}
		return true;
	}
	
	
	
	
	
	
	
	
	
	
	
	
	
	/*
	                     Les méthodes statiques qui peuvent servir pour le jeu! 
	*/
	/**
	   *Fonction permettant de faire un choix via le terminal. (utile pour le deboggage)
	   *
	   */
	/*public static int makeChoice()
	{
		Scanner lecture = new Scanner(System.in);
		return lecture.read();
	}*/
	public static void message(String text){
		System.out.println(text); //Le truc qu'il ne faut SURTOUT pas faire en C. --' Merci les débordements de tampon!
	}
	public static void avertissement(String text)
	{
		System.out.print("Avertissement:"+text); //Le truc qu'il ne faut SURTOUT pas faire en C. --' Merci les débordements de tampon!
	}
	
	
	
	public static int pileFace()
	{
		if(Math.random()<0.5)
			return 0;
		return 1;
	}
	

	/**
	  *Cette méthode vérifie si le camp passé en argument n'est pas vide! true si il n'est pas vide sinon false.
	  *
	*/
	public static boolean isNotEmpty(int[] tab)
	{
		for(int i = 0; i<tab.length; i++)
		{
			if(tab[i]!=0)
				return true;
		}	
		return false;
	}
	
	
	

	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	/**
	  *Ajoute si nécessaire un nouvel observateur
	  *
	  *@param obs observateur à ajouter, ici la fenêtre! 
	*/
  public void addObservateur(Observateur obs) {
    this.listObservateur.add(obs);
  }
  /**
	  *Supprime si nécessaire un nouvel observateur
	  *
	*/
  public void delObservateur() {
    this.listObservateur = new ArrayList<Observateur>();
  }
  //Avertit les observateurs que l'objet observable a changé 
  /**
	  *Met à jour l'observateur.
	  *
	*/
  public void updateObservateur() {
    for(Observateur obs : this.listObservateur )
      obs.update(this);
  }
	
}

Dernière modification par ChrisLeturc (Le 27/02/2013, à 19:51)

#5 Le 29/11/2012, à 15:41

binnette

Re : Impossible de créer une nouvelle instance Jeu[Résolu]

Suis-je bête. Utilise http://www.zippyshare.com/ pour mettre le zip de ton code. Et tu nous colle l'url ici tongue


Avez-vous consulté la documentation et demandé à Google ?
Merci d'être précis. Qui fait quoi et comment ? Donnez le constructeur, le modèle et l'architecture de votre machine.
Demandé traitée ? Ajoutez [Résolu] au début du sujet de votre discussion.

Hors ligne

#6 Le 29/11/2012, à 16:18

compte supprimé

Re : Impossible de créer une nouvelle instance Jeu[Résolu]

http://www55.zippyshare.com/v/10085453/file.html


Avec la javadoc, en prime et pour un peu plus de lisibilité.
Mon code est vraiment moche, mais si vous avez des suggestions d'améliorations que je peux faire dans des délais raisonnables, n'hésitez pas.

#7 Le 29/11/2012, à 16:38

binnette

Re : Impossible de créer une nouvelle instance Jeu[Résolu]

Hello

Construction du jeu..
Exception in thread "main" java.lang.NullPointerException
	at awale.model.Jeu.initialisation(Jeu.java:223)
	at awale.view.Fenetre.<init>(Fenetre.java:169)
	at awale.Awale.main(Awale.java:13)
Au joueur: 0 de jouer!

Dans Jeu.java, dans ta fonction initialisation(), tu  appelles table.depart(); alors que la variable table n'est pas initialisée. Elle vaut Null, d'où le NullPointerException.
Faut initialiser, rajoute ça avant table.depart() :

table = new Table();

Toujours dans cette fonction initialisation, tu essayes de faire ceci :

joueur[0] = new Player(0);

Mais ton tableau (joueur) n'est pas initialisé, rajoute ça avant :

joueur = new Joueur[2];

@+


Avez-vous consulté la documentation et demandé à Google ?
Merci d'être précis. Qui fait quoi et comment ? Donnez le constructeur, le modèle et l'architecture de votre machine.
Demandé traitée ? Ajoutez [Résolu] au début du sujet de votre discussion.

Hors ligne

#8 Le 29/11/2012, à 17:01

Epehj

Re : Impossible de créer une nouvelle instance Jeu[Résolu]

binnette plus rapide que l'éclair !

@ChrisLeturc
Un peu plus tard, tu devrais te pencher sur l'utilisation d'un IDE. Il y a souvent un mode debug, qui permet de faire une bonne analyse de ce genre de problème

Dernière modification par Epehj (Le 29/11/2012, à 17:03)


Linux user #447629 - Ubuntu user # 21770
C'est en sciant que Léonard devint scie

Hors ligne

#9 Le 29/11/2012, à 17:01

compte supprimé

Re : Impossible de créer une nouvelle instance Jeu[Résolu]

Je comprends pas..
C'est un attribut, il est déjà initialisé, normalement, dans ce constructeur:

public void Jeu()
	{
		this.tour=0;
		this.nbTour=0;
		this.nbPlayer=1;
		this.state = -1;
		this.table = new Table();
		this.joueur = new Joueur[2];
		
		System.out.println("Jeu construit!");
	}

De même pour joueur.

Dernière modification par ChrisLeturc (Le 29/11/2012, à 17:06)

#10 Le 29/11/2012, à 17:04

Epehj

Re : Impossible de créer une nouvelle instance Jeu[Résolu]

Tes éléments ne sont pas initialisés car les constructeurs de la classe ne sont pas corrects, le «void» est de trop


Linux user #447629 - Ubuntu user # 21770
C'est en sciant que Léonard devint scie

Hors ligne

#11 Le 29/11/2012, à 17:10

compte supprimé

Re : Impossible de créer une nouvelle instance Jeu[Résolu]

Aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahhhhh, loooooooooooool! ^^
TOUT S'EXPLIQUE!!!

Merci beaucoup, Binnette et Epehj!
Grâce à vous, je vais pouvoir continuer à avancer dans mon devoir sans avoir une erreur trop débile me bloquer x)

Ce qui est vraiment curieux, c'est que j'avais remarqué une erreur similaire dans une autre de mes classes et que je l'avais corrigée.
Là pour le coup, j'avais pas fait gaffe! roll

lol


Encore merci, je ferai gaffe la prochaine fois, promis! wink


PS: et c'est vrai que je compile tout à la main. J'aime bien cette façon de faire.
J'ai pris cette habitude avec le prof de TP/C++ en deug de physique qui était pro-linux. tongue
Il nous tapait sur les doigts quand on se servait pas du shell.

Dernière modification par ChrisLeturc (Le 29/11/2012, à 17:15)

#12 Le 29/11/2012, à 17:16

Epehj

Re : Impossible de créer une nouvelle instance Jeu[Résolu]

Oui la compil à la main c'est une bonne chose pour bien comprendre les choses, mais dès que tu vas avoir beaucoup de bibliothèque ça risque de se compliquer smile

Enfin tant que tu t'en sors c'est le principal. Bon courage pour la fin du devoir !


Linux user #447629 - Ubuntu user # 21770
C'est en sciant que Léonard devint scie

Hors ligne

#13 Le 29/11/2012, à 17:18

binnette

Re : Impossible de créer une nouvelle instance Jeu[Résolu]

Rmq : être "pro-linux " ne signifie pas pour autant que tu es obligé de te passer d'un IDE wink

Quelques IDE :
http://doc.ubuntu-fr.org/eclipse
http://doc.ubuntu-fr.org/netbeans

Ou encore un puissant éditeur pour les "pro-linux" wink
http://doc.ubuntu-fr.org/vim


Avez-vous consulté la documentation et demandé à Google ?
Merci d'être précis. Qui fait quoi et comment ? Donnez le constructeur, le modèle et l'architecture de votre machine.
Demandé traitée ? Ajoutez [Résolu] au début du sujet de votre discussion.

Hors ligne

#14 Le 30/11/2012, à 15:03

compte supprimé

Re : Impossible de créer une nouvelle instance Jeu[Résolu]

En fait pour être franc avec vous, j'ai déjà Eclipse et NetBeans.
Mais y a trop de boutons. tongue

Après pour vim, c'est l'inverse.. mais c'est chouette vim, faut juste s'y mettre et prendre en main tous les raccourcis utiles. J'ai un ami qu'est archi-fan de vim, c'est impressionnant tout ce qu'on peut faire avec et rapidement.
Je suis trop habitué à sélectionner à la souris mon texte. Mais quand j'aurai du temps pour me mettre vraiment à vim, je le ferai.

En tout cas, merci pour toute cette aide.
J'ai pratiquement fini mon devoir, il me reste à débugger mon programme et réaliser une recherche arborescente de MonteCarlo.

Si ca vous dit, je pourrai vous envoyer la version finale. (c'est que du swing et des boutons, hein? tongue)

#15 Le 30/11/2012, à 15:13

binnette

Re : Impossible de créer une nouvelle instance Jeu[Résolu]

Ouais, je suis preneur, ça me rappellera les projets que je faisais pendant mes études. @+


Avez-vous consulté la documentation et demandé à Google ?
Merci d'être précis. Qui fait quoi et comment ? Donnez le constructeur, le modèle et l'architecture de votre machine.
Demandé traitée ? Ajoutez [Résolu] au début du sujet de votre discussion.

Hors ligne

#16 Le 30/11/2012, à 15:55

Epehj

Re : Impossible de créer une nouvelle instance Jeu[Résolu]

set mouse=a

dans vim, comme ça tu pourras utiliser la souris wink
Et pour Eclipse, un petit F11 et hop tu passes en debug ! ensuite faut jouer avec F5, F6 et F7 smile


Linux user #447629 - Ubuntu user # 21770
C'est en sciant que Léonard devint scie

Hors ligne

#17 Le 30/11/2012, à 19:24

compte supprimé

Re : Impossible de créer une nouvelle instance Jeu[Résolu]

Il faut que je le rende avant minuit, j'ai fait une grosse erreur pour l'IA que je suis en train de corriger.

En effectuant des tests, j'ai constaté un truc me chagrinant:
Soit le jeu dans cet état:
Nord: 661606
Sud: 660551
          ^
Je joue le deuxième bouton(c'est sud) qui joue.
Le nouvel état du jeu:
661606
600551
Aucune graine n'est déplacée.(fonction dptSud()) gérant le déplacement des graines du sud.



http://www38.zippyshare.com/v/51021824/file.html

J'espère avoir le temps de terminer d'ici minuit. :s

#18 Le 30/11/2012, à 21:05

binnette

Re : Impossible de créer une nouvelle instance Jeu[Résolu]

Alors, tu en es où ?


Avez-vous consulté la documentation et demandé à Google ?
Merci d'être précis. Qui fait quoi et comment ? Donnez le constructeur, le modèle et l'architecture de votre machine.
Demandé traitée ? Ajoutez [Résolu] au début du sujet de votre discussion.

Hors ligne

#19 Le 30/11/2012, à 21:16

compte supprimé

Re : Impossible de créer une nouvelle instance Jeu[Résolu]

Je débugge beaucoup beaucoup de choses.
Et j'ai remarqué que mon minMax était faux ainsi que mes autres stratégies. Il faut que je développe un graphe. (créerGraphe)
Mais je crois que je l'ai fait un peu trop à l'arrache.

Voici la dernière version, pour le moment: (ca marche un peu mieux, je corrige le bugue au moment de la prise des graines)

http://www31.zippyshare.com/v/99524696/file.html

Au pire, je prends des points de pénalité et je le rends lundi.

Dernière modification par ChrisLeturc (Le 30/11/2012, à 21:17)

#20 Le 30/11/2012, à 21:53

binnette

Re : Impossible de créer une nouvelle instance Jeu[Résolu]

Bon courage en tout cas. @+


Avez-vous consulté la documentation et demandé à Google ?
Merci d'être précis. Qui fait quoi et comment ? Donnez le constructeur, le modèle et l'architecture de votre machine.
Demandé traitée ? Ajoutez [Résolu] au début du sujet de votre discussion.

Hors ligne

#21 Le 30/11/2012, à 23:37

compte supprimé

Re : Impossible de créer une nouvelle instance Jeu[Résolu]

Sinon voilà enfin une application correcte si tu veux t'amuser.

Merci pour l'aide apportée. smile
(il faut juste que je corrige la fin de la partie^et que je développe l'IA pour de bon)
http://www16.zippyshare.com/v/85456782/file.html

Tu peux t'amuser avec un ami! ^^

#22 Le 30/11/2012, à 23:46

binnette

Re : Impossible de créer une nouvelle instance Jeu[Résolu]

N'oublie pas de « nettoyer » ton projet avant de le rendre. Supprime les fichier se terminant par ~ et supprime les fichiers .class

find . -name "*~" -exec rm '{}' \;
find . -name "*.class" -exec rm '{}' \;

@+


Avez-vous consulté la documentation et demandé à Google ?
Merci d'être précis. Qui fait quoi et comment ? Donnez le constructeur, le modèle et l'architecture de votre machine.
Demandé traitée ? Ajoutez [Résolu] au début du sujet de votre discussion.

Hors ligne

#23 Le 30/11/2012, à 23:59

binnette

Re : Impossible de créer une nouvelle instance Jeu[Résolu]

Je ne connais pas trop les règles de ce jeu. Cependant, j'arrive à le bloquer dans cette configuration :

    19
0 0 0 0 0 0 
1 2 1 0 1 0
    24
Au sud de jouer !

@+


Avez-vous consulté la documentation et demandé à Google ?
Merci d'être précis. Qui fait quoi et comment ? Donnez le constructeur, le modèle et l'architecture de votre machine.
Demandé traitée ? Ajoutez [Résolu] au début du sujet de votre discussion.

Hors ligne

#24 Le 02/12/2012, à 22:20

compte supprimé

Re : Impossible de créer une nouvelle instance Jeu[Résolu]

Voili voilà sans doute la version finale.

Je pouvais plus me connecter depuis vendredi jusqu'à maintenant.

On peut jouer contre plusieurs intelligences artificielles.
Juste besoin de lire le readme.txt pour plus d'explications.


http://www2.zippyshare.com/v/42181295/file.html

Le but du jeu est simple: manger les graines de l'autre joueur.
Pour ca, on répartit les graines dans les trous consécutifs en allant dans le sens positif(trigonométrique). Si la dernière graine posée est sur un trou   à 2 ou 3 graines. On les mange si les trous précédents contiennent aussi 2 ou 3 graines on fait pareil jusqu'à notre propre camp.

On n'a pas le droit d'affamer le joueur adverse si c'était le cas, on peut jouer le coup mais on ne prend pas les graines. Si celui-ci n'a plus de graines, nous sommes obligés de le nourrir si c'est impossible, la partie s'achève. (tu étais dans ce cas là. )

Le premier qui a 25 graines gagne la partie.
ou s'il reste moins de 6 graines, la partie s'achève. Celui qui en a le plus gagne la partie.


Bon jeu. big_smile

#25 Le 03/12/2012, à 08:56

binnette

Re : Impossible de créer une nouvelle instance Jeu[Résolu]

Merci pour les explications, je teste ça à l'occasion.


Avez-vous consulté la documentation et demandé à Google ?
Merci d'être précis. Qui fait quoi et comment ? Donnez le constructeur, le modèle et l'architecture de votre machine.
Demandé traitée ? Ajoutez [Résolu] au début du sujet de votre discussion.

Hors ligne