Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- var mongojs = require('mongojs');
- var db = mongojs("localhost:27017/rcGame",['account','progress']);
- // Basic setup
- var express = require('express');
- var app = express();
- var serv = require('http').Server(app);
- // default html page @ localhost
- app.get('/', function(req, res) {
- res.sendFile(__dirname + '/client/index.html');
- });
- // Other areas accessible
- app.use('/client',express.static(__dirname + '/client'));
- serv.listen(2000);
- console.log("Server started.");
- var SOCKET_LIST = {};
- var Entity = function(){
- var self = {
- x:250,
- y:250,
- spdX:0,
- spdY:0,
- id:"",
- }
- self.update = function(){
- self.updatePosition();
- }
- self.updatePosition = function(){
- self.x += self.spdX;
- self.y += self.spdY;
- }
- self.getDistance = function(pt){
- return Math.sqrt(Math.pow(self.x-pt.x,2)+Math.pow(self.y-pt.y,2));
- }
- return self;
- }
- var Player = function(id){
- var self = Entity();
- self.id = id;
- self.number = "" + Math.floor(10*Math.random());
- self.pressingRight = false;
- self.pressingLeft = false;
- self.pressingUp = false;
- self.pressingDown = false;
- self.pressingAttack = false;
- self.mouseAngle = 0;
- self.maxSpd = 10;
- self.hp = 10;
- self.hpMax = 10;
- self.score = 0;
- var super_update = self.update;
- self.update = function(){
- self.updateSpd();
- super_update();
- if (self.pressingAttack){
- self.shootBullet(self.mouseAngle);
- }
- }
- self.shootBullet = function(angle){
- var b = Bullet(self.id, angle);
- b.x = self.x;
- b.y = self.y;
- }
- self.updateSpd = function(){
- if (self.pressingRight)
- self.spdX = self.maxSpd;
- else if (self.pressingLeft)
- self.spdX = -self.maxSpd;
- else
- self.spdX = 0;
- if (self.pressingUp)
- self.spdY = -self.maxSpd;
- else if (self.pressingDown)
- self.spdY = self.maxSpd;
- else
- self.spdY = 0;
- }
- self.getInitPack = function(){
- return {
- id:self.id,
- x:self.x,
- y:self.y,
- number:self.number,
- hp:self.hp,
- hpMax:self.hpMax,
- score:self.score,
- }
- }
- self.getUpdatePack = function(){
- return {
- id:self.id,
- x:self.x,
- y:self.y,
- hp:self.hp,
- score:self.score,
- }
- }
- Player.list[id] = self;
- initPack.player.push(self.getInitPack());
- return self;
- }
- Player.list = {};
- Player.onConnect = function(socket){
- var player = Player(socket.id);
- socket.on('keyPress', function(data){
- if (data.inputId === 'left')
- player.pressingLeft = data.state;
- else if (data.inputId === 'right')
- player.pressingRight = data.state;
- else if (data.inputId === 'up')
- player.pressingUp = data.state;
- else if (data.inputId === 'down')
- player.pressingDown = data.state;
- else if (data.inputId === 'attack')
- player.pressingAttack = data.state;
- else if (data.inputId === 'mouseAngle')
- player.mouseAngle = data.state;
- });
- socket.emit("init",{
- player:Player.getAllInitPack(),
- bullet:Bullet.getAllInitPack(),
- })
- }
- Player.getAllInitPack = function(){
- var players = [];
- for(var i in Player.list)
- players.push(Player.list[i].getInitPack());
- return players;
- }
- Player.onDisconnect = function(socket){
- delete Player.list[socket.id];
- removePack.player.push(socket.id);
- }
- Player.update = function(){
- var pack = [];
- for(var i in Player.list){
- var player = Player.list[i];
- player.update();
- pack.push(player.getUpdatePack());
- }
- return pack;
- }
- var Bullet = function(parent, angle){
- var self = Entity();
- self.id = Math.random();
- self.spdX = Math.cos(angle/180*Math.PI) * 10;
- self.spdY = Math.sin(angle/180*Math.PI) * 10;
- self.parent = parent;
- self.timer = 0;
- self.toRemove = false;
- var super_update = self.update;
- self.update = function(){
- if (self.timer++ > 100)
- self.toRemove = true;
- super_update();
- for (var i in Player.list){
- var p = Player.list[i];
- if(self.getDistance(p) < 32 && self.parent !== p.id){
- p.hp -= 1;
- if(p.hp <= 0){
- var shooter = Player.list[self.parent];
- if(shooter)
- shooter.score += 1;
- p.hp = p.hpMax;
- p.x = Math.random() * 500;
- p.y = Math.random() * 500;
- }
- self.toRemove = true;
- }
- }
- }
- self.getInitPack = function(){
- return {
- id:self.id,
- x:self.x,
- y:self.y,
- }
- }
- self.getUpdatePack = function(){
- return {
- id:self.id,
- x:self.x,
- y:self.y
- }
- }
- Bullet.list[self.id] = self;
- initPack.bullet.push(self.getInitPack());
- return self;
- }
- Bullet.list = {};
- Bullet.update = function(){
- var pack = [];
- for(var i in Bullet.list){
- var bullet = Bullet.list[i];
- bullet.update();
- if(bullet.toRemove){
- delete Bullet.list[i];
- removePack.bullet.push(bullet.id);
- } else
- pack.push(bullet.getUpdatePack());
- }
- return pack;
- }
- Bullet.getAllInitPack = function(){
- var bullets = [];
- for(var i in Bullet.list)
- bullets.push(Bullet.list[i].getInitPack());
- return bullets;
- }
- var DEBUG = true;
- var isValidPassword = function(data,cb){
- db.account.find({username:data.username,password:data.password},function(err,res){
- if(res.length > 0)
- cb(true);
- else
- cb(false);
- });
- }
- var isUsernameTaken = function(data,cb){
- db.account.find({username:data.username},function(err,res){
- if(res.length > 0)
- cb(true);
- else
- cb(false);
- });
- }
- var addUser = function(data,cb){
- db.account.insert({username:data.username,password:data.password},function(err){
- cb();
- });
- }
- //functionalities of socket libraries
- var io = require('socket.io')(serv,{});
- io.sockets.on('connection', function(socket){
- socket.id = Math.random();
- SOCKET_LIST[socket.id] = socket;
- socket.on('signIn', function(data){
- isValidPassword(data, function(res){
- if(res){
- Player.onConnect(socket);
- socket.emit('signInResponse',{success:true});
- } else {
- socket.emit('signInResponse',{success:false});
- }
- });
- });
- socket.on('signUp', function(data){
- isUsernameTaken(data, function(res){
- if(res){
- socket.emit('signUpResponse',{success:false});
- } else {
- addUser(data,function(){
- socket.emit('signUpResponse',{success:true});
- });
- }
- });
- });
- socket.on('disconnect', function(){
- delete SOCKET_LIST[socket.id];
- Player.onDisconnect(socket);
- });
- socket.on('sendMsgToServer', function(data){
- var playerName = ("" + socket.id).slice(2,7);
- for(var i in SOCKET_LIST){
- SOCKET_LIST[i].emit('addToChat',playerName + ': ' + data);
- }
- });
- socket.on('evalServer', function(data){
- if(!DEBUG)
- return;
- var res = eval(data);
- socket.emit('evalAnswer',res);
- });
- });
- var initPack = {player:[],bullet:[]};
- var removePack = {player:[],bullet:[]};
- // 40 ms
- setInterval(function(){
- var pack = {
- player:Player.update(),
- bullet:Bullet.update(),
- }
- for(var i in SOCKET_LIST){
- var socket = SOCKET_LIST[i];
- socket.emit('init', initPack);
- socket.emit('update', pack);
- socket.emit('remove', removePack);
- }
- initPack.player = [];
- initPack.bullet = [];
- removePack.player = [];
- removePack.bullet = [];
- },1000/25);
- <div id="signDiv">
- Username: <input id="signDiv-username" type="text"></input><br>
- Password: <input id="signDiv-password" type="password"></input>
- <button id="signDiv-signIn">Sign In</button>
- <button id="signDiv-signUp">Sign Up</button>
- </div>
- <div id="gameDiv" style="display:none;">
- <canvas id="ctx" width="500" height="500" style="
- border:1px solid #000000;"></canvas>
- <div id="chat-text" style="width:500px;height:100px;overflow-y:scroll">
- <div>Hello World</div>
- </div>
- <form id="chat-form">
- <input id="chat-input" type="text" style="width:500px"></input>
- </form>
- </div>
- <script src="
- https://cdn.socket.io/socket.io-1.4.5.js"
- ></script>
- <script>
- var socket = io();
- //sign
- var signDiv = document.getElementById('signDiv');
- var signDivUsername = document.getElementById('signDiv-username');
- var signDivSignIn = document.getElementById('signDiv-signIn');
- var signDivSignUp = document.getElementById('signDiv-signUp');
- var signDivPassword = document.getElementById('signDiv-password');
- signDivSignIn.onclick = function(){
- socket.emit('signIn',{username:signDivUsername.value,password:signDivPassword.value});
- }
- signDivSignUp.onclick = function(){
- socket.emit('signUp',{username:signDivUsername.value,password:signDivPassword.value});
- }
- socket.on('signInResponse',function(data){
- if(data.success){
- signDiv.style.display = 'none';
- gameDiv.style.display = 'inline-block';
- } else {
- alert("Sign in unsuccessful.");
- }
- });
- socket.on('signUpResponse',function(data){
- if(data.success){
- alert("Sign up successful.");
- } else {
- alert("Sign up unsuccessful.");
- }
- });
- //chat
- var chatText = document.getElementById('chat-text');
- var chatInput = document.getElementById('chat-input');
- var chatForm = document.getElementById('chat-form');
- socket.on('addToChat',function(data){
- chatText.innerHTML += '<div>' + data + '</div>';
- });
- socket.on('evalAnswer',function(data){
- console.log(data);
- });
- chatForm.onsubmit = function(e){
- e.preventDefault();
- if(chatInput.value[0] === '/')
- socket.emit('evalServer',chatInput.value.slice(1));
- else {
- socket.emit('sendMsgToServer',chatInput.value);
- }
- chatInput.value = '';
- }
- //game
- var ctx = document.getElementById("ctx").getContext("2d");
- ctx.font = '30px Arial';
- var Player = function(initPack){
- var self = {};
- self.id = initPack.id;
- self.number = initPack.number;
- self.x = initPack.x;
- self.y = initPack.y;
- self.hp = initPack.hp;
- self.hpMax = initPack.hpMax;
- self.score = initPack.score;
- self.draw = function(){
- var hpWidth = 30 * self.hp / self.hpMax;
- ctx.fillRect(self.x - hpWidth/2,self.y - 40,hpWidth,4);
- ctx.fillText(self.number,self.x,self.y);
- ctx.fillText(self.score,self.x,self.y-60);
- }
- Player.list[self.id] = self;
- return self;
- }
- Player.list = {};
- var Bullet = function(initPack){
- var self = {};
- self.id = initPack.id;
- self.x = initPack.x;
- self.y = initPack.y
- self.draw = function(){
- ctx.fillRect(self.x-5,self.y-5,10,10);
- }
- Bullet.list[self.id] = self;
- return self;
- }
- Bullet.list = {};
- socket.on('init',function(data){
- for(var i = 0 ; i < data.player.length; i++){
- new Player(data.player[i]);
- }
- for(var i = 0 ; i < data.bullet.length; i++){
- new Bullet(data.bullet[i]);
- }
- });
- socket.on('update',function(data){
- for(var i = 0; i < data.player.length; i++){
- var pack = data.player[i];
- var p = Player.list[pack.id];
- if(p){
- if(pack.x !== undefined)
- p.x = pack.x;
- if(pack.y !== undefined)
- p.y = pack.y;
- if(pack.hp !== undefined)
- p.hp = pack.hp;
- if(pack.y !== undefined)
- p.score = pack.score;
- }
- }
- for(var i = 0; i < data.bullet.length; i++){
- var pack = data.bullet[i];
- var b = Bullet.list[data.bullet[i].id];
- if(b){
- if(pack.x !== undefined)
- b.x = pack.x;
- if(pack.y !== undefined)
- b.y = pack.y;
- }
- }
- });
- socket.on('remove',function(data){
- for(var i = 0 ; i < data.player.length; i++){
- delete Player.list[data.player[i]];
- }
- for(var i = 0 ; i < data.bullet.length; i++){
- delete Player.list[data.bullet[i]];
- }
- });
- setInterval(function(){
- ctx.clearRect(0,0,500,500);
- for(var i in Player.list)
- Player.list[i].draw();
- for(var i in Bullet.list)
- Bullet.list[i].draw();
- },40);
- document.onkeydown = function(event){
- if(event.keyCode === 68) // d
- socket.emit('keyPress',{inputId:'right',state:true});
- else if(event.keyCode === 83) // s
- socket.emit('keyPress',{inputId:'down',state:true});
- else if(event.keyCode === 65) // a
- socket.emit('keyPress',{inputId:'left',state:true});
- else if(event.keyCode === 87) // w
- socket.emit('keyPress',{inputId:'up',state:true});
- }
- document.onkeyup = function(event){
- if(event.keyCode === 68) // d
- socket.emit('keyPress',{inputId:'right',state:false});
- else if(event.keyCode === 83) // s
- socket.emit('keyPress',{inputId:'down',state:false});
- else if(event.keyCode === 65) // a
- socket.emit('keyPress',{inputId:'left',state:false});
- else if(event.keyCode === 87) // w
- socket.emit('keyPress',{inputId:'up',state:false});
- }
- document.onmousedown = function(event){
- socket.emit('keyPress', {inputId:'attack',state:true});
- }
- document.onmouseup = function(event){
- socket.emit('keyPress', {inputId:'attack',state:false});
- }
- document.onmousemove = function(event){
- var x = -250 + event.clientX - 8;
- var y = -250 + event.clientY - 8;
- var angle = Math.atan2(y,x) / Math.PI * 180;
- socket.emit('keyPress',{inputId:'mouseAngle',state:angle});
- }
- </script>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement