This commit is contained in:
rofl256 2016-10-17 02:57:16 +02:00
parent 27574bfff9
commit 114e2bbc44
12 changed files with 376 additions and 1 deletions

2
.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
node_modules/

View File

@ -1 +1,14 @@
pirate # Pirate
NodeJs Multiplayer Mini Game
2. get the ALL the code: git clone this repo
3. go to dir and run: "npm install" in the cloned dir
2. start the server: node server.js
3. visit: http://serverIP:8080
4. Be RDY and then start the Game
5. move with arrow keys on your keyboard!
6. visit http://serverIP:8080 from multible pcs for multiplayer (if a player join, restart the game!)
----------------------------
LICENCE: MIT

61
css/main.css Normal file
View File

@ -0,0 +1,61 @@
.sprite {
width: 32px;
height: 32px;
position: absolute;
}
.water {
background: url(../img/ground_tiles.png) 192px 254px;
}
.ground {
background: url(../img/ground_tiles.png) 640px 541px;
}
.groundBottomLeft {
background: url(../img/ground_tiles.png) 288px 382px;
}
.groundLeft {
background: url(../img/ground_tiles.png) 288px 414px;
}
.groundTopLeft {
background: url(../img/ground_tiles.png) 288px 445px;
}
.groundTopRight {
background: url(../img/ground_tiles.png) 224px 443px;
}
.groundTop {
background: url(../img/ground_tiles.png) 256px 445px;
}
.groundRight {
background: url(../img/ground_tiles.png) 224px 414px;
}
.groundBottomRight {
background: url(../img/ground_tiles.png) 224px 382px;
}
.groundBottom {
background: url(../img/ground_tiles.png) 254px 381px;
}
.corner_wg1 {
background: url(../img/ground_tiles.png) 192px 445px;
}
.corner_wg2 {
background: url(../img/ground_tiles.png) 160px 445px;
}
.corner_wg3 {
background: url(../img/ground_tiles.png) 160px 413px;
}
.corner_wg4 {
background: url(../img/ground_tiles.png) 192px 413px;
}

BIN
img/ground_tiles.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 222 KiB

BIN
img/plain.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 152 B

22
index.html Normal file
View File

@ -0,0 +1,22 @@
<!DOCTYPE html>
<html lang="en">
<head>
<!-- Required meta tags always come first -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="x-ua-compatible" content="ie=edge">
<!-- <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" /> -->
<link rel="stylesheet" href="./css/main.css">
</head>
<body style="overflow:hidden;">
Pirate!!!
<div id="map">
</div>
<!-- jQuery and co -->
<script src="./js/jquery.min.js"></script>
<script src="./js/socket.io-1.3.5.js"></script>
<script src="./js/main.js"></script>
</body>
</html>

5
js/jquery.min.js vendored Normal file

File diff suppressed because one or more lines are too long

40
js/main.js Normal file
View File

@ -0,0 +1,40 @@
var socket = io();
socket.on('connect', function () {
console.log("connect!");
socket.emit("getmap", 100, 100);
});
socket.on('getmap', function (map) {
console.log(map);
var domMap = $("#map");
domMap.empty();
for(var w=0;w<map.length;w++) {
for(var h=0;h<map[w].length;h++) {
var spClass = "ground";
if(map[w][h]=="0")
spClass = "water";
else if(map[w][h]=="1")
spClass = "groundBottom";
else if(map[w][h]=="2")
spClass = "groundTop";
else if(map[w][h]=="3")
spClass = "groundLeft";
else if(map[w][h]=="4")
spClass = "groundRight";
else if(map[w][h]=="5")
spClass = "groundBottomRight";
else if(map[w][h]=="6")
spClass = "groundBottomLeft";
else if(map[w][h]=="7")
spClass = "groundTopRight";
else if(map[w][h]=="8")
spClass = "groundTopLeft";
else if(map[w][h]=="9")
spClass = "corner_wg1";
domMap.append('<img style="top:'+(w*32)+'px; left:'+(h*32)+'px" src="./img/plain.png" class="sprite '+spClass+'">');
}
}
});

3
js/socket.io-1.3.5.js Normal file

File diff suppressed because one or more lines are too long

29
package.json Normal file
View File

@ -0,0 +1,29 @@
{
"name": "MazeRaze",
"version": "0.0.0",
"description": "A small brower based maze game",
"main": "server.js",
"dependencies": {
"express": "~4.13.3",
"socket.io": "~1.3.6",
"fs": "~0.0.2"
},
"devDependencies": {},
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"start": "node server.js"
},
"repository": {
"type": "git",
"url": "https://github.com/cracker0dks/MazeRaze.git"
},
"keywords": [
"maze",
"nodejs"
],
"author": "cracker",
"license": "MIT",
"bugs": {
"url": "https://github.com/cracker0dks/MazeRaze/issues"
}
}

166
s_map.js Normal file
View File

