Advertisement
Guest User

Untitled

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