diff --git a/lab5/src/static/js/GameManager.js b/lab5/src/static/js/GameManager.js
index 4396f118510c20839f8adf03623748b2ff2de24e..7a608d6c9a407dd5e20fec08e17e8a4a551f2b07 100644
--- a/lab5/src/static/js/GameManager.js
+++ b/lab5/src/static/js/GameManager.js
@@ -27,6 +27,7 @@ var camera;
 var renderer;
 var player;
 var enemies = [];
+var foods = []
 var walls = [];
 var mapGenerator
 
@@ -44,24 +45,17 @@ function main() {
 	document.body.appendChild(renderer.domElement);
 	
 	//create objects
-
-	var geometry = new THREE.BoxGeometry(1,1,1);
-	var material = new THREE.MeshBasicMaterial({color: 0x00ff00});
-	var cube = new THREE.Mesh(geometry, material);
-	var cube2 = new THREE.Mesh(geometry, material);
-	walls.push(cube);
-	walls.push(cube2);
+	var plane;
 	scene.add(camera);
-	scene.add(cube);
-	scene.add(cube2);
-	scene.add(mapGenerator.generateMap(1));
-	camera.position.z = 10;
+	[plane, walls, [x,y], foods] = mapGenerator.generateMap(1, scene);
+
+	// get all wall object from scene
+	
+
+	camera.position.z = 12;
 	camera.position.x = 0;
 	/*camera.position.y = -10;
-	camera.rotation.x = 0.5;*/ 
-
-	cube.position.x = 0;
-	cube.position.x = 2;
+	camera.rotation.x = 0.5;*/
 
 
 	// player
@@ -70,9 +64,8 @@ function main() {
 	var sphere = new THREE.Mesh( geometry, material );
 	sphere.name = 'player';
 	scene.add(sphere);
-	player =  new Player(0,2,sphere);
+	player =  new Player(x,y,sphere);
 
-	//console.log(sphere.position);
 	
 	function render(){
 		checkCollision();
@@ -121,6 +114,11 @@ function checkCollision() {
 			/*collisionResults[0].object.material.transparent = true;
 			collisionResults[0].object.material.opacity = 0.4;*/
 		}
+
+		/*collisionResults = ray.intersectObjects(foods);
+		if (collisionResults.length > 0 && collisionResults[0].distance < directionVector.length()) {
+			console.log('Miam');
+		}*/
 	}
 }
 
diff --git a/lab5/src/static/js/MapGenerator.js b/lab5/src/static/js/MapGenerator.js
index 42512ad0fdddab9aab106a0625199d359c3b982d..b05f0e533eba00c7356bd5fd08733fa37df33973 100644
--- a/lab5/src/static/js/MapGenerator.js
+++ b/lab5/src/static/js/MapGenerator.js
@@ -1,32 +1,109 @@
+function convert2Dto1D(x, y, size){
+    return (y * size) + x;
+}
+
 class MapGenerator {
+
+
     constructor() {
         this.size = 21;
     }
-    generateMap(id) {
-        var map;
 
-        //
-        fetch("/get/map/"+id+"/", { headers: { "Content-Type": "text/plain; charset=utf-8" }})
-            .then(res => res.json()) // parse response as JSON
-            .then(response => {
+    //// 2 dimension coordinates to 1 dimension
 
-                console.log("RESPONSE !!!!!!!!!!!!!!!!");
-                console.log(response);
-            })
-            .catch(err => {
-                // hide the modal
-                console.log(err);
-                alert("Sorry, there are no results for your search");
-            });
 
+    generateMap(id, scene) {
+        var map;
+        
+        var walls = [];
 
-        // create ground
+        var map_content = [];
+        let playerSpawnX = 0, playerSpawnY=0;
+
+        // create ground 
         var geometry = new THREE.PlaneGeometry( this.size, this.size );
         var material = new THREE.MeshBasicMaterial( {color: 0x000000, side: THREE.DoubleSide} );
         var plane = new THREE.Mesh( geometry, material );
+        scene.add(plane);
         plane.position.z -= 0.5;
+
+        // send http request
+        fetch("/get/map/"+id+"/", { headers: { "Content-Type": "text/plain; charset=utf-8" }})
+            .then(res => res.json()) // parse response as JSON
+            .then(response => {
+
+                // copy response to array
+                for (let i = 0; i < this.size*this.size; i++) {
+                    map_content.push(response[i]);
+                }
+
+                // loop through map content in 2 dimension to prepare to position walls in ground
+                let i = 0;
+                let offsetX, offsetY, wallWidth, wallHeight, wallPosX, wallPosY;
+                for (let y = 0; y < this.size; y++) {
+                    for (let x = 0; x < this.size; x++) {
+                        i = convert2Dto1D(x,y,this.size);
+                        
+                        switch (map_content[i]){ // 
+                            case "WALL":
+                                offsetX = 1;
+                                offsetY = 1;
+                                wallWidth = 1;
+                                wallHeight = 1;
+                                wallPosX = x;
+                                wallPosY = y;
+                            
+                                map_content[i] = '' ; //empty the box to prevent from creating 2 walls at the same spot
+                                
+                                // check for a horizontal line of wall
+                                while (map_content[convert2Dto1D(x + offsetX, y,this.size)] == 'WALL' & x + offsetX < this.size){
+                                    map_content[convert2Dto1D(x + offsetX, y,this.size)] = '';
+                                    wallWidth++;
+                                    offsetX++;
+                                }
+
+                                //check for a vertical line of wall only if it was not a horizonatl wall
+                                while (wallWidth <= 1 & map_content[convert2Dto1D(x, y + offsetY,this.size)] == 'WALL' & y + offsetY < this.size){
+                                    map_content[convert2Dto1D(x, y + offsetY,this.size)] = ''
+                                    wallHeight++;
+                                    offsetY++;
+                                }
+
+                                //create wall object
+                                var geometry = new THREE.BoxGeometry( wallWidth, wallHeight ,0.6);
+                                var material = new THREE.MeshBasicMaterial( {color: 0x0000FF} );
+                                var wall = new THREE.Mesh( geometry, material );
+                                // re-position coreectly
+                                wall.position.x = wallPosX - (this.size)/2 + wallWidth/2;
+                                wall.position.y = wallPosY - (this.size)/2 + wallHeight /2;
+                                // add to scene
+                                scene.add(wall);
+                                walls.push(wall);
+                                break;
+
+                            case "FOOD":
+                                break;
+
+                            case "S_FOOD":
+                                break;
+
+                            case "FOOD":
+                                break;
+
+                            case "SPAWN_P":
+                                playerSpawnX = x;
+                                playerSpawnY = y;
+                                break;
+
+                        }
+                    }
+                }
+                
+            })
+            .catch(err => {
+                alert(err);
+            });      
         
-        return plane;
+        return [plane, walls, [playerSpawnX, playerSpawnY]];
     }
-}
-
+}
\ No newline at end of file