diff --git a/MAVENProject/src/main/java/entity/Character.java b/MAVENProject/src/main/java/entity/Character.java
index 79ad89d748dd9cb7d3ab70382ba454f29717d237..b187b4a00d3e835afd990913f520e7ca27a7822d 100644
--- a/MAVENProject/src/main/java/entity/Character.java
+++ b/MAVENProject/src/main/java/entity/Character.java
@@ -26,6 +26,8 @@ public class Character extends Entity{
     private int clef;
     private Map<String,Double> tableCommande; //table des commandes du perso
 
+    private Obstacle obstacleBeneath = Jeu.sol;
+
     //private BufferedImage sprite;
 
     public Character(Coordonnees c, double vitesseMax, double m, double impSaut){
@@ -66,7 +68,7 @@ public class Character extends Entity{
     }
 
     public void collisionGestion(){
-        List<Obstacle> listeObstaclesInVoisinage = obstacleInVoisinage();
+        List<Obstacle> listeObstaclesInVoisinage = getObstacleTable();
         //stocke l'obstacle avec lequel il y a eu collision
         HashMap<Obstacle,PositionCollision> collisionsPresentes = new HashMap<Obstacle,PositionCollision>();
         
@@ -79,30 +81,39 @@ public class Character extends Entity{
 
         //on set alpha a 0 (on suppose qu'il est en l'air)
         alpha = 0;
+        if (this.hitBox.getExtremites().get("BasDroite").getZ()+entityHEIGHT/2-obstacleBeneath.getHitbox().getExtremites().get("HautDroite").getZ()>-1 && this.coord.getX()>=obstacleBeneath.getHitbox().getExtremites().get("BasGauche").getX() && this.coord.getX()<=obstacleBeneath.getHitbox().getExtremites().get("BasDroite").getX()) {
 
-        //on parcourt pour tester si il est sur un block
-        for (int i=0;i<collisionsPresentes.size();i++){
-            //si on trouve on sort de la boucle (pas besoin d'aller plus loin), on n'étudie qui si on ne donne pas de commande
-            if (tableCommande.get("CommandZ") != 0){
-                break;
-            }
-            if (collisionsPresentes.get(listeObstaclesInVoisinage.get(i)) == BAS){           
-                this.vitesseActuZ = 0;
-                this.setCoord(new Coordonnees(this.getCoord().getX(), getObstacleTable().get(i).getHitbox().getExtremites().get("HautGauche").getZ()-entityHEIGHT/2));
-                alpha = 1;
-                break;
+            alpha = 1;
+        }
+        else {
+            obstacleBeneath=Jeu.sol;
+            //on parcourt pour tester si il est sur un block
+            for (int i=0;i<collisionsPresentes.size();i++){
+                //si on trouve on sort de la boucle (pas besoin d'aller plus loin), on n'étudie qui si on ne donne pas de commande
+                if (tableCommande.get("CommandZ") != 0){
+                    break;
+                }
+                if (collisionsPresentes.get(listeObstaclesInVoisinage.get(i)) == BAS ){
+                    this.vitesseActuZ = 0;
+                    this.setCoord(new Coordonnees(this.getCoord().getX(), getObstacleTable().get(i).getHitbox().getExtremites().get("HautGauche").getZ()-entityHEIGHT/2-1));
+                    obstacleBeneath=listeObstaclesInVoisinage.get(i);
+                    alpha = 1;
+                    break;
+                }
             }
+
+
         }
 
         //on gere les collisions laterales et celle du haut
         for (int i=0;i<collisionsPresentes.size();i++){
 
             if (collisionsPresentes.get(listeObstaclesInVoisinage.get(i)) == DROITE && this.vitesseActuX < 0){
-                this.setCoord(new Coordonnees(listeObstaclesInVoisinage.get(i).getHitbox().getExtremites().get("HautDroite").getX()+entityWIDTH/2, this.getCoord().getZ()));
+                this.setCoord(new Coordonnees(listeObstaclesInVoisinage.get(i).getHitbox().getExtremites().get("HautDroite").getX()+entityWIDTH/2+1, this.getCoord().getZ()));
                 break;
             }
             else if (collisionsPresentes.get(listeObstaclesInVoisinage.get(i)) == GAUCHE && this.vitesseActuX > 0){
-                this.setCoord(new Coordonnees(listeObstaclesInVoisinage.get(i).getHitbox().getExtremites().get("HautGauche").getX()-entityWIDTH/2, this.getCoord().getZ()));
+                this.setCoord(new Coordonnees(listeObstaclesInVoisinage.get(i).getHitbox().getExtremites().get("HautGauche").getX()-entityWIDTH/2-1, this.getCoord().getZ()));
                 break;
             }
 
@@ -168,7 +179,8 @@ public class Character extends Entity{
         getGameCommand();
         deplacements();
         collisionGestion();
-        updateVoisinage();
+        System.out.println(obstacleBeneath);
+        //updateVoisinage();
         this.setHitBox(new HitBox(this.getCoord(),entityHEIGHT,entityWIDTH)); // mise à jour moins crade pour l'instant
         if (tableCommande.get("CommandAttack") == 1) attaque();
         updateNbFrameInvincible();
@@ -176,6 +188,10 @@ public class Character extends Entity{
         
     }
 
+    public Obstacle getObstacleBeneath() {
+        return obstacleBeneath;
+    }
+
     private void updateNbFrameInvincible(){
         nbFramesInvincible = Math.max(0, nbFramesInvincible-1);
     }
diff --git a/MAVENProject/src/main/java/jeu/Jeu.java b/MAVENProject/src/main/java/jeu/Jeu.java
index c7818d8988f6fb13a57321fc855a44ff8119d95f..e23ec07f974f02c75c5c50751c166c391d21d4eb 100644
--- a/MAVENProject/src/main/java/jeu/Jeu.java
+++ b/MAVENProject/src/main/java/jeu/Jeu.java
@@ -32,7 +32,7 @@ public class Jeu implements Game{
 
     //Coordonees de debut du personnage
     static final double zdebut = 0;
-    static final double xdebut = 300;
+    static final double xdebut = 200;
 
     //perso
     static Character gameCharacter;
@@ -60,7 +60,7 @@ public class Jeu implements Game{
 
     private boolean characterAttacking = false; //boolean necessaire pour rendre l'animation d'attaque prioritaire
 
-    public static Obstacle sol = new Obstacle(new HitBox(new Coordonnees(200,700),1,1000000));
+    public static Obstacle sol = new Obstacle(new HitBox(new Coordonnees(200,700),56,1000000));
 
     public static List<Obstacle> obstacleTable = new ArrayList<>();
     private static List<Monster> monsterList = new ArrayList<>();
@@ -68,10 +68,11 @@ public class Jeu implements Game{
     //private static List<Coffre> coffreTable = new ArrayList<>();
 
     public final static int TILES_DEFAULT_SIZE=32;
-    public final static float SCALE=1.5f;
+    public final static float SCALE=1.75f;
     public final static int TILES_IN_WIDTH = 60;
     public final static int TILES_IN_HEIGHT = 20;
     public final static int TILES_SIZE = (int) (TILES_DEFAULT_SIZE*SCALE);
+    LevelManager levelManager;
 
     public Jeu(String source) {
 
@@ -87,7 +88,7 @@ public class Jeu implements Game{
         /*A = new ArrayList<Double>();
         n = 0;*/
 
-
+        LevelManager levelManager = new LevelManager();
 
 
 
@@ -111,12 +112,16 @@ public class Jeu implements Game{
         
         
         //faut supp la pour table obstacles
+
+        obstacleTable= levelManager.generateObstacleTable();
         obstacleTable.add(sol);
 
-        obstacleTable.add(new Obstacle(new HitBox(new Coordonnees(300,550),32,128)));
+
+
+        /*obstacleTable.add(new Obstacle(new HitBox(new Coordonnees(300,550),32,128)));
         obstacleTable.add(new Obstacle(new HitBox(new Coordonnees(800, 625),150,50)));
         obstacleTable.add(new Obstacle(new HitBox(new Coordonnees(600, 662.5),75,50)));
-        obstacleTable.add(new Obstacle(new HitBox(new Coordonnees(450, 400),32,128)));
+        obstacleTable.add(new Obstacle(new HitBox(new Coordonnees(450, 400),32,128)));*/
 
         //coffreTable.add(new Coffre(new HitBox(new Coordonnees(900, 685),30,30))); //table des coffres
 
@@ -189,7 +194,8 @@ public class Jeu implements Game{
         }
 
         if (!characterAttacking){ //animation d'attaque prioritaire
-            if (gameCharacter.getAlpha() == 0) movement = "character_jump"; // pour savoir si il jump ou non
+            if ( gameCharacter.getAlpha()==0 || gameCharacter.getHitBox().getExtremites().get("BasDroite").getZ()+gameCharacter.getEntityHEIGHT()/2-gameCharacter.getObstacleBeneath().getHitbox().getExtremites().get("HautDroite").getZ()<-1) {
+                movement = "character_jump";} // pour savoir si il jump ou non
             else{
                 if (Right && Left)movement = "character_idle";
                 else if (Right || Left){
diff --git a/MAVENProject/src/main/java/jeu/Painter.java b/MAVENProject/src/main/java/jeu/Painter.java
index 72cb3914397f813e734fc9274bf0847542acecee..a0e0bbd6af7974b478fd2b95d9a4d4cf271a6692 100644
--- a/MAVENProject/src/main/java/jeu/Painter.java
+++ b/MAVENProject/src/main/java/jeu/Painter.java
@@ -36,7 +36,7 @@ public class Painter implements GamePainter{
 
     private Painter painter;
     public Painter() {
-        levelManager = new LevelManager(painter);
+
     }
 
     @Override
@@ -48,12 +48,9 @@ public class Painter implements GamePainter{
         Graphics2D crayon = (Graphics2D) im.getGraphics();
         crayon.setColor(Color.blue);
 
-
-        levelManager.draw();
         drawMap(crayon);
-
         drawSol(crayon);
-        drawObstacleBis(crayon,test,"plateforme.png"); // A changer
+        //drawObstacleBis(crayon,test,"plateforme.png"); // A changer
         drawLifePoints(crayon);
         drawMonsters(crayon);
         drawKunais(crayon);
diff --git a/MAVENProject/src/main/java/map/LevelManager.java b/MAVENProject/src/main/java/map/LevelManager.java
index 677b0e3baa520a606e6da66f6f208be561225783..f602c207475c82f167e095da6764a9796d5bd36d 100644
--- a/MAVENProject/src/main/java/map/LevelManager.java
+++ b/MAVENProject/src/main/java/map/LevelManager.java
@@ -2,6 +2,8 @@ package map;
 
 import java.awt.Graphics;
 import java.awt.image.BufferedImage;
+import java.util.ArrayList;
+import java.util.List;
 
 import environnement.Coordonnees;
 import environnement.HitBox;
@@ -16,8 +18,7 @@ public class LevelManager {
 	private BufferedImage[] levelSprite;
 	private Level levelOne;
 
-	public LevelManager(Painter painter) {
-		this.painter = painter;
+	public LevelManager() {
 		importOutsideSprites();
 		levelOne = new Level(LoadSave.GetLevelData());
 	}
@@ -32,16 +33,18 @@ public class LevelManager {
 			}
 	}
 
-	public void draw() {
+	public List<Obstacle> generateObstacleTable() {
+		List<Obstacle> liste = new ArrayList<>();
 		for (int j = 0; j < Jeu.TILES_IN_HEIGHT; j++)
 			for (int i = 0; i < Jeu.TILES_IN_WIDTH; i++) {
 				int index = levelOne.getSpriteIndex(i, j);
-				/*g.drawImage(levelSprite[index], Jeu.TILES_SIZE * i, Jeu.TILES_SIZE * j, Jeu.TILES_SIZE, Jeu.TILES_SIZE, null);*/
+				//g.drawImage(levelSprite[index], Jeu.TILES_SIZE * i, Jeu.TILES_SIZE * j, Jeu.TILES_SIZE, Jeu.TILES_SIZE, null);
 				if (index<=14) {
-					Jeu.obstacleTable.add(new Obstacle(new HitBox(new Coordonnees(Jeu.TILES_SIZE * i, Jeu.TILES_SIZE * j), Jeu.TILES_SIZE, Jeu.TILES_SIZE)));
-					System.out.println(jeu.getObstacleTable().size());
+					liste.add(new Obstacle(new HitBox(new Coordonnees(Jeu.TILES_SIZE * i, Jeu.TILES_SIZE * j-300), Jeu.TILES_SIZE, Jeu.TILES_SIZE)));
+					System.out.println(liste.size());
 				}
 			}
+		return liste;
 	}
 
 	public void update() {