diff --git a/lab5/README.md b/lab5/README.md index bec1b20a471113aa609c98532b70f42afd47c3db..f2a1287cb7530d3af77d1f539d7c090d1fedd3cc 100644 --- a/lab5/README.md +++ b/lab5/README.md @@ -1,9 +1,11 @@ Cedric Dos Reis +IHM + # lab5 - IHM Read `./src/README.md` for installation guide - + ## Features * User move the caracter within a path using arrow key. @@ -25,15 +27,15 @@ Read `./src/README.md` for installation guide ### Flask server with 2 routes Read `./src/README.md` for installation guide - + #### Routes -`/get/map/<id>` : get an 1D array of string defining the map strcuture. `<id>` : file name of the map (without extension). - +`/get/map/<id>` : get an 1D array of string defining the map structure. `<id>` : file name of the map (without extension). + `/get/maps/` : get a 2D array of string which contains the list of maps in `./src/maps/` (This route is not used). - + ## Features to be added -* Let the user choose which map he wants to play in. This can actually be done by changing an argument in the code : at line 71 of `./src/static/js/GameManager.js`, change the first argument with one of these values : `map1`, `map2` or `map3`. You will need to reload the cache to see the new map `CTRL+F5`. +* Let the user choose which map he wants to play in. This can actually be done by changing an argument in the code : at line 73 of `./src/static/js/GameManager.js`, change the first argument with one of these values : `map1`, `map2` or `map3`. You will need to reload the cache to see the new map `CTRL+F5`. -* Score. \ No newline at end of file +* Manage & display the score. \ No newline at end of file diff --git a/lab5/src/README.md b/lab5/src/README.md index 7fe85b0e5c72d931265fe13b178601b0a134cff1..793092c677affd592f155999b837ce531da7b4df 100644 --- a/lab5/src/README.md +++ b/lab5/src/README.md @@ -6,37 +6,37 @@ 1. Install `virtualenv` package and create a new environment in the `./src` folder project - On Linux and macOS : + On Linux and macOS : ``` python3 -m virtualenv env ``` - - On Windows : - -``` -python -m virtualenv env -``` + + On Windows : + + ``` + python -m virtualenv env + ``` 2. Activate the virtual environment with : - On Linux and macOS : + On Linux and macOS : -``` -source env/bin/activate -``` + ``` + source env/bin/activate + ``` - On Windows : + On Windows : -``` -.\env\Scripts\activate -``` + ``` + .\env\Scripts\activate + ``` 3. Then install all packages dependencies in `requirements.txt` : -```python -pip install -r requirements.txt -``` + ``` + pip install -r requirements.txt + ``` 4. Define environment variables @@ -46,13 +46,13 @@ pip install -r requirements.txt export FLASK_ENV=development export FLASK_APP=app.py ``` - - On Windows : - -``` -set FLASK_ENV=development -set FLASK_APP=app.py -``` + + On Windows : + + ``` + set FLASK_ENV=development + set FLASK_APP=app.py + ``` ## Starting the web server (REST API) @@ -60,10 +60,15 @@ set FLASK_APP=app.py python -m flask run ``` + + ## Starting the web client http://localhost:5000/ -or + +or + + 127.0.0.1:5000 diff --git a/lab5/src/static/js/GameManager.js b/lab5/src/static/js/GameManager.js index 57336dc5bfc9f15b9dd8721577d0fda08cefe9d0..b8e174f957faa2b253f75420941d74730a55ab0e 100644 --- a/lab5/src/static/js/GameManager.js +++ b/lab5/src/static/js/GameManager.js @@ -70,7 +70,7 @@ function main() { //create objects // load map from image - [plane, walls, foods, playerObj, path, enemies_spawns] = mapGenerator.generateMap("map1", scene); + [playing, plane, walls, foods, playerObj, path, enemies_spawns] = mapGenerator.generateMap("map1", scene); player = new Player(playerObj); // spawn enemies @@ -114,6 +114,7 @@ function spawnEnemy(){ enemies.push(new Enemy(enemy)); } +// check if there is any enemy in the same box of the player function checkCollision() { let[playerX, playerY] = player.getCoordinates(); enemies.forEach(enemy => { diff --git a/lab5/src/static/js/MapGenerator.js b/lab5/src/static/js/MapGenerator.js index b4f7ea3d2cd04f85e1700d0319c908d36e5368e4..2fea92eb7cc6bf0f664774d97f229675a05af8ff 100644 --- a/lab5/src/static/js/MapGenerator.js +++ b/lab5/src/static/js/MapGenerator.js @@ -2,6 +2,10 @@ function convert2Dto1D(x, y, sz){ return (y * sz) + x; } +function convertCoordToPos(c,sz){ + return -c + (sz - 1)/2; +} + class MapGenerator { constructor() {} @@ -35,6 +39,7 @@ class MapGenerator { map_content = JSON.parse(request.responseText); }else { alert(request.responseText); + return false; } @@ -47,6 +52,7 @@ class MapGenerator { i = convert2Dto1D(x,y,SIZE); switch (map_content[i]){ // + // ******** Walls ******** case "WALL": offsetX = 1; offsetY = 1; @@ -84,14 +90,15 @@ class MapGenerator { scene.add(wall); walls.push(wall); break; - + + // ******** Food ******** case "FOOD": var geometry = new THREE.SphereGeometry(0.1); var material = new THREE.MeshBasicMaterial( {color: 0xffffff} ); var food = new THREE.Mesh( geometry, material ); food.name = "food" + foods.length; - food.position.x = -x + (SIZE - 1)/2; - food.position.y = -y + (SIZE - 1)/2; + food.position.x = convertCoordToPos(x,SIZE);//-x + (SIZE - 1)/2; + food.position.y = convertCoordToPos(y,SIZE);; scene.add(food); foods.push(food); @@ -99,43 +106,48 @@ class MapGenerator { path[y].push(1); //define path break; + // ******** Special Food ******** case "S_FOOD": - // special foo object spawn var geometry = new THREE.SphereGeometry(0.2); var material = new THREE.MeshBasicMaterial( {color: 0x00ff00} ); var food = new THREE.Mesh( geometry, material ); - food.name = "s_food" + foods.length; - food.position.x = -x + (SIZE - 1)/2; - food.position.y = -y + (SIZE - 1)/2; + food.name = "sfood" + foods.length; + food.position.x = convertCoordToPos(x,SIZE); + food.position.y = convertCoordToPos(y,SIZE); + scene.add(food); foods.push(food); + path[y].push(1); //define path break; - + + // ******** Path ******** case "": path[y].push(1); break; + // ******** Enemy Spawn ******** case "SPAWN_E": - var spawnX = (-x + (SIZE - 1)/2); - var spawnY = (-y + (SIZE - 1)/2); + var spawnX = convertCoordToPos(x,SIZE); + var spawnY = convertCoordToPos(y,SIZE);; enemies_spawn_zones.push({"x":spawnX, "y": spawnY}); path[y].push(1); break; - + // ******** Player Spawn ******** case "SPAWN_P": // Player spawn zone var geometry = new THREE.SphereGeometry(0.4); var material = new THREE.MeshBasicMaterial( {color: 0xffff00} ); player = new THREE.Mesh( geometry, material ); - player.position.x = -x + (SIZE - 1)/2; - player.position.y = -y + (SIZE - 1)/2; + player.position.x = convertCoordToPos(x,SIZE); + player.position.y = convertCoordToPos(y,SIZE);; player.name = "Player"; scene.add(player); path[y].push(1); //define path break; + // ******** Walls done ******** case "WALL_DONE": path[y].push(0); break; @@ -144,6 +156,6 @@ class MapGenerator { } } - return [plane, walls, foods, player, path, enemies_spawn_zones]; + return [true, plane, walls, foods, player, path, enemies_spawn_zones]; } } \ No newline at end of file