SHARE
TWEET

Untitled

a guest Mar 26th, 2016 779 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 DEBUG = true;
  138.  
  139. var io = require('socket.io')(serv,{});
  140. io.sockets.on('connection', function(socket){
  141.     socket.id = Math.random();
  142.     SOCKET_LIST[socket.id] = socket;
  143.    
  144.     Player.onConnect(socket);
  145.    
  146.     socket.on('disconnect',function(){
  147.         delete SOCKET_LIST[socket.id];
  148.         Player.onDisconnect(socket);
  149.     });
  150.     socket.on('sendMsgToServer',function(data){
  151.         var playerName = ("" + socket.id).slice(2,7);
  152.         for(var i in SOCKET_LIST){
  153.             SOCKET_LIST[i].emit('addToChat',playerName + ': ' + data);
  154.         }
  155.     });
  156.    
  157.     socket.on('evalServer',function(data){
  158.         if(!DEBUG)
  159.             return;
  160.         var res = eval(data);
  161.         socket.emit('evalAnswer',res);     
  162.     });
  163.    
  164.    
  165.    
  166. });
  167.  
  168. setInterval(function(){
  169.     var pack = {
  170.         player:Player.update(),
  171.         bullet:Bullet.update(),
  172.     }
  173.    
  174.     for(var i in SOCKET_LIST){
  175.         var socket = SOCKET_LIST[i];
  176.         socket.emit('newPositions',pack);
  177.     }
  178. },1000/25);
  179.  
  180.  
  181. //index.html
  182. <canvas id="ctx" width="500" height="500" style="border:1px solid #000000;"></canvas>
  183.  
  184. <div id="chat-text" style="width:500px;height:100px;overflow-y:scroll">
  185.     <div>Hello!</div>
  186. </div>
  187.  
  188. <form id="chat-form">
  189.     <input id="chat-input" type="text" style="width:500px"></input>
  190. </form>
  191.  
  192. <script src="https://cdn.socket.io/socket.io-1.4.5.js"></script>
  193. <script>
  194.     var chatText = document.getElementById('chat-text');
  195.     var chatInput = document.getElementById('chat-input');
  196.     var chatForm = document.getElementById('chat-form');
  197.     var ctx = document.getElementById("ctx").getContext("2d");
  198.     ctx.font = '30px Arial';
  199.    
  200.     var socket = io();
  201.        
  202.     socket.on('newPositions',function(data){
  203.         ctx.clearRect(0,0,500,500);
  204.         for(var i = 0 ; i < data.player.length; i++)
  205.             ctx.fillText(data.player[i].number,data.player[i].x,data.player[i].y);     
  206.            
  207.         for(var i = 0 ; i < data.bullet.length; i++)
  208.             ctx.fillRect(data.bullet[i].x-5,data.bullet[i].y-5,10,10);     
  209.     });
  210.    
  211.     socket.on('addToChat',function(data){
  212.         chatText.innerHTML += '<div>' + data + '</div>';
  213.     });
  214.     socket.on('evalAnswer',function(data){
  215.         console.log(data);
  216.     });
  217.    
  218.    
  219.     chatForm.onsubmit = function(e){
  220.         e.preventDefault();
  221.         if(chatInput.value[0] === '/')
  222.             socket.emit('evalServer',chatInput.value.slice(1));
  223.         else
  224.             socket.emit('sendMsgToServer',chatInput.value);
  225.         chatInput.value = '';      
  226.     }
  227.    
  228.     document.onkeydown = function(event){
  229.         if(event.keyCode === 68)    //d
  230.             socket.emit('keyPress',{inputId:'right',state:true});
  231.         else if(event.keyCode === 83)   //s
  232.             socket.emit('keyPress',{inputId:'down',state:true});
  233.         else if(event.keyCode === 65) //a
  234.             socket.emit('keyPress',{inputId:'left',state:true});
  235.         else if(event.keyCode === 87) // w
  236.             socket.emit('keyPress',{inputId:'up',state:true});
  237.            
  238.     }
  239.     document.onkeyup = function(event){
  240.         if(event.keyCode === 68)    //d
  241.             socket.emit('keyPress',{inputId:'right',state:false});
  242.         else if(event.keyCode === 83)   //s
  243.             socket.emit('keyPress',{inputId:'down',state:false});
  244.         else if(event.keyCode === 65) //a
  245.             socket.emit('keyPress',{inputId:'left',state:false});
  246.         else if(event.keyCode === 87) // w
  247.             socket.emit('keyPress',{inputId:'up',state:false});
  248.     }
  249.    
  250. </script>
RAW Paste Data
Top