Advertisement
Guest User

Untitled

a guest
May 16th, 2016
3,520
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 12.77 KB | None | 0 0
  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>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement