SHARE
TWEET

Untitled

a guest Mar 14th, 2016 1,219 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //app.js
  2. var express = require('express');
  3. var app = express();
  4. var serv = require('http').Server(app);
  5.  
  6. app.get('/',function(req, res) {
  7.     res.sendFile(__dirname + '/client/index.html');
  8. });
  9. app.use('/client',express.static(__dirname + '/client'));
  10.  
  11. serv.listen(2000);
  12. console.log("Server started.");
  13.  
  14. var SOCKET_LIST = {};
  15.  
  16. var Entity = function(){
  17.     var self = {
  18.         x:250,
  19.         y:250,
  20.         spdX:0,
  21.         spdY:0,
  22.         id:"",
  23.     }
  24.     self.update = function(){
  25.         self.updatePosition();
  26.     }
  27.     self.updatePosition = function(){
  28.         self.x += self.spdX;
  29.         self.y += self.spdY;
  30.     }
  31.     return self;
  32. }
  33.  
  34. var Player = function(id){
  35.     var self = Entity();
  36.     self.id = id;
  37.     self.number = "" + Math.floor(10 * Math.random());
  38.     self.pressingRight = false;
  39.     self.pressingLeft = false;
  40.     self.pressingUp = false;
  41.     self.pressingDown = false;
  42.     self.maxSpd = 10;
  43.    
  44.     var super_update = self.update;
  45.     self.update = function(){
  46.         self.updateSpd();
  47.         super_update();
  48.     }
  49.    
  50.    
  51.     self.updateSpd = function(){
  52.         if(self.pressingRight)
  53.             self.spdX = self.maxSpd;
  54.         else if(self.pressingLeft)
  55.             self.spdX = -self.maxSpd;
  56.         else
  57.             self.spdX = 0;
  58.        
  59.         if(self.pressingUp)
  60.             self.spdY = -self.maxSpd;
  61.         else if(self.pressingDown)
  62.             self.spdY = self.maxSpd;
  63.         else
  64.             self.spdY = 0;     
  65.     }
  66.     Player.list[id] = self;
  67.     return self;
  68. }
  69. Player.list = {};
  70. Player.onConnect = function(socket){
  71.     var player = Player(socket.id);
  72.     socket.on('keyPress',function(data){
  73.         if(data.inputId === 'left')
  74.             player.pressingLeft = data.state;
  75.         else if(data.inputId === 'right')
  76.             player.pressingRight = data.state;
  77.         else if(data.inputId === 'up')
  78.             player.pressingUp = data.state;
  79.         else if(data.inputId === 'down')
  80.             player.pressingDown = data.state;
  81.     });
  82. }
  83. Player.onDisconnect = function(socket){
  84.     delete Player.list[socket.id];
  85. }
  86. Player.update = function(){
  87.     var pack = [];
  88.     for(var i in Player.list){
  89.         var player = Player.list[i];
  90.         player.update();
  91.         pack.push({
  92.             x:player.x,
  93.             y:player.y,
  94.             number:player.number
  95.         });    
  96.     }
  97.     return pack;
  98. }
  99.  
  100.  
  101. var Bullet = function(angle){
  102.     var self = Entity();
  103.     self.id = Math.random();
  104.     self.spdX = Math.cos(angle/180*Math.PI) * 10;
  105.     self.spdY = Math.sin(angle/180*Math.PI) * 10;
  106.    
  107.     self.timer = 0;
  108.     self.toRemove = false;
  109.     var super_update = self.update;
  110.     self.update = function(){
  111.         if(self.timer++ > 100)
  112.             self.toRemove = true;
  113.         super_update();
  114.     }
  115.     Bullet.list[self.id] = self;
  116.     return self;
  117. }
  118. Bullet.list = {};
  119.  
  120. Bullet.update = function(){
  121.     if(Math.random() < 0.1){
  122.         Bullet(Math.random()*360);
  123.     }
  124.    
  125.     var pack = [];
  126.     for(var i in Bullet.list){
  127.         var bullet = Bullet.list[i];
  128.         bullet.update();
  129.         pack.push({
  130.             x:bullet.x,
  131.             y:bullet.y,
  132.         });    
  133.     }
  134.     return pack;
  135. }
  136.  
  137. var io = require('socket.io')(serv,{});
  138. io.sockets.on('connection', function(socket){
  139.     socket.id = Math.random();
  140.     SOCKET_LIST[socket.id] = socket;
  141.    
  142.     Player.onConnect(socket);
  143.    
  144.     socket.on('disconnect',function(){
  145.         delete SOCKET_LIST[socket.id];
  146.         Player.onDisconnect(socket);
  147.     });
  148.    
  149.    
  150.    
  151.    
  152. });
  153.  
  154. setInterval(function(){
  155.     var pack = {
  156.         player:Player.update(),
  157.         bullet:Bullet.update(),
  158.     }
  159.    
  160.     for(var i in SOCKET_LIST){
  161.         var socket = SOCKET_LIST[i];
  162.         socket.emit('newPositions',pack);
  163.     }
  164. },1000/25);
  165.  
  166.  
  167.  
  168. //index.html
  169. <canvas id="ctx" width="500" height="500" style="border:1px solid #000000;"></canvas>
  170.  
  171. <script src="https://cdn.socket.io/socket.io-1.4.5.js"></script>
  172. <script>
  173.     var ctx = document.getElementById("ctx").getContext("2d");
  174.     ctx.font = '30px Arial';
  175.    
  176.     var socket = io();
  177.        
  178.     socket.on('newPositions',function(data){
  179.         ctx.clearRect(0,0,500,500);
  180.         for(var i = 0 ; i < data.player.length; i++)
  181.             ctx.fillText(data.player[i].number,data.player[i].x,data.player[i].y);     
  182.            
  183.         for(var i = 0 ; i < data.bullet.length; i++)
  184.             ctx.fillRect(data.bullet[i].x-5,data.bullet[i].y-5,10,10);     
  185.     });
  186.  
  187.     document.onkeydown = function(event){
  188.         if(event.keyCode === 68)    //d
  189.             socket.emit('keyPress',{inputId:'right',state:true});
  190.         else if(event.keyCode === 83)   //s
  191.             socket.emit('keyPress',{inputId:'down',state:true});
  192.         else if(event.keyCode === 65) //a
  193.             socket.emit('keyPress',{inputId:'left',state:true});
  194.         else if(event.keyCode === 87) // w
  195.             socket.emit('keyPress',{inputId:'up',state:true});
  196.            
  197.     }
  198.     document.onkeyup = function(event){
  199.         if(event.keyCode === 68)    //d
  200.             socket.emit('keyPress',{inputId:'right',state:false});
  201.         else if(event.keyCode === 83)   //s
  202.             socket.emit('keyPress',{inputId:'down',state:false});
  203.         else if(event.keyCode === 65) //a
  204.             socket.emit('keyPress',{inputId:'left',state:false});
  205.         else if(event.keyCode === 87) // w
  206.             socket.emit('keyPress',{inputId:'up',state:false});
  207.     }
  208.    
  209. </script>
RAW Paste Data
Top