diff --git a/css/main.css b/css/main.css index 71615bc..6aa0eb5 100644 --- a/css/main.css +++ b/css/main.css @@ -54,6 +54,48 @@ transform-origin: 0; } +/* Items */ +.boots1 { + background: url(../img/items.png) 0px -95px; + width: 30px; + background-size: 500px; + margin-left: 5px; + margin-top: 5px; +} + +.boots2 { + background: url(../img/items.png) -32px -95px; + width: 30px; + background-size: 500px; + margin-left: 5px; + margin-top: 5px; +} + +.boots3 { + background: url(../img/items.png) -64px -95px; + width: 30px; + background-size: 500px; + margin-left: 5px; + margin-top: 5px; +} + +.boots4 { + background: url(../img/items.png) -96px -95px; + width: 30px; + background-size: 500px; + margin-left: 5px; + margin-top: 5px; +} + +.boots5 { + background: url(../img/items.png) -128px -95px; + width: 30px; + background-size: 500px; + margin-left: 5px; + margin-top: 5px; +} + +/* Guy */ .guy1-0-0 { background: url(../img/guy_sprite.png) 0px 0px; } diff --git a/img/items.png b/img/items.png new file mode 100644 index 0000000..3d04c25 Binary files /dev/null and b/img/items.png differ diff --git a/js/main.js b/js/main.js index 10d0135..b22ccb8 100644 --- a/js/main.js +++ b/js/main.js @@ -77,6 +77,11 @@ socket.on('replaceUtil', function (obj) { $("."+obj["mapY"]+'-'+obj["mapX"]+'.'+obj["name"]).removeClass(obj["name"]).addClass(obj["newName"]); }); +socket.on('dropItem', function (obj) { + console.log(obj); + domMap.append(''); +}); + function addNewPlayer(player, id) { if($("#"+id).length==0) { var modeClass = "default_ship"; diff --git a/s_map.js b/s_map.js index a5e98a6..4e06f18 100644 --- a/s_map.js +++ b/s_map.js @@ -137,17 +137,17 @@ module.exports = { } } - var treasureSet = false; + var treasureCnt = 5; var foundLand = true; - while (!treasureSet && foundLand) { + while (treasureCnt>0 && foundLand) { foundLand = false; for (var w = 0; w < width; w++) { //add chest for (var h = 0; h < height; h++) { if(map[w][h] == "6") { foundLand = true; } - if (map[w][h] == "6" && Math.random() < 0.00001 && !treasureSet) { - treasureSet = true; + if (map[w][h] == "6" && Math.random() < 0.00001 && treasureCnt>0) { + treasureCnt--; utilMap[w][h] = "treasure-closed"; console.log(w, h, "treasure") } diff --git a/server.js b/server.js index a12a118..bed77cf 100644 --- a/server.js +++ b/server.js @@ -11,34 +11,78 @@ app.use(express.static(__dirname + '/')); var server = require('http').Server(app); var io = require('socket.io')(server); var map = require("./s_map.js"); -var mapWidth = 100; -var mapHeight = 100; +var mapWidth = 20; +var mapHeight = 20; var maxX = mapWidth * 32; var maxY = mapHeight * 32; -var newmap = map.generateMap(mapWidth,mapHeight); +var newmap = map.generateMap(mapWidth, mapHeight); var cssMap = newmap["cssMap"]; var map = newmap["map"]; var utilMap = newmap["utilMap"]; var defaultMvnt = 2; +var items = [ + "boots1", + "boots2", + "boots3", + "boots4", + "boots5", +]; + +var itemPlayerChanges = { + "boots1" : { + changeMovementLand : 1, + text : "Geschwindigkeit an Land +1" + }, + "boots2" : { + changeMovementLand : 2, + text : "Geschwindigkeit an Land +2" + }, + "boots3" : { + changeMovementLand : 3, + text : "Geschwindigkeit an Land +3" + }, + "boots4" : { + changeMovementLand : 4, + text : "Geschwindigkeit an Land +4" + }, + "boots5" : { + changeMovementLand : 5, + text : "Geschwindigkeit an Land +5" + }, +} + server.listen(PORT); -console.log("Pirate running on port:"+PORT); -io.on('connection', function(socket){ +console.log("Pirate running on port:" + PORT); +io.on('connection', function (socket) { var playerActionTimer = null; userCnt++; console.log("New user", socket.id); allSockets[socket.id] = socket; allPlayers[socket.id] = { - keys : {}, - x : 10, - y : 10, - mvnt : defaultMvnt, - special : {}, - mode : 0 //0 = ship //1 foot + keys: {}, + x: 10, + y: 10, + mvnt: defaultMvnt, + special: {}, + mode: 0, //0 = ship //1 foot + items: { + slot1: null, + slot2: null, + slot3: null + } }; var player = allPlayers[socket.id]; - io.sockets.emit("newPlayer", { player : allPlayers[socket.id], id : socket.id }); + io.sockets.emit("newPlayer", { + player: allPlayers[socket.id], + id: socket.id, + items: { + slot1: null, + slot2: null, + slot3: null + } + }); socket.on('disconnect', function () { userCnt--; @@ -49,16 +93,16 @@ io.on('connection', function(socket){ }); socket.on('getmap', function () { - + newmap["allPlayers"] = allPlayers; socket.emit("getmap", newmap); }); socket.on('keyUp', function (key) { allPlayers[socket.id]["keys"][key] = false; - if(key==32) { //space + if (key == 32) { //space player["action"] = false; - if(playerActionTimer) { + if (playerActionTimer) { clearTimeout(playerActionTimer); playerActionTimer = null; } @@ -72,38 +116,51 @@ io.on('connection', function(socket){ socket.on('actionKey', function (key) { var groundUnder = getGroundUnderPlayer(player["x"], player["y"]); - if(player["mode"] == 0) { //ship - if(groundUnder>=1) { //its nearly land + if (player["mode"] == 0) { //ship + if (groundUnder >= 1) { //its nearly land player["mode"] = 1; player["special"]["modechange"] = true; } } else { - if(groundUnder<=1) { //its water land + if (groundUnder <= 1) { //its water land player["mode"] = 0; player["special"]["modechange"] = true; } }; - console.log(player["mode"],groundUnder); + console.log(player["mode"], groundUnder); var obj = getNearestObject(player["x"], player["y"]); - if(obj) { + if (obj) { obj["socketId"] = socket.id; - if(playerActionTimer) { + if (playerActionTimer) { clearTimeout(playerActionTimer); playerActionTimer = null; } - if(obj["name"] == "forest") { - playerActionTimer = setTimeout(function() { + if (obj["name"] == "forest") { + playerActionTimer = setTimeout(function () { utilMap[obj["mapY"]][obj["mapX"]] = ""; io.sockets.emit("removeUtil", obj); socket.emit("stopAnimation", 2000); }, 2000); //2 Secs socket.emit("animation", 2000); - } else if(obj["name"] == "treasure-closed") { - playerActionTimer = setTimeout(function() { + } else if (obj["name"] == "treasure-closed") { + playerActionTimer = setTimeout(function () { utilMap[obj["mapY"]][obj["mapX"]] = "treasure-open"; obj["newName"] = "treasure-open"; io.sockets.emit("replaceUtil", obj); socket.emit("stopAnimation", 2000); + + let randomItem = getRandomItem(); + let nearFieldCoords = getNearEmptyField(obj["mapX"], obj["mapY"]); + + utilMap[nearFieldCoords["y"]][nearFieldCoords["x"]] = randomItem; + let newObj = { + mapY: nearFieldCoords["y"], + mapX: nearFieldCoords["x"], + newName: randomItem + } + io.sockets.emit("dropItem", newObj); + console.log("newObj", newObj) + }, 2000); //2 Secs socket.emit("animation", 2000); } @@ -111,43 +168,61 @@ io.on('connection', function(socket){ } player["action"] = true; }); - }); +function getNearEmptyField(x, y) { + for(var i=-1;i<2;i++) { + for(var k=-1;k<2;k++) { + console.log("check",i, k, y+i, x+k, utilMap[y+i][x+k]) + if(utilMap[y+i][x+k] == "") { + return { + y : y+i, + x : x+k + } + } + } + } +} + +function getRandomItem() { + console.log("rnd", items.length, getRandomNumber(0, items.length), items) + return items[getRandomNumber(0, items.length)]; +} + function getNearestObject(x, y) { - var mapX = Math.floor(x/32); - var mapY = Math.floor(y/32); + var mapX = Math.floor(x / 32); + var mapY = Math.floor(y / 32); var obj = null; - if(utilMap[mapY][mapX]!="") { + if (utilMap[mapY][mapX] != "") { obj = { - mapX : mapX, - mapY : mapY, - name : utilMap[mapY][mapX] + mapX: mapX, + mapY: mapY, + name: utilMap[mapY][mapX] } } else { - var rX = x%32; - var rY = y%32; + var rX = x % 32; + var rY = y % 32; var sX = 0; var sY = 0; - if(rX>6 && rX<26) { //He stands in the middle of the field (left-><-right) - if(rY<16) { //go Up + if (rX > 6 && rX < 26) { //He stands in the middle of the field (left-><-right) + if (rY < 16) { //go Up sY = -1; } else { //go Down sY = 1; } - } else if(rY>6 && rY<26) { //He stands in the middle of the field (up-><-down) - if(rX<16) { //go left + } else if (rY > 6 && rY < 26) { //He stands in the middle of the field (up-><-down) + if (rX < 16) { //go left sX = -1; } else { //go right sX = 1; } } - - if(utilMap[mapY+sY][mapX+sX]!="") { + + if (utilMap[mapY + sY][mapX + sX] != "") { obj = { - mapY : mapY+sY, - mapX : mapX+sX, - name : utilMap[mapY+sY][mapX+sX] + mapY: mapY + sY, + mapX: mapX + sX, + name: utilMap[mapY + sY][mapX + sX] } } } @@ -156,31 +231,31 @@ function getNearestObject(x, y) { } -setInterval(function() { - for(var id in allPlayers) { +setInterval(function () { + for (var id in allPlayers) { var player = allPlayers[id]; - for(var key in player["keys"]) { - if(player["keys"][key]) { //if key is pressed + for (var key in player["keys"]) { + if (player["keys"][key]) { //if key is pressed var tx = 0; var ty = 0; - + var mvnt = player["mvnt"]; - if(key==37) { //left + if (key == 37) { //left tx = -1 * mvnt; - } else if(key==38) { //top + } else if (key == 38) { //top ty = -1 * mvnt; - } else if(key==39) { //right + } else if (key == 39) { //right tx = mvnt; - } else if(key==40) { //bottom + } else if (key == 40) { //bottom ty = mvnt; } - if(!player["action"]) { - var newX = player["x"]+tx; - var newY = player["y"]+ty; - + if (!player["action"]) { + var newX = player["x"] + tx; + var newY = player["y"] + ty; + var groundUnderPlayer = getGroundUnderPlayer(newX, newY); - if(checkPlayerPosition(newX, newY, groundUnderPlayer, player)) { + if (checkPlayerPosition(newX, newY, groundUnderPlayer, player)) { player["x"] = newX; player["y"] = newY; player["mvnt"] = getPlayerMvnt(player, groundUnderPlayer); @@ -190,42 +265,42 @@ setInterval(function() { } } io.sockets.emit("setpos", allPlayers); - for(var id in allPlayers) { + for (var id in allPlayers) { allPlayers[id]["special"] = {}; } -},20); +}, 20); function checkPlayerPosition(newX, newY, groundUnderPlayer, player) { - if(newX <0 || newY<0 || newX > maxX || newY > maxY) { + if (newX < 0 || newY < 0 || newX > maxX || newY > maxY) { return false; } - if(player["mode"]==0) { //ship - if(groundUnderPlayer < 0 || groundUnderPlayer > 2) { //dont move with ship on land + if (player["mode"] == 0) { //ship + if (groundUnderPlayer < 0 || groundUnderPlayer > 2) { //dont move with ship on land return false; } } else { - if(groundUnderPlayer == 7) { //forrest so dont move + if (groundUnderPlayer == 7) { //forrest so dont move return false; } } - + return true; } function getGroundUnderPlayer(newX, newY) { //0 = water; 10 = hard ground - if(newX <0 || newY<0 || newX > maxX || newY > maxY) { + if (newX < 0 || newY < 0 || newX > maxX || newY > maxY) { return 0; } - var mapX = Math.floor(newX/32); - var mapY = Math.floor(newY/32); + var mapX = Math.floor(newX / 32); + var mapY = Math.floor(newY / 32); var ground = cssMap[mapY][mapX]; var util = utilMap[mapY][mapX]; - if(util == "forest") { + if (util == "forest") { return 7; } var groundSplit = ground.split("_"); - if(groundSplit.length != 2) { - if(ground == "water") { + if (groundSplit.length != 2) { + if (ground == "water") { return 0; } return 10; //Ground @@ -233,22 +308,26 @@ function getGroundUnderPlayer(newX, newY) { //0 = water; 10 = hard ground return parseFloat(groundSplit[1]); } -function getPlayerMvnt(player, groundUnderPlayer) { - if(player["mode"]==0) { //ship - if(groundUnderPlayer===1) { +function getPlayerMvnt(player, groundUnderPlayer) { + if (player["mode"] == 0) { //ship + if (groundUnderPlayer === 1) { return 0.5; - } else if(groundUnderPlayer===2) { + } else if (groundUnderPlayer === 2) { return 0.1; } } else { - if(groundUnderPlayer===0) { + if (groundUnderPlayer === 0) { return 0.1; - } else if(groundUnderPlayer===1) { + } else if (groundUnderPlayer === 1) { return 0.5; - } else if(groundUnderPlayer===2) { + } else if (groundUnderPlayer === 2) { return 0.8; } return 1.5; } return defaultMvnt; +} + +function getRandomNumber(min, max) { //min (inclusive) and max (exclusive) + return Math.floor(Math.random() * (max - min + 1)) + min; } \ No newline at end of file