SHARE
TWEET

Untitled

a guest Apr 19th, 2016 624 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.  
  2. /*
  3. use myGame 
  4. db.createCollection("account");
  5. db.createCollection("progress");
  6. */
  7.  
  8.  
  9. var mongojs = require("mongojs");
  10. var db = mongojs('localhost:27017/myGame', ['account','progress']);
  11.  
  12. var express = require('express');
  13. var app = express();
  14. var serv = require('http').Server(app);
  15.  
  16. app.get('/',function(req, res) {
  17.     res.sendFile(__dirname + '/client/index.html');
  18. });
  19. app.use('/client',express.static(__dirname + '/client'));
  20.  
  21. serv.listen(2000);
  22. console.log("Server started.");
  23.  
  24. var SOCKET_LIST = {};
  25.  
  26. var Entity = function(){
  27.     var self = {
  28.         x:250,
  29.         y:250,
  30.         spdX:0,
  31.         spdY:0,
  32.         id:"",
  33.     }
  34.     self.update = function(){
  35.         self.updatePosition();
  36.     }
  37.     self.updatePosition = function(){
  38.         self.x += self.spdX;
  39.         self.y += self.spdY;
  40.     }
  41.     self.getDistance = function(pt){
  42.         return Math.sqrt(Math.pow(self.x-pt.x,2) + Math.pow(self.y-pt.y,2));
  43.     }
  44.     return self;
  45. }
  46.  
  47. var Player = function(id){
  48.     var self = Entity();
  49.     self.id = id;
  50.     self.number = "" + Math.floor(10 * Math.random());
  51.     self.pressingRight = false;
  52.     self.pressingLeft = false;
  53.     self.pressingUp = false;
  54.     self.pressingDown = false;
  55.     self.pressingAttack = false;
  56.     self.mouseAngle = 0;
  57.     self.maxSpd = 10;
  58.    
  59.     var super_update = self.update;
  60.     self.update = function(){
  61.         self.updateSpd();
  62.         super_update();
  63.        
  64.         if(self.pressingAttack){
  65.             self.shootBullet(self.mouseAngle);
  66.         }
  67.     }
  68.     self.shootBullet = function(angle){
  69.         var b = Bullet(self.id,angle);
  70.         b.x = self.x;
  71.         b.y = self.y;
  72.     }
  73.    
  74.    
  75.     self.updateSpd = function(){
  76.         if(self.pressingRight)
  77.             self.spdX = self.maxSpd;
  78.         else if(self.pressingLeft)
  79.             self.spdX = -self.maxSpd;
  80.         else
  81.             self.spdX = 0;
  82.        
  83.         if(self.pressingUp)
  84.             self.spdY = -self.maxSpd;
  85.         else if(self.pressingDown)
  86.             self.spdY = self.maxSpd;
  87.         else
  88.             self.spdY = 0;     
  89.     }
  90.     Player.list[id] = self;
  91.     return self;
  92. }
  93. Player.list = {};
  94. Player.onConnect = function(socket){
  95.     var player = Player(socket.id);
  96.     socket.on('keyPress',function(data){
  97.         if(data.inputId === 'left')
  98.             player.pressingLeft = data.state;
  99.         else if(data.inputId === 'right')
  100.             player.pressingRight = data.state;
  101.         else if(data.inputId === 'up')
  102.             player.pressingUp = data.state;
  103.         else if(data.inputId === 'down')
  104.             player.pressingDown = data.state;
  105.         else if(data.inputId === 'attack')
  106.             player.pressingAttack = data.state;
  107.         else if(data.inputId === 'mouseAngle')
  108.             player.mouseAngle = data.state;
  109.     });
  110. }
  111. Player.onDisconnect = function(socket){
  112.     delete Player.list[socket.id];
  113. }
  114. Player.update = function(){
  115.     var pack = [];
  116.     for(var i in Player.list){
  117.         var player = Player.list[i];
  118.         player.update();
  119.         pack.push({
  120.             x:player.x,
  121.             y:player.y,
  122.             number:player.number
  123.         });    
  124.     }
  125.     return pack;
  126. }
  127.  
  128.  
  129. var Bullet = function(parent,angle){
  130.     var self = Entity();
  131.     self.id = Math.random();
  132.     self.spdX = Math.cos(angle/180*Math.PI) * 10;
  133.     self.spdY = Math.sin(angle/180*Math.PI) * 10;
  134.     self.parent = parent;
  135.     self.timer = 0;
  136.     self.toRemove = false;
  137.     var super_update = self.update;
  138.     self.update = function(){
  139.         if(self.timer++ > 100)
  140.             self.toRemove = true;
  141.         super_update();
  142.        
  143.         for(var i in Player.list){
  144.             var p = Player.list[i];
  145.             if(self.getDistance(p) < 32 && self.parent !== p.id){
  146.                 //handle collision. ex: hp--;
  147.                 self.toRemove = true;
  148.             }
  149.         }
  150.     }
  151.     Bullet.list[self.id] = self;
  152.     return self;
  153. }
  154. Bullet.list = {};
  155.  
  156. Bullet.update = function(){
  157.     var pack = [];
  158.     for(var i in Bullet.list){
  159.         var bullet = Bullet.list[i];
  160.         bullet.update();
  161.         if(bullet.toRemove)
  162.             delete Bullet.list[i];
  163.         else
  164.             pack.push({
  165.                 x:bullet.x,
  166.                 y:bullet.y,
  167.             });    
  168.     }
  169.     return pack;
  170. }
  171.  
  172. var DEBUG = true;
  173.  
  174. var isValidPassword = function(data,cb){
  175.     db.account.find({username:data.username,password:data.password},function(err,res){
  176.         if(res.length > 0)
  177.             cb(true);
  178.         else
  179.             cb(false);
  180.     });
  181. }
  182. var isUsernameTaken = function(data,cb){
  183.     db.account.find({username:data.username},function(err,res){
  184.         if(res.length > 0)
  185.             cb(true);
  186.         else
  187.             cb(false);
  188.     });
  189. }
  190. var addUser = function(data,cb){
  191.     db.account.insert({username:data.username,password:data.password},function(err){
  192.         cb();
  193.     });
  194. }
  195.  
  196. var io = require('socket.io')(serv,{});
  197. io.sockets.on('connection', function(socket){
  198.     socket.id = Math.random();
  199.     SOCKET_LIST[socket.id] = socket;
  200.    
  201.     socket.on('signIn',function(data){
  202.         isValidPassword(data,function(res){
  203.             if(res){
  204.                 Player.onConnect(socket);
  205.                 socket.emit('signInResponse',{success:true});
  206.             } else {
  207.                 socket.emit('signInResponse',{success:false});         
  208.             }
  209.         });
  210.     });
  211.     socket.on('signUp',function(data){
  212.         isUsernameTaken(data,function(res){
  213.             if(res){
  214.                 socket.emit('signUpResponse',{success:false});     
  215.             } else {
  216.                 addUser(data,function(){
  217.                     socket.emit('signUpResponse',{success:true});                  
  218.                 });
  219.             }
  220.         });    
  221.     });
  222.    
  223.    
  224.     socket.on('disconnect',function(){
  225.         delete SOCKET_LIST[socket.id];
  226.         Player.onDisconnect(socket);
  227.     });
  228.     socket.on('sendMsgToServer',function(data){
  229.         var playerName = ("" + socket.id).slice(2,7);
  230.         for(var i in SOCKET_LIST){
  231.             SOCKET_LIST[i].emit('addToChat',playerName + ': ' + data);
  232.         }
  233.     });
  234.    
  235.     socket.on('evalServer',function(data){
  236.         if(!DEBUG)
  237.             return;
  238.         var res = eval(data);
  239.         socket.emit('evalAnswer',res);     
  240.     });
  241.    
  242.    
  243.    
  244. });
  245.  
  246. setInterval(function(){
  247.     var pack = {
  248.         player:Player.update(),
  249.         bullet:Bullet.update(),
  250.     }
  251.    
  252.     for(var i in SOCKET_LIST){
  253.         var socket = SOCKET_LIST[i];
  254.         socket.emit('newPositions',pack);
  255.     }
  256. },1000/25);
  257.  
  258.  
  259.  
  260.  
  261. //index.html
  262. <div id="signDiv">
  263.     Username: <input id="signDiv-username" type="text"></input><br>
  264.     Password: <input id="signDiv-password" type="password"></input>
  265.     <button id="signDiv-signIn">Sign In</button>
  266.     <button id="signDiv-signUp">Sign Up</button>
  267. </div>
  268.  
  269. <div id="gameDiv" style="display:none;">
  270.     <canvas id="ctx" width="500" height="500" style="border:1px solid #000000;"></canvas>
  271.  
  272.     <div id="chat-text" style="width:500px;height:100px;overflow-y:scroll">
  273.         <div>Hello!</div>
  274.     </div>
  275.  
  276.     <form id="chat-form">
  277.         <input id="chat-input" type="text" style="width:500px"></input>
  278.     </form>
  279. </div>
  280.  
  281. <script src="https://cdn.socket.io/socket.io-1.4.5.js"></script>
  282. <script>
  283.     var socket = io();
  284.    
  285.     //sign
  286.     var signDiv = document.getElementById('signDiv');
  287.     var signDivUsername = document.getElementById('signDiv-username');
  288.     var signDivSignIn = document.getElementById('signDiv-signIn');
  289.     var signDivSignUp = document.getElementById('signDiv-signUp');
  290.     var signDivPassword = document.getElementById('signDiv-password');
  291.    
  292.     signDivSignIn.onclick = function(){
  293.         socket.emit('signIn',{username:signDivUsername.value,password:signDivPassword.value});
  294.     }
  295.     signDivSignUp.onclick = function(){
  296.         socket.emit('signUp',{username:signDivUsername.value,password:signDivPassword.value});
  297.     }
  298.     socket.on('signInResponse',function(data){
  299.         if(data.success){
  300.             signDiv.style.display = 'none';
  301.             gameDiv.style.display = 'inline-block';
  302.         } else
  303.             alert("Sign in unsuccessul.");
  304.     });
  305.     socket.on('signUpResponse',function(data){
  306.         if(data.success){
  307.             alert("Sign up successul.");
  308.         } else
  309.             alert("Sign up unsuccessul.");
  310.     });
  311.  
  312.     //game
  313.     var chatText = document.getElementById('chat-text');
  314.     var chatInput = document.getElementById('chat-input');
  315.     var chatForm = document.getElementById('chat-form');
  316.     var ctx = document.getElementById("ctx").getContext("2d");
  317.     ctx.font = '30px Arial';
  318.    
  319.        
  320.     socket.on('newPositions',function(data){
  321.         ctx.clearRect(0,0,500,500);
  322.         for(var i = 0 ; i < data.player.length; i++)
  323.             ctx.fillText(data.player[i].number,data.player[i].x,data.player[i].y);     
  324.            
  325.         for(var i = 0 ; i < data.bullet.length; i++)
  326.             ctx.fillRect(data.bullet[i].x-5,data.bullet[i].y-5,10,10);     
  327.     });
  328.    
  329.     socket.on('addToChat',function(data){
  330.         chatText.innerHTML += '<div>' + data + '</div>';
  331.     });
  332.     socket.on('evalAnswer',function(data){
  333.         console.log(data);
  334.     });
  335.    
  336.    
  337.     chatForm.onsubmit = function(e){
  338.         e.preventDefault();
  339.         if(chatInput.value[0] === '/')
  340.             socket.emit('evalServer',chatInput.value.slice(1));
  341.         else
  342.             socket.emit('sendMsgToServer',chatInput.value);
  343.         chatInput.value = '';      
  344.     }
  345.    
  346.     document.onkeydown = function(event){
  347.         if(event.keyCode === 68)    //d
  348.             socket.emit('keyPress',{inputId:'right',state:true});
  349.         else if(event.keyCode === 83)   //s
  350.             socket.emit('keyPress',{inputId:'down',state:true});
  351.         else if(event.keyCode === 65) //a
  352.             socket.emit('keyPress',{inputId:'left',state:true});
  353.         else if(event.keyCode === 87) // w
  354.             socket.emit('keyPress',{inputId:'up',state:true});
  355.            
  356.     }
  357.     document.onkeyup = function(event){
  358.         if(event.keyCode === 68)    //d
  359.             socket.emit('keyPress',{inputId:'right',state:false});
  360.         else if(event.keyCode === 83)   //s
  361.             socket.emit('keyPress',{inputId:'down',state:false});
  362.         else if(event.keyCode === 65) //a
  363.             socket.emit('keyPress',{inputId:'left',state:false});
  364.         else if(event.keyCode === 87) // w
  365.             socket.emit('keyPress',{inputId:'up',state:false});
  366.     }
  367.    
  368.     document.onmousedown = function(event){
  369.         socket.emit('keyPress',{inputId:'attack',state:true});
  370.     }
  371.     document.onmouseup = function(event){
  372.         socket.emit('keyPress',{inputId:'attack',state:false});
  373.     }
  374.     document.onmousemove = function(event){
  375.         var x = -250 + event.clientX - 8;
  376.         var y = -250 + event.clientY - 8;
  377.         var angle = Math.atan2(y,x) / Math.PI * 180;
  378.         socket.emit('keyPress',{inputId:'mouseAngle',state:angle});
  379.     }
  380.    
  381.    
  382.    
  383.    
  384. </script>
RAW Paste Data
Top