diff --git a/src/main/JeuPhysique.java b/src/main/JeuPhysique.java
index dfc2edbd48f73e5f7975f1b3dbb08023a206f79d..844079d897841b8dd44684e77e40c5f5bd6d02c8 100644
--- a/src/main/JeuPhysique.java
+++ b/src/main/JeuPhysique.java
@@ -24,6 +24,9 @@ public class JeuPhysique{
 	//le rendu
 	public Afficheur affiche;
 
+        public final static short MONSTRE=1;
+        public final static short HERO=2;
+        public final static short DECORS=3;
 	
 	int i=0;
 	
diff --git a/src/physique/Collision.java b/src/physique/Collision.java
index 55d1f03dc9af3eea14566634b2821373ea93d6aa..6923c43b345b6339dac2f8e53f7f4cde3061b5dc 100644
--- a/src/physique/Collision.java
+++ b/src/physique/Collision.java
@@ -11,12 +11,17 @@
 
 package physique;
 
+import static main.JeuPhysique.*;
+
 /**
  *
  * @author Pierre-Frederic Villard
  */
 public class Collision {
 
+    
+    public static int typeOfCollision = 0;
+    
     /**
      *
      */
@@ -46,11 +51,25 @@ public class Collision {
      * @return
      */
 	public static boolean collision(Objet o, Objet o2) {
-		if ((o.px >= o2.px + o2.width) || (o.px + o.width <= o2.px)
-				|| (o.py >= o2.py + o2.height) || (o.py + o.height <= o2.py)) {
-			return false;
-		}
-		return true;
+            typeOfCollision=0;
+            if (o2 instanceof ObjetMonstre)
+            {
+                typeOfCollision=MONSTRE;
+            }
+            if (o2 instanceof ObjetHeros)
+            {
+                typeOfCollision=HERO;
+            }
+            if (o2 instanceof ObjetMur)
+            {
+                typeOfCollision=DECORS;
+            }            
+            
+            if ((o.px >= o2.px + o2.width) || (o.px + o.width <= o2.px)
+                            || (o.py >= o2.py + o2.height) || (o.py + o.height <= o2.py)) {
+                    return false;
+            }
+            return true;
 	}
 
 	// permet de retourner la direction de collision
diff --git a/src/physique/Monde.java b/src/physique/Monde.java
index dfde3412faa0467d5ef8ac5c47bb7c45c02aa142..f20c584c0b809c38e9aab113112990dc207a16c9 100644
--- a/src/physique/Monde.java
+++ b/src/physique/Monde.java
@@ -43,6 +43,8 @@ public class Monde {
      */
 	public ArrayList<Objet> objets=new ArrayList<Objet>();
 	
+        
+        private int nbMurs=0;
 
     /**
      * les monstres
@@ -85,6 +87,9 @@ public class Monde {
      * @param dy */
 	public void addMur(int x, int y, int dx, int dy){
             objets.add(new ObjetMur(x,y,dx,dy));
+            objets.get(nbMurs).index=nbMurs;
+            nbMurs++;
+            
         }
         
         /** ajouter monstre
@@ -102,7 +107,7 @@ public class Monde {
             monstres.get(nbMonstres).vy=vy;
             monstres.get(nbMonstres).px=px;
             monstres.get(nbMonstres).py=py;
-            
+            monstres.get(nbMonstres).index=nbMonstres;
             
             nbMonstres++;
         }
@@ -124,7 +129,7 @@ public class Monde {
             heros.get(nbHeros).vy=vy;
             heros.get(nbHeros).px=px;
             heros.get(nbHeros).py=py;
-            
+            heros.get(nbHeros).index=nbHeros;
             
             nbHeros++;
         }
diff --git a/src/physique/MoteurPhysique.java b/src/physique/MoteurPhysique.java
index 32bb5ad07cfe1b0f49586cf27ce3692a930997e7..69bdf8b1f6b59d1866d2a2a97058aecacf8d4d62 100644
--- a/src/physique/MoteurPhysique.java
+++ b/src/physique/MoteurPhysique.java
@@ -13,7 +13,7 @@ package physique;
 
 import java.io.IOException;
 import java.util.ArrayList;
-
+import static main.JeuPhysique.*;
 import controle.Controle;
 
 //permet de g�rer la physique
@@ -35,7 +35,9 @@ public class MoteurPhysique {
         public boolean gravity=true;
         
         public float gravityValue=-0.04f;
-
+        
+        public int current_monster_index=0;
+        public int current_wall_index=0;
     /**
      * Construit un moteur par defaut
      * @throws IOException
@@ -49,15 +51,22 @@ public class MoteurPhysique {
      *
      */
 	public void update() {
+            
+                monde.balle.collision=0;
 		// mise a jour des objets
 		for (Objet o : monde.objets) {
 			o.update();
 			o.collision=0;
-		}
+                        		}
 
 		// mise a jour des monstres
 		for (ObjetMonstre monstre : monde.monstres) {
 			monstre.evolue();
+                        if (Collision.typeOfCollision==MONSTRE)
+                        {
+                            monde.balle.collision=MONSTRE;  
+                            current_monster_index=monstre.index;
+                        }
 		}
 
 		// gestion du controleur
@@ -123,7 +132,7 @@ public class MoteurPhysique {
                         monde.balle.vy = -1;
                     }                                      
                 }
-		monde.balle.collision=0;
+		
 
 		// mise a jour de la balle
 		monde.balle.update();
@@ -132,17 +141,6 @@ public class MoteurPhysique {
 		for (Objet obj : monde.objets) {
 
 			if (Collision.collision(monde.balle, obj)) {
-				//m.balle.collision = true;
-				//obj.collision=true;			
-				
-				//si collision vient de la gauche ou droite
-				if (Collision.collisionGauche(monde.balle,obj)
-						|| (Collision.collisionDroite(monde.balle,obj)))
-				{	monde.balle.px = monde.balle.px - monde.balle.vx;
-					monde.balle.vx-=monde.balle.ax;
-					monde.balle.vx = -monde.balle.vx;
-				}
-				
 				//si collision vient du haut
 				if (Collision.collisionHaut(monde.balle,obj))
 				{
@@ -168,8 +166,22 @@ public class MoteurPhysique {
 					monde.balle.py = monde.balle.py - monde.balle.vy;
 					monde.balle.vy=-monde.balle.vy;;
 				}
+                                
+                                //si collision vient de la gauche ou droite
+				if (Collision.collisionGauche(monde.balle,obj)
+						|| (Collision.collisionDroite(monde.balle,obj)))
+				{	monde.balle.px = monde.balle.px - monde.balle.vx;
+					monde.balle.vx-=monde.balle.ax;
+					monde.balle.vx = -monde.balle.vx;
+				}   
+                                current_wall_index=obj.index;
 			} 
+                                              
 		}
+                // Assign the last collision type if not a monster
+                if (monde.balle.collision==0)
+                   monde.balle.collision=Collision.typeOfCollision;
+
 	}
 
 }
diff --git a/src/physique/Objet.java b/src/physique/Objet.java
index 36c612f9589cf6af7cf406dbd7efe394a2b01cf9..07e1e4e7ac39875c680fc0d9ec7a994725a00b1e 100644
--- a/src/physique/Objet.java
+++ b/src/physique/Objet.java
@@ -107,6 +107,9 @@ public class Objet {
 
 	//permet de sauver les positions anterieur
 
+    // Index de l'élément parmis son type (Monstre , Mur, etc...)    
+    public int index;
+        
     /**
      *
      */
diff --git a/src/physique/ObjetMonstre.java b/src/physique/ObjetMonstre.java
index b8c1af4e61d4464b6da086dfe1cfbae78d38ed5e..6ef9ab0161e36e01fbe91e1a8fb09543014f18b3 100644
--- a/src/physique/ObjetMonstre.java
+++ b/src/physique/ObjetMonstre.java
@@ -40,7 +40,7 @@ public class ObjetMonstre extends Objet {
 
 	// lien vers le monde
 	Monde m;
-
+       
 	// par defaut
 
     /**
@@ -94,7 +94,7 @@ public class ObjetMonstre extends Objet {
      */
     public void evolue() {
 		
-		if (Collision.collision(this, m.balle))
+		if (Collision.collision(m.balle,this))
 			etat=Etat.COLLISION;
 		
 		// en fonction de l'�tat interne
diff --git a/test/miscellaneous/BouclePrincipaleCool.java b/test/miscellaneous/BouclePrincipaleCool.java
index 5b1c629867916334ad93596bd6f4e6f80ecabdf4..b243d86053895a47cab1c52ee251107b9bd83a8f 100644
--- a/test/miscellaneous/BouclePrincipaleCool.java
+++ b/test/miscellaneous/BouclePrincipaleCool.java
@@ -12,6 +12,9 @@ package miscellaneous;
 
 import main.BouclePrincipale;
 import controle.ControleurClavier;
+import main.JeuPhysique;
+import static main.JeuPhysique.*;
+import static physique.Collision.typeOfCollision;
 
 /**
  * 
@@ -20,6 +23,11 @@ import controle.ControleurClavier;
  */
 public class BouclePrincipaleCool extends BouclePrincipale{
     
+        public BouclePrincipaleCool() throws Exception{
+            //creation du jeu
+	    jeuPhysique = new JeuPhysique();
+        }
+    
     @Override
     public void lanceBouclePrincipale() throws Exception {
 		
@@ -56,6 +64,15 @@ public class BouclePrincipaleCool extends BouclePrincipale{
 			jeuPhysique.update();
 			jeuPhysique.render();
 			
+                        switch (jeuPhysique.moteurPhys.monde.balle.collision)
+                        {
+                            case MONSTRE: System.out.println("Aie avec monstre numéro "+jeuPhysique.moteurPhys.current_monster_index);break;
+                            case HERO: System.out.println("Copain !");break;
+                            case DECORS: System.out.println("Pas mal avec mur numéro "+jeuPhysique.moteurPhys.current_wall_index);break;
+                            default: break;
+                        }
+                        
+                        
 			//apres le render en nanos
 			long timafter=System.nanoTime();
 				
diff --git a/test/testMario.java b/test/testMario.java
index 005fe4593b1fbc674bfc274783bae2ce2a0979e5..3eda4a23cbbbb0865ee532699ed540a3132c50ec 100644
--- a/test/testMario.java
+++ b/test/testMario.java
@@ -23,6 +23,7 @@ import physique.Monde;
 import physique.MoteurPhysique;
 import physique.ObjetMur;
 import afficheur.Sprites;
+import miscellaneous.BouclePrincipaleCool;
 
 public class testMario {
     
@@ -88,7 +89,7 @@ public class testMario {
 	//on creer l'afficheur du monde
 	affiche=new Afficheur(moteurPhys.monde);
         // Gestion de la boucle principale
-        BouclePrincipale maBoucle= new BouclePrincipale();
+        BouclePrincipaleCool maBoucle= new BouclePrincipaleCool();
         // Ajout du controler à le fenêtre
         maBoucle.cClavier=cClavier;
         // Ajout de la vue au jeu