@ -0,0 +1,166 @@
module.exports = {
generateMap: function(width, height) {
var map = [];
for(var w=0;w<width;w++) {
map[w] = [];
for(var h=0;h<height;h++) {
//make border
if(w<=0 || h<=0 || w>=width-1 || h>=height-1) {
map[w][h] = "0";
} else {
map[w][h] = "0";
p = 1;
if(map[w-1][h]=="#")
p+=43;
if(map[w][h-1]=="#")
p+=43;
if(rand(p))
map[w][h] = "#";
}
}
}
//preprocessing
for(i=0;i<2;i++) { //Reduce little ilands
for(var w=0;w<width;w++) {
for(var h=0;h<height;h++) {
if(map[w][h]=="#") {
var waterCnt = 0;
if(map[w-1][h]=="0")
waterCnt++;
if(map[w+1][h]=="0")
waterCnt++;
if(map[w][h-1]=="0")
waterCnt++;
if(map[w][h+1]=="0")
waterCnt++;
if(map[w-1][h-1]=="0")
waterCnt++;
if(map[w-1][h+1]=="0")
waterCnt++;
if(map[w+1][h-1]=="0")
waterCnt++;
if(map[w+1][h+1]=="0")
waterCnt++;
if(waterCnt > 4)
map[w][h] = "0";
}
}
}
}
for(i=0;i<4;i++) { //expand all islands
var orgMap = [];
for(var w=0;w<width;w++) {
orgMap[w] = [];
for(var h=0;h<height;h++) {
orgMap[w][h] = map[w][h];
}
}
for(var w=0;w<width;w++) {
for(var h=0;h<height;h++) {
if(orgMap[w][h]=="#" && !(w<=0 || h<=0 || w>=width-1 || h>=height-1)) {
map[w-1][h]="#"
map[w+1][h]="#"
map[w][h-1]="#"
map[w][h+1]="#"
map[w-1][h-1]="#"
map[w-1][h+1]="#"
map[w+1][h-1]="#"
map[w+1][h+1]="#"
}
}
}
}
for(i=0;i<4;i++) { //fill water holes
for(var w=0;w<width;w++) {
for(var h=0;h<height;h++) {
if(map[w][h]=="0" && !(w<=0 || h<=0 || w>=width-1 || h>=height-1)) {
var groundCtn = 0;
if(map[w-1][h]=="#")
groundCtn++;
if(map[w+1][h]=="#")
groundCtn++;
if(map[w][h-1]=="#")
groundCtn++;
if(map[w][h+1]=="#")
groundCtn++;
if(map[w-1][h-1]=="#")
groundCtn++;
if(map[w-1][h+1]=="#")
groundCtn++;
if(map[w+1][h-1]=="#")
groundCtn++;
if(map[w+1][h+1]=="#")
groundCtn++;
if(groundCtn > 5)
map[w][h] = "#";
}
}
}
}
/* groundtypes
g = ground w = water
*/
//Set ground type
for(var w=0;w<width;w++) {
for(var h=0;h<height;h++) {
if(map[w][h]=="0" && !(w<=0 || h<=0 || w>=width-1 || h>=height-1)) {
if(map[w+1][h]=="#") {
map[w][h] = "1";
}
if(map[w-1][h]=="#") {
map[w][h] = "2";
}
if(map[w][h-1]=="#") {
map[w][h] = "3";
}
if(map[w][h+1]=="#") {
map[w][h] = "4";
}
if(map[w][h+1]=="#" && map[w+1][h]=="#") {
map[w][h] = "5";
}
if(map[w][h-1]=="#" && map[w+1][h]=="#") {
map[w][h] = "6";
}
if(map[w][h+1]=="#" && map[w-1][h]=="#") {
map[w][h] = "7";
}
if(map[w][h-1]=="#" && map[w-1][h]=="#") {
map[w][h] = "8";
}
if(map[w-1][h-1]=="#") {
map[w][h] = "9";
}
}
}
}
return map;
}
};
function rand(p) {
if(p > Math.random()*100)
return true;
return false;
}

34
server.js Normal file
View File

@ -0,0 +1,34 @@
var PORT = 8080;
var gameMode = true;
var allSockets = [];
var userCnt = 0;
var express = require('express');
var app = express();
app.use(express.static(__dirname + '/'));
var server = require('http').Server(app);
var io = require('socket.io')(server);
var map = require("./s_map.js");
server.listen(PORT);
console.log("Pirate running on port:"+PORT);
console.log();
io.on('connection', function(socket){
userCnt++;
console.log("New user", socket.id);
allSockets[socket.id] = socket;
socket.on('disconnect', function () {
userCnt--;
console.log("User Disconnected:", socket.id);
});
socket.on('getmap', function (width, hight) {
var newmap = map.generateMap(width,hight);
//console.log("getmap",newmap);
socket.emit("getmap", newmap);
});
});