SHARE
TWEET

Untitled

a guest May 16th, 2016 695 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. var mongojs = require("mongojs");
  2. var db = mongojs('localhost:27017/myGame', ['account','progress']);
  3.  
  4. var express = require('express');
  5. var app = express();
  6. var serv = require('http').Server(app);
  7.  
  8. app.get('/',function(req, res) {
  9.     res.sendFile(__dirname + '/client/index.html');
  10. });
  11. app.use('/client',express.static(__dirname + '/client'));
  12.  
  13. serv.listen(2000);
  14. console.log("Server started.");
  15.  
  16. var SOCKET_LIST = {};
  17.  
  18. var Entity = function(){
  19.     var self = {
  20.         x:250,
  21.         y:250,
  22.         spdX:0,
  23.         spdY:0,
  24.         id:"",
  25.     }
  26.     self.update = function(){
  27.         self.updatePosition();
  28.     }
  29.     self.updatePosition = function(){
  30.         self.x += self.spdX;
  31.         self.y += self.spdY;
  32.     }
  33.     self.getDistance = function(pt){
  34.         return Math.sqrt(Math.pow(self.x-pt.x,2) + Math.pow(self.y-pt.y,2));
  35.     }
  36.     return self;
  37. }
  38.  
  39. var Player = function(id){
  40.     var self = Entity();
  41.     self.id = id;
  42.     self.number = "" + Math.floor(10 * Math.random());
  43.     self.pressingRight = false;
  44.     self.pressingLeft = false;
  45.     self.pressingUp = false;
  46.     self.pressingDown = false;
  47.     self.pressingAttack = false;
  48.     self.mouseAngle = 0;
  49.     self.maxSpd = 10;
  50.     self.hp = 10;
  51.     self.hpMax = 10;
  52.     self.score = 0;
  53.    
  54.     var super_update = self.update;
  55.     self.update = function(){
  56.         self.updateSpd();
  57.         super_update();
  58.        
  59.         if(self.pressingAttack){
  60.             self.shootBullet(self.mouseAngle);
  61.         }
  62.     }
  63.     self.shootBullet = function(angle){
  64.         var b = Bullet(self.id,angle);
  65.         b.x = self.x;
  66.         b.y = self.y;
  67.     }
  68.    
  69.     self.updateSpd = function(){
  70.         if(self.pressingRight)
  71.             self.spdX = self.maxSpd;
  72.         else if(self.pressingLeft)
  73.             self.spdX = -self.maxSpd;
  74.         else
  75.             self.spdX = 0;
  76.        
  77.         if(self.pressingUp)
  78.             self.spdY = -self.maxSpd;
  79.         else if(self.pressingDown)
  80.             self.spdY = self.maxSpd;
  81.         else
  82.             self.spdY = 0;     
  83.     }
  84.    
  85.     self.getInitPack = function(){
  86.         return {
  87.             id:self.id,
  88.             x:self.x,
  89.             y:self.y,  
  90.             number:self.number,
  91.             hp:self.hp,
  92.             hpMax:self.hpMax,
  93.             score:self.score,
  94.         };     
  95.     }
  96.     self.getUpdatePack = function(){
  97.         return {
  98.             id:self.id,
  99.             x:self.x,
  100.             y:self.y,
  101.             hp:self.hp,
  102.             score:self.score,
  103.         }  
  104.     }
  105.    
  106.     Player.list[id] = self;
  107.    
  108.     initPack.player.push(self.getInitPack());
  109.     return self;
  110. }
  111. Player.list = {};
  112. Player.onConnect = function(socket){
  113.     var player = Player(socket.id);
  114.     socket.on('keyPress',function(data){
  115.         if(data.inputId === 'left')
  116.             player.pressingLeft = data.state;
  117.         else if(data.inputId === 'right')
  118.             player.pressingRight = data.state;
  119.         else if(data.inputId === 'up')
  120.             player.pressingUp = data.state;
  121.         else if(data.inputId === 'down')
  122.             player.pressingDown = data.state;
  123.         else if(data.inputId === 'attack')
  124.             player.pressingAttack = data.state;
  125.         else if(data.inputId === 'mouseAngle')
  126.             player.mouseAngle = data.state;
  127.     });
  128.        
  129.     socket.emit('init',{
  130.         player:Player.getAllInitPack(),
  131.         bullet:Bullet.getAllInitPack(),
  132.     })
  133. }
  134. Player.getAllInitPack = function(){
  135.     var players = [];
  136.     for(var i in Player.list)
  137.         players.push(Player.list[i].getInitPack());
  138.     return players;
  139. }
  140.  
  141. Player.onDisconnect = function(socket){
  142.     delete Player.list[socket.id];
  143.     removePack.player.push(socket.id);
  144. }
  145. Player.update = function(){
  146.     var pack = [];
  147.     for(var i in Player.list){
  148.         var player = Player.list[i];
  149.         player.update();
  150.         pack.push(player.getUpdatePack());     
  151.     }
  152.     return pack;
  153. }
  154.  
  155.  
  156. var Bullet = function(parent,angle){
  157.     var self = Entity();
  158.     self.id = Math.random();
  159.     self.spdX = Math.cos(angle/180*Math.PI) * 10;
  160.     self.spdY = Math.sin(angle/180*Math.PI) * 10;
  161.     self.parent = parent;
  162.     self.timer = 0;
  163.     self.toRemove = false;
  164.     var super_update = self.update;
  165.     self.update = function(){
  166.         if(self.timer++ > 100)
  167.             self.toRemove = true;
  168.         super_update();
  169.        
  170.         for(var i in Player.list){
  171.             var p = Player.list[i];
  172.             if(self.getDistance(p) < 32 && self.parent !== p.id){
  173.                 p.hp -= 1;
  174.                                
  175.                 if(p.hp <= 0){
  176.                     var shooter = Player.list[self.parent];
  177.                     if(shooter)
  178.                         shooter.score += 1;
  179.                     p.hp = p.hpMax;
  180.                     p.x = Math.random() * 500;
  181.                     p.y = Math.random() * 500;                 
  182.                 }
  183.                 self.toRemove = true;
  184.             }
  185.         }
  186.     }
  187.     self.getInitPack = function(){
  188.         return {
  189.             id:self.id,
  190.             x:self.x,
  191.             y:self.y,      
  192.         };
  193.     }
  194.     self.getUpdatePack = function(){
  195.         return {
  196.             id:self.id,
  197.             x:self.x,
  198.             y:self.y,      
  199.         };
  200.     }
  201.    
  202.     Bullet.list[self.id] = self;
  203.     initPack.bullet.push(self.getInitPack());
  204.     return self;
  205. }
  206. Bullet.list = {};
  207.  
  208. Bullet.update = function(){
  209.     var pack = [];
  210.     for(var i in Bullet.list){
  211.         var bullet = Bullet.list[i];
  212.         bullet.update();
  213.         if(bullet.toRemove){
  214.             delete Bullet.list[i];
  215.             removePack.bullet.push(bullet.id);
  216.         } else
  217.             pack.push(bullet.getUpdatePack());     
  218.     }
  219.     return pack;
  220. }
  221.  
  222. Bullet.getAllInitPack = function(){
  223.     var bullets = [];
  224.     for(var i in Bullet.list)
  225.         bullets.push(Bullet.list[i].getInitPack());
  226.     return bullets;
  227. }
  228.  
  229. var DEBUG = true;
  230.  
  231. var isValidPassword = function(data,cb){
  232.     db.account.find({username:data.username,password:data.password},function(err,res){
  233.         if(res.length > 0)
  234.             cb(true);
  235.         else
  236.             cb(false);
  237.     });
  238. }
  239. var isUsernameTaken = function(data,cb){
  240.     db.account.find({username:data.username},function(err,res){
  241.         if(res.length > 0)
  242.             cb(true);
  243.         else
  244.             cb(false);
  245.     });
  246. }
  247. var addUser = function(data,cb){
  248.     db.account.insert({username:data.username,password:data.password},function(err){
  249.         cb();
  250.     });
  251. }
  252.  
  253. var io = require('socket.io')(serv,{});
  254. io.sockets.on('connection', function(socket){
  255.     socket.id = Math.random();
  256.     SOCKET_LIST[socket.id] = socket;
  257.    
  258.     socket.on('signIn',function(data){
  259.         isValidPassword(data,function(res){
  260.             if(res){
  261.                 Player.onConnect(socket);
  262.                 socket.emit('signInResponse',{success:true});
  263.             } else {
  264.                 socket.emit('signInResponse',{success:false});         
  265.             }
  266.         });
  267.     });
  268.     socket.on('signUp',function(data){
  269.         isUsernameTaken(data,function(res){
  270.             if(res){
  271.                 socket.emit('signUpResponse',{success:false});     
  272.             } else {
  273.                 addUser(data,function(){
  274.                     socket.emit('signUpResponse',{success:true});                  
  275.                 });
  276.             }
  277.         });    
  278.     });
  279.    
  280.    
  281.     socket.on('disconnect',function(){
  282.         delete SOCKET_LIST[socket.id];
  283.         Player.onDisconnect(socket);
  284.     });
  285.     socket.on('sendMsgToServer',function(data){
  286.         var playerName = ("" + socket.id).slice(2,7);
  287.         for(var i in SOCKET_LIST){
  288.             SOCKET_LIST[i].emit('addToChat',playerName + ': ' + data);
  289.         }
  290.     });
  291.    
  292.     socket.on('evalServer',function(data){
  293.         if(!DEBUG)
  294.             return;
  295.         var res = eval(data);
  296.         socket.emit('evalAnswer',res);     
  297.     });
  298.    
  299.    
  300.    
  301. });
  302.  
  303. var initPack = {player:[],bullet:[]};
  304. var removePack = {player:[],bullet:[]};
  305.  
  306.  
  307. setInterval(function(){
  308.     var pack = {
  309.         player:Player.update(),
  310.         bullet:Bullet.update(),
  311.     }
  312.    
  313.     for(var i in SOCKET_LIST){
  314.         var socket = SOCKET_LIST[i];
  315.         socket.emit('init',initPack);
  316.         socket.emit('update',pack);
  317.         socket.emit('remove',removePack);
  318.     }
  319.     initPack.player = [];
  320.     initPack.bullet = [];
  321.     removePack.player = [];
  322.     removePack.bullet = [];
  323.    
  324. },1000/25);
  325.  
  326.  
  327.  
  328.  
  329.  
  330.  
  331.  
  332.  
  333.  
  334.  
  335.  
  336.  
  337. <div id="signDiv">
  338.     Username: <input id="signDiv-username" type="text"></input><br>
  339.     Password: <input id="signDiv-password" type="password"></input>
  340.     <button id="signDiv-signIn">Sign In</button>
  341.     <button id="signDiv-signUp">Sign Up</button>
  342. </div>
  343.  
  344. <div id="gameDiv" style="display:none;">
  345.     <canvas id="ctx" width="500" height="500" style="border:1px solid #000000;"></canvas>
  346.  
  347.     <div id="chat-text" style="width:500px;height:100px;overflow-y:scroll">
  348.         <div>Hello!</div>
  349.     </div>
  350.  
  351.     <form id="chat-form">
  352.         <input id="chat-input" type="text" style="width:500px"></input>
  353.     </form>
  354. </div>
  355.  
  356. <script src="https://cdn.socket.io/socket.io-1.4.5.js"></script>
  357. <script>
  358.     var socket = io();
  359.    
  360.     //sign
  361.     var signDiv = document.getElementById('signDiv');
  362.     var signDivUsername = document.getElementById('signDiv-username');
  363.     var signDivSignIn = document.getElementById('signDiv-signIn');
  364.     var signDivSignUp = document.getElementById('signDiv-signUp');
  365.     var signDivPassword = document.getElementById('signDiv-password');
  366.    
  367.     signDivSignIn.onclick = function(){
  368.         socket.emit('signIn',{username:signDivUsername.value,password:signDivPassword.value});
  369.     }
  370.     signDivSignUp.onclick = function(){
  371.         socket.emit('signUp',{username:signDivUsername.value,password:signDivPassword.value});
  372.     }
  373.     socket.on('signInResponse',function(data){
  374.         if(data.success){
  375.             signDiv.style.display = 'none';
  376.             gameDiv.style.display = 'inline-block';
  377.         } else
  378.             alert("Sign in unsuccessul.");
  379.     });
  380.     socket.on('signUpResponse',function(data){
  381.         if(data.success){
  382.             alert("Sign up successul.");
  383.         } else
  384.             alert("Sign up unsuccessul.");
  385.     });
  386.  
  387.     //chat
  388.     var chatText = document.getElementById('chat-text');
  389.     var chatInput = document.getElementById('chat-input');
  390.     var chatForm = document.getElementById('chat-form');
  391.    
  392.     socket.on('addToChat',function(data){
  393.         chatText.innerHTML += '<div>' + data + '</div>';
  394.     });
  395.     socket.on('evalAnswer',function(data){
  396.         console.log(data);
  397.     });
  398.    
  399.    
  400.     chatForm.onsubmit = function(e){
  401.         e.preventDefault();
  402.         if(chatInput.value[0] === '/')
  403.             socket.emit('evalServer',chatInput.value.slice(1));
  404.         else
  405.             socket.emit('sendMsgToServer',chatInput.value);
  406.         chatInput.value = '';      
  407.     }
  408.    
  409.     //game
  410.     var ctx = document.getElementById("ctx").getContext("2d");
  411.     ctx.font = '30px Arial';
  412.    
  413.     var Player = function(initPack){
  414.         var self = {};
  415.         self.id = initPack.id;
  416.         self.number = initPack.number;
  417.         self.x = initPack.x;
  418.         self.y = initPack.y;
  419.         self.hp = initPack.hp;
  420.         self.hpMax = initPack.hpMax;
  421.         self.score = initPack.score;
  422.        
  423.         self.draw = function(){
  424.             var hpWidth = 30 * self.hp / self.hpMax;
  425.             ctx.fillRect(self.x - hpWidth/2,self.y - 40,hpWidth,4);
  426.             ctx.fillText(self.number,self.x,self.y);
  427.            
  428.             ctx.fillText(self.score,self.x,self.y-60);
  429.         }
  430.        
  431.         Player.list[self.id] = self;
  432.        
  433.        
  434.         return self;
  435.     }
  436.     Player.list = {};
  437.  
  438.        
  439.     var Bullet = function(initPack){
  440.         var self = {};
  441.         self.id = initPack.id;
  442.         self.x = initPack.x;
  443.         self.y = initPack.y;
  444.        
  445.         self.draw = function(){        
  446.             ctx.fillRect(self.x-5,self.y-5,10,10);
  447.         }
  448.        
  449.         Bullet.list[self.id] = self;       
  450.         return self;
  451.     }
  452.     Bullet.list = {};
  453.    
  454.    
  455.     socket.on('init',function(data){   
  456.         //{ player : [{id:123,number:'1',x:0,y:0},{id:1,number:'2',x:0,y:0}], bullet: []}
  457.         for(var i = 0 ; i < data.player.length; i++){
  458.             new Player(data.player[i]);
  459.         }
  460.         for(var i = 0 ; i < data.bullet.length; i++){
  461.             new Bullet(data.bullet[i]);
  462.         }
  463.     });
  464.    
  465.     socket.on('update',function(data){
  466.         //{ player : [{id:123,x:0,y:0},{id:1,x:0,y:0}], bullet: []}
  467.         for(var i = 0 ; i < data.player.length; i++){
  468.             var pack = data.player[i];
  469.             var p = Player.list[pack.id];
  470.             if(p){
  471.                 if(pack.x !== undefined)
  472.                     p.x = pack.x;
  473.                 if(pack.y !== undefined)
  474.                     p.y = pack.y;
  475.                 if(pack.hp !== undefined)
  476.                     p.hp = pack.hp;
  477.                 if(pack.score !== undefined)
  478.                     p.score = pack.score;
  479.             }
  480.         }
  481.         for(var i = 0 ; i < data.bullet.length; i++){
  482.             var pack = data.bullet[i];
  483.             var b = Bullet.list[data.bullet[i].id];
  484.             if(b){
  485.                 if(pack.x !== undefined)
  486.                     b.x = pack.x;
  487.                 if(pack.y !== undefined)
  488.                     b.y = pack.y;
  489.             }
  490.         }
  491.     });
  492.    
  493.     socket.on('remove',function(data){
  494.         //{player:[12323],bullet:[12323,123123]}
  495.         for(var i = 0 ; i < data.player.length; i++){
  496.             delete Player.list[data.player[i]];
  497.         }
  498.         for(var i = 0 ; i < data.bullet.length; i++){
  499.             delete Bullet.list[data.bullet[i]];
  500.         }
  501.     });
  502.    
  503.     setInterval(function(){
  504.         ctx.clearRect(0,0,500,500);
  505.         for(var i in Player.list)
  506.             Player.list[i].draw();
  507.         for(var i in Bullet.list)
  508.             Bullet.list[i].draw();
  509.     },40);
  510.    
  511.    
  512.     document.onkeydown = function(event){
  513.         if(event.keyCode === 68)    //d
  514.             socket.emit('keyPress',{inputId:'right',state:true});
  515.         else if(event.keyCode === 83)   //s
  516.             socket.emit('keyPress',{inputId:'down',state:true});
  517.         else if(event.keyCode === 65) //a
  518.             socket.emit('keyPress',{inputId:'left',state:true});
  519.         else if(event.keyCode === 87) // w
  520.             socket.emit('keyPress',{inputId:'up',state:true});
  521.            
  522.     }
  523.     document.onkeyup = function(event){
  524.         if(event.keyCode === 68)    //d
  525.             socket.emit('keyPress',{inputId:'right',state:false});
  526.         else if(event.keyCode === 83)   //s
  527.             socket.emit('keyPress',{inputId:'down',state:false});
  528.         else if(event.keyCode === 65) //a
  529.             socket.emit('keyPress',{inputId:'left',state:false});
  530.         else if(event.keyCode === 87) // w
  531.             socket.emit('keyPress',{inputId:'up',state:false});
  532.     }
  533.    
  534.     document.onmousedown = function(event){
  535.         socket.emit('keyPress',{inputId:'attack',state:true});
  536.     }
  537.     document.onmouseup = function(event){
  538.         socket.emit('keyPress',{inputId:'attack',state:false});
  539.     }
  540.     document.onmousemove = function(event){
  541.         var x = -250 + event.clientX - 8;
  542.         var y = -250 + event.clientY - 8;
  543.         var angle = Math.atan2(y,x) / Math.PI * 180;
  544.         socket.emit('keyPress',{inputId:'mouseAngle',state:angle});
  545.     }
  546.    
  547.    
  548.    
  549.    
  550. </script>
RAW Paste Data
Top