Advertisement
Guest User

Untitled

a guest
Jun 16th, 2016
121
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 13.48 KB | None | 0 0
  1. var mongojs = require('mongojs');
  2. var db = mongojs("localhost:27017/rcGame",['account','progress']);
  3.  
  4.  
  5. // Basic setup
  6. var express = require('express');
  7. var app = express();
  8. var serv = require('http').Server(app);
  9.  
  10. // default html page @ localhost
  11. app.get('/', function(req, res) {
  12. res.sendFile(__dirname + '/client/index.html');
  13. });
  14. // Other areas accessible
  15. app.use('/client',express.static(__dirname + '/client'));
  16.  
  17. serv.listen(2000);
  18. console.log("Server started.");
  19.  
  20. var SOCKET_LIST = {};
  21.  
  22. var Entity = function(){
  23. var self = {
  24. x:250,
  25. y:250,
  26. spdX:0,
  27. spdY:0,
  28. id:"",
  29. }
  30.  
  31. self.update = function(){
  32. self.updatePosition();
  33. }
  34.  
  35. self.updatePosition = function(){
  36. self.x += self.spdX;
  37. self.y += self.spdY;
  38. }
  39. self.getDistance = function(pt){
  40. return Math.sqrt(Math.pow(self.x-pt.x,2)+Math.pow(self.y-pt.y,2));
  41. }
  42. return self;
  43.  
  44. }
  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. self.hp = 10;
  59. self.hpMax = 10;
  60. self.score = 0;
  61.  
  62. var super_update = self.update;
  63. self.update = function(){
  64. self.updateSpd();
  65. super_update();
  66.  
  67. if (self.pressingAttack){
  68. self.shootBullet(self.mouseAngle);
  69. }
  70. }
  71.  
  72. self.shootBullet = function(angle){
  73. var b = Bullet(self.id, angle);
  74. b.x = self.x;
  75. b.y = self.y;
  76. }
  77.  
  78. self.updateSpd = function(){
  79. if (self.pressingRight)
  80. self.spdX = self.maxSpd;
  81. else if (self.pressingLeft)
  82. self.spdX = -self.maxSpd;
  83. else
  84. self.spdX = 0;
  85.  
  86. if (self.pressingUp)
  87. self.spdY = -self.maxSpd;
  88. else if (self.pressingDown)
  89. self.spdY = self.maxSpd;
  90. else
  91. self.spdY = 0;
  92. }
  93.  
  94. self.getInitPack = function(){
  95. return {
  96. id:self.id,
  97. x:self.x,
  98. y:self.y,
  99. number:self.number,
  100. hp:self.hp,
  101. hpMax:self.hpMax,
  102. score:self.score,
  103. }
  104. }
  105.  
  106. self.getUpdatePack = function(){
  107. return {
  108. id:self.id,
  109. x:self.x,
  110. y:self.y,
  111. hp:self.hp,
  112. score:self.score,
  113. }
  114. }
  115.  
  116. Player.list[id] = self;
  117.  
  118. initPack.player.push(self.getInitPack());
  119. return self;
  120. }
  121.  
  122. Player.list = {};
  123. Player.onConnect = function(socket){
  124. var player = Player(socket.id);
  125. socket.on('keyPress', function(data){
  126. if (data.inputId === 'left')
  127. player.pressingLeft = data.state;
  128. else if (data.inputId === 'right')
  129. player.pressingRight = data.state;
  130. else if (data.inputId === 'up')
  131. player.pressingUp = data.state;
  132. else if (data.inputId === 'down')
  133. player.pressingDown = data.state;
  134. else if (data.inputId === 'attack')
  135. player.pressingAttack = data.state;
  136. else if (data.inputId === 'mouseAngle')
  137. player.mouseAngle = data.state;
  138. });
  139.  
  140.  
  141. socket.emit("init",{
  142. player:Player.getAllInitPack(),
  143. bullet:Bullet.getAllInitPack(),
  144. })
  145. }
  146.  
  147. Player.getAllInitPack = function(){
  148. var players = [];
  149. for(var i in Player.list)
  150. players.push(Player.list[i].getInitPack());
  151. return players;
  152. }
  153.  
  154. Player.onDisconnect = function(socket){
  155. delete Player.list[socket.id];
  156. removePack.player.push(socket.id);
  157. }
  158.  
  159. Player.update = function(){
  160. var pack = [];
  161. for(var i in Player.list){
  162. var player = Player.list[i];
  163. player.update();
  164. pack.push(player.getUpdatePack());
  165. }
  166. return pack;
  167. }
  168.  
  169. var Bullet = function(parent, angle){
  170. var self = Entity();
  171. self.id = Math.random();
  172. self.spdX = Math.cos(angle/180*Math.PI) * 10;
  173. self.spdY = Math.sin(angle/180*Math.PI) * 10;
  174. self.parent = parent;
  175. self.timer = 0;
  176. self.toRemove = false;
  177. var super_update = self.update;
  178. self.update = function(){
  179. if (self.timer++ > 100)
  180. self.toRemove = true;
  181. super_update();
  182.  
  183. for (var i in Player.list){
  184. var p = Player.list[i];
  185. if(self.getDistance(p) < 32 && self.parent !== p.id){
  186. p.hp -= 1;
  187.  
  188. if(p.hp <= 0){
  189. var shooter = Player.list[self.parent];
  190. if(shooter)
  191. shooter.score += 1;
  192. p.hp = p.hpMax;
  193. p.x = Math.random() * 500;
  194. p.y = Math.random() * 500;
  195. }
  196. self.toRemove = true;
  197. }
  198. }
  199. }
  200.  
  201. self.getInitPack = function(){
  202. return {
  203. id:self.id,
  204. x:self.x,
  205. y:self.y,
  206. }
  207. }
  208.  
  209. self.getUpdatePack = function(){
  210. return {
  211. id:self.id,
  212. x:self.x,
  213. y:self.y
  214. }
  215. }
  216.  
  217. Bullet.list[self.id] = self;
  218. initPack.bullet.push(self.getInitPack());
  219. return self;
  220. }
  221. Bullet.list = {};
  222.  
  223. Bullet.update = function(){
  224. var pack = [];
  225. for(var i in Bullet.list){
  226. var bullet = Bullet.list[i];
  227. bullet.update();
  228. if(bullet.toRemove){
  229. delete Bullet.list[i];
  230. removePack.bullet.push(bullet.id);
  231. } else
  232. pack.push(bullet.getUpdatePack());
  233. }
  234. return pack;
  235. }
  236.  
  237. Bullet.getAllInitPack = function(){
  238. var bullets = [];
  239. for(var i in Bullet.list)
  240. bullets.push(Bullet.list[i].getInitPack());
  241. return bullets;
  242. }
  243.  
  244. var DEBUG = true;
  245.  
  246. var isValidPassword = function(data,cb){
  247. db.account.find({username:data.username,password:data.password},function(err,res){
  248. if(res.length > 0)
  249. cb(true);
  250. else
  251. cb(false);
  252. });
  253. }
  254.  
  255.  
  256. var isUsernameTaken = function(data,cb){
  257. db.account.find({username:data.username},function(err,res){
  258. if(res.length > 0)
  259. cb(true);
  260. else
  261. cb(false);
  262. });
  263. }
  264.  
  265. var addUser = function(data,cb){
  266. db.account.insert({username:data.username,password:data.password},function(err){
  267. cb();
  268. });
  269. }
  270.  
  271. //functionalities of socket libraries
  272. var io = require('socket.io')(serv,{});
  273. io.sockets.on('connection', function(socket){
  274. socket.id = Math.random();
  275. SOCKET_LIST[socket.id] = socket;
  276.  
  277. socket.on('signIn', function(data){
  278. isValidPassword(data, function(res){
  279. if(res){
  280. Player.onConnect(socket);
  281. socket.emit('signInResponse',{success:true});
  282. } else {
  283. socket.emit('signInResponse',{success:false});
  284. }
  285. });
  286. });
  287.  
  288. socket.on('signUp', function(data){
  289. isUsernameTaken(data, function(res){
  290. if(res){
  291. socket.emit('signUpResponse',{success:false});
  292. } else {
  293. addUser(data,function(){
  294. socket.emit('signUpResponse',{success:true});
  295. });
  296. }
  297. });
  298. });
  299.  
  300.  
  301. socket.on('disconnect', function(){
  302. delete SOCKET_LIST[socket.id];
  303. Player.onDisconnect(socket);
  304. });
  305.  
  306.  
  307. socket.on('sendMsgToServer', function(data){
  308. var playerName = ("" + socket.id).slice(2,7);
  309. for(var i in SOCKET_LIST){
  310. SOCKET_LIST[i].emit('addToChat',playerName + ': ' + data);
  311. }
  312. });
  313.  
  314. socket.on('evalServer', function(data){
  315. if(!DEBUG)
  316. return;
  317. var res = eval(data);
  318. socket.emit('evalAnswer',res);
  319. });
  320. });
  321.  
  322. var initPack = {player:[],bullet:[]};
  323. var removePack = {player:[],bullet:[]};
  324.  
  325. // 40 ms
  326. setInterval(function(){
  327. var pack = {
  328. player:Player.update(),
  329. bullet:Bullet.update(),
  330. }
  331.  
  332. for(var i in SOCKET_LIST){
  333. var socket = SOCKET_LIST[i];
  334. socket.emit('init', initPack);
  335. socket.emit('update', pack);
  336. socket.emit('remove', removePack);
  337. }
  338.  
  339. initPack.player = [];
  340. initPack.bullet = [];
  341. removePack.player = [];
  342. removePack.bullet = [];
  343. },1000/25);
  344.  
  345.  
  346.  
  347.  
  348.  
  349.  
  350.  
  351.  
  352.  
  353. <div id="signDiv">
  354. Username: <input id="signDiv-username" type="text"></input><br>
  355. Password: <input id="signDiv-password" type="password"></input>
  356. <button id="signDiv-signIn">Sign In</button>
  357. <button id="signDiv-signUp">Sign Up</button>
  358. </div>
  359.  
  360. <div id="gameDiv" style="display:none;">
  361. <canvas id="ctx" width="500" height="500" style="
  362. border:1px solid #000000;"></canvas>
  363.  
  364. <div id="chat-text" style="width:500px;height:100px;overflow-y:scroll">
  365. <div>Hello World</div>
  366. </div>
  367.  
  368. <form id="chat-form">
  369. <input id="chat-input" type="text" style="width:500px"></input>
  370. </form>
  371. </div>
  372.  
  373. <script src="
  374. https://cdn.socket.io/socket.io-1.4.5.js"
  375. ></script>
  376. <script>
  377. var socket = io();
  378.  
  379. //sign
  380. var signDiv = document.getElementById('signDiv');
  381. var signDivUsername = document.getElementById('signDiv-username');
  382. var signDivSignIn = document.getElementById('signDiv-signIn');
  383. var signDivSignUp = document.getElementById('signDiv-signUp');
  384. var signDivPassword = document.getElementById('signDiv-password');
  385.  
  386. signDivSignIn.onclick = function(){
  387. socket.emit('signIn',{username:signDivUsername.value,password:signDivPassword.value});
  388. }
  389.  
  390. signDivSignUp.onclick = function(){
  391. socket.emit('signUp',{username:signDivUsername.value,password:signDivPassword.value});
  392. }
  393.  
  394. socket.on('signInResponse',function(data){
  395. if(data.success){
  396. signDiv.style.display = 'none';
  397. gameDiv.style.display = 'inline-block';
  398. } else {
  399. alert("Sign in unsuccessful.");
  400. }
  401. });
  402.  
  403. socket.on('signUpResponse',function(data){
  404. if(data.success){
  405. alert("Sign up successful.");
  406. } else {
  407. alert("Sign up unsuccessful.");
  408. }
  409. });
  410.  
  411. //chat
  412. var chatText = document.getElementById('chat-text');
  413. var chatInput = document.getElementById('chat-input');
  414. var chatForm = document.getElementById('chat-form');
  415.  
  416.  
  417. socket.on('addToChat',function(data){
  418. chatText.innerHTML += '<div>' + data + '</div>';
  419. });
  420.  
  421. socket.on('evalAnswer',function(data){
  422. console.log(data);
  423. });
  424.  
  425.  
  426.  
  427. chatForm.onsubmit = function(e){
  428. e.preventDefault();
  429. if(chatInput.value[0] === '/')
  430. socket.emit('evalServer',chatInput.value.slice(1));
  431. else {
  432. socket.emit('sendMsgToServer',chatInput.value);
  433. }
  434. chatInput.value = '';
  435. }
  436.  
  437. //game
  438. var ctx = document.getElementById("ctx").getContext("2d");
  439. ctx.font = '30px Arial';
  440.  
  441. var Player = function(initPack){
  442. var self = {};
  443. self.id = initPack.id;
  444. self.number = initPack.number;
  445. self.x = initPack.x;
  446. self.y = initPack.y;
  447. self.hp = initPack.hp;
  448. self.hpMax = initPack.hpMax;
  449. self.score = initPack.score;
  450.  
  451. self.draw = function(){
  452. var hpWidth = 30 * self.hp / self.hpMax;
  453. ctx.fillRect(self.x - hpWidth/2,self.y - 40,hpWidth,4);
  454. ctx.fillText(self.number,self.x,self.y);
  455.  
  456. ctx.fillText(self.score,self.x,self.y-60);
  457. }
  458.  
  459. Player.list[self.id] = self;
  460. return self;
  461. }
  462. Player.list = {};
  463.  
  464.  
  465. var Bullet = function(initPack){
  466. var self = {};
  467. self.id = initPack.id;
  468. self.x = initPack.x;
  469. self.y = initPack.y
  470.  
  471. self.draw = function(){
  472. ctx.fillRect(self.x-5,self.y-5,10,10);
  473. }
  474.  
  475. Bullet.list[self.id] = self;
  476. return self;
  477. }
  478. Bullet.list = {};
  479.  
  480. socket.on('init',function(data){
  481. for(var i = 0 ; i < data.player.length; i++){
  482. new Player(data.player[i]);
  483. }
  484. for(var i = 0 ; i < data.bullet.length; i++){
  485. new Bullet(data.bullet[i]);
  486. }
  487. });
  488.  
  489. socket.on('update',function(data){
  490. for(var i = 0; i < data.player.length; i++){
  491. var pack = data.player[i];
  492. var p = Player.list[pack.id];
  493. if(p){
  494. if(pack.x !== undefined)
  495. p.x = pack.x;
  496. if(pack.y !== undefined)
  497. p.y = pack.y;
  498. if(pack.hp !== undefined)
  499. p.hp = pack.hp;
  500. if(pack.y !== undefined)
  501. p.score = pack.score;
  502. }
  503. }
  504. for(var i = 0; i < data.bullet.length; i++){
  505. var pack = data.bullet[i];
  506. var b = Bullet.list[data.bullet[i].id];
  507. if(b){
  508. if(pack.x !== undefined)
  509. b.x = pack.x;
  510. if(pack.y !== undefined)
  511. b.y = pack.y;
  512. }
  513. }
  514. });
  515.  
  516. socket.on('remove',function(data){
  517. for(var i = 0 ; i < data.player.length; i++){
  518. delete Player.list[data.player[i]];
  519. }
  520. for(var i = 0 ; i < data.bullet.length; i++){
  521. delete Player.list[data.bullet[i]];
  522. }
  523. });
  524.  
  525.  
  526. setInterval(function(){
  527. ctx.clearRect(0,0,500,500);
  528. for(var i in Player.list)
  529. Player.list[i].draw();
  530.  
  531. for(var i in Bullet.list)
  532. Bullet.list[i].draw();
  533.  
  534. },40);
  535.  
  536.  
  537. document.onkeydown = function(event){
  538. if(event.keyCode === 68) // d
  539. socket.emit('keyPress',{inputId:'right',state:true});
  540. else if(event.keyCode === 83) // s
  541. socket.emit('keyPress',{inputId:'down',state:true});
  542. else if(event.keyCode === 65) // a
  543. socket.emit('keyPress',{inputId:'left',state:true});
  544. else if(event.keyCode === 87) // w
  545. socket.emit('keyPress',{inputId:'up',state:true});
  546. }
  547.  
  548. document.onkeyup = function(event){
  549. if(event.keyCode === 68) // d
  550. socket.emit('keyPress',{inputId:'right',state:false});
  551. else if(event.keyCode === 83) // s
  552. socket.emit('keyPress',{inputId:'down',state:false});
  553. else if(event.keyCode === 65) // a
  554. socket.emit('keyPress',{inputId:'left',state:false});
  555. else if(event.keyCode === 87) // w
  556. socket.emit('keyPress',{inputId:'up',state:false});
  557. }
  558.  
  559. document.onmousedown = function(event){
  560. socket.emit('keyPress', {inputId:'attack',state:true});
  561. }
  562.  
  563. document.onmouseup = function(event){
  564. socket.emit('keyPress', {inputId:'attack',state:false});
  565. }
  566.  
  567. document.onmousemove = function(event){
  568. var x = -250 + event.clientX - 8;
  569. var y = -250 + event.clientY - 8;
  570. var angle = Math.atan2(y,x) / Math.PI * 180;
  571. socket.emit('keyPress',{inputId:'mouseAngle',state:angle});
  572. }
  573.  
  574.  
  575.  
  576. </script>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement