Advertisement
Guest User

Untitled

a guest
May 3rd, 2016
1,175
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.30 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.  
  51. var super_update = self.update;
  52. self.update = function(){
  53. self.updateSpd();
  54. super_update();
  55.  
  56. if(self.pressingAttack){
  57. self.shootBullet(self.mouseAngle);
  58. }
  59. }
  60. self.shootBullet = function(angle){
  61. var b = Bullet(self.id,angle);
  62. b.x = self.x;
  63. b.y = self.y;
  64. }
  65.  
  66. self.updateSpd = function(){
  67. if(self.pressingRight)
  68. self.spdX = self.maxSpd;
  69. else if(self.pressingLeft)
  70. self.spdX = -self.maxSpd;
  71. else
  72. self.spdX = 0;
  73.  
  74. if(self.pressingUp)
  75. self.spdY = -self.maxSpd;
  76. else if(self.pressingDown)
  77. self.spdY = self.maxSpd;
  78. else
  79. self.spdY = 0;
  80. }
  81. Player.list[id] = self;
  82.  
  83. initPack.player.push({
  84. id:self.id,
  85. x:self.x,
  86. y:self.y,
  87. number:self.number,
  88. });
  89. return self;
  90. }
  91. Player.list = {};
  92. Player.onConnect = function(socket){
  93. var player = Player(socket.id);
  94. socket.on('keyPress',function(data){
  95. if(data.inputId === 'left')
  96. player.pressingLeft = data.state;
  97. else if(data.inputId === 'right')
  98. player.pressingRight = data.state;
  99. else if(data.inputId === 'up')
  100. player.pressingUp = data.state;
  101. else if(data.inputId === 'down')
  102. player.pressingDown = data.state;
  103. else if(data.inputId === 'attack')
  104. player.pressingAttack = data.state;
  105. else if(data.inputId === 'mouseAngle')
  106. player.mouseAngle = data.state;
  107. });
  108. }
  109. Player.onDisconnect = function(socket){
  110. delete Player.list[socket.id];
  111. removePack.player.push(socket.id);
  112. }
  113. Player.update = function(){
  114. var pack = [];
  115. for(var i in Player.list){
  116. var player = Player.list[i];
  117. player.update();
  118. pack.push({
  119. id:player.id,
  120. x:player.x,
  121. y:player.y,
  122. });
  123. }
  124. return pack;
  125. }
  126.  
  127.  
  128. var Bullet = function(parent,angle){
  129. var self = Entity();
  130. self.id = Math.random();
  131. self.spdX = Math.cos(angle/180*Math.PI) * 10;
  132. self.spdY = Math.sin(angle/180*Math.PI) * 10;
  133. self.parent = parent;
  134. self.timer = 0;
  135. self.toRemove = false;
  136. var super_update = self.update;
  137. self.update = function(){
  138. if(self.timer++ > 100)
  139. self.toRemove = true;
  140. super_update();
  141.  
  142. for(var i in Player.list){
  143. var p = Player.list[i];
  144. if(self.getDistance(p) < 32 && self.parent !== p.id){
  145. //handle collision. ex: hp--;
  146. self.toRemove = true;
  147. }
  148. }
  149. }
  150. Bullet.list[self.id] = self;
  151. initPack.bullet.push({
  152. id:self.id,
  153. x:self.x,
  154. y:self.y,
  155. });
  156. return self;
  157. }
  158. Bullet.list = {};
  159.  
  160. Bullet.update = function(){
  161. var pack = [];
  162. for(var i in Bullet.list){
  163. var bullet = Bullet.list[i];
  164. bullet.update();
  165. if(bullet.toRemove){
  166. delete Bullet.list[i];
  167. removePack.bullet.push(bullet.id);
  168. } else
  169. pack.push({
  170. id:bullet.id,
  171. x:bullet.x,
  172. y:bullet.y,
  173. });
  174. }
  175. return pack;
  176. }
  177.  
  178. var DEBUG = true;
  179.  
  180. var isValidPassword = function(data,cb){
  181. db.account.find({username:data.username,password:data.password},function(err,res){
  182. if(res.length > 0)
  183. cb(true);
  184. else
  185. cb(false);
  186. });
  187. }
  188. var isUsernameTaken = function(data,cb){
  189. db.account.find({username:data.username},function(err,res){
  190. if(res.length > 0)
  191. cb(true);
  192. else
  193. cb(false);
  194. });
  195. }
  196. var addUser = function(data,cb){
  197. db.account.insert({username:data.username,password:data.password},function(err){
  198. cb();
  199. });
  200. }
  201.  
  202. var io = require('socket.io')(serv,{});
  203. io.sockets.on('connection', function(socket){
  204. socket.id = Math.random();
  205. SOCKET_LIST[socket.id] = socket;
  206.  
  207. socket.on('signIn',function(data){
  208. isValidPassword(data,function(res){
  209. if(res){
  210. Player.onConnect(socket);
  211. socket.emit('signInResponse',{success:true});
  212. } else {
  213. socket.emit('signInResponse',{success:false});
  214. }
  215. });
  216. });
  217. socket.on('signUp',function(data){
  218. isUsernameTaken(data,function(res){
  219. if(res){
  220. socket.emit('signUpResponse',{success:false});
  221. } else {
  222. addUser(data,function(){
  223. socket.emit('signUpResponse',{success:true});
  224. });
  225. }
  226. });
  227. });
  228.  
  229.  
  230. socket.on('disconnect',function(){
  231. delete SOCKET_LIST[socket.id];
  232. Player.onDisconnect(socket);
  233. });
  234. socket.on('sendMsgToServer',function(data){
  235. var playerName = ("" + socket.id).slice(2,7);
  236. for(var i in SOCKET_LIST){
  237. SOCKET_LIST[i].emit('addToChat',playerName + ': ' + data);
  238. }
  239. });
  240.  
  241. socket.on('evalServer',function(data){
  242. if(!DEBUG)
  243. return;
  244. var res = eval(data);
  245. socket.emit('evalAnswer',res);
  246. });
  247.  
  248.  
  249.  
  250. });
  251.  
  252. var initPack = {player:[],bullet:[]};
  253. var removePack = {player:[],bullet:[]};
  254.  
  255.  
  256. setInterval(function(){
  257. var pack = {
  258. player:Player.update(),
  259. bullet:Bullet.update(),
  260. }
  261.  
  262. for(var i in SOCKET_LIST){
  263. var socket = SOCKET_LIST[i];
  264. socket.emit('init',initPack);
  265. socket.emit('update',pack);
  266. socket.emit('remove',removePack);
  267. }
  268. initPack.player = [];
  269. initPack.bullet = [];
  270. removePack.player = [];
  271. removePack.bullet = [];
  272.  
  273. },1000/25);
  274.  
  275.  
  276.  
  277.  
  278.  
  279. <div id="signDiv">
  280. Username: <input id="signDiv-username" type="text"></input><br>
  281. Password: <input id="signDiv-password" type="password"></input>
  282. <button id="signDiv-signIn">Sign In</button>
  283. <button id="signDiv-signUp">Sign Up</button>
  284. </div>
  285.  
  286. <div id="gameDiv" style="display:none;">
  287. <canvas id="ctx" width="500" height="500" style="border:1px solid #000000;"></canvas>
  288.  
  289. <div id="chat-text" style="width:500px;height:100px;overflow-y:scroll">
  290. <div>Hello!</div>
  291. </div>
  292.  
  293. <form id="chat-form">
  294. <input id="chat-input" type="text" style="width:500px"></input>
  295. </form>
  296. </div>
  297.  
  298. <script src="https://cdn.socket.io/socket.io-1.4.5.js"></script>
  299. <script>
  300. var socket = io();
  301.  
  302. //sign
  303. var signDiv = document.getElementById('signDiv');
  304. var signDivUsername = document.getElementById('signDiv-username');
  305. var signDivSignIn = document.getElementById('signDiv-signIn');
  306. var signDivSignUp = document.getElementById('signDiv-signUp');
  307. var signDivPassword = document.getElementById('signDiv-password');
  308.  
  309. signDivSignIn.onclick = function(){
  310. socket.emit('signIn',{username:signDivUsername.value,password:signDivPassword.value});
  311. }
  312. signDivSignUp.onclick = function(){
  313. socket.emit('signUp',{username:signDivUsername.value,password:signDivPassword.value});
  314. }
  315. socket.on('signInResponse',function(data){
  316. if(data.success){
  317. signDiv.style.display = 'none';
  318. gameDiv.style.display = 'inline-block';
  319. } else
  320. alert("Sign in unsuccessul.");
  321. });
  322. socket.on('signUpResponse',function(data){
  323. if(data.success){
  324. alert("Sign up successul.");
  325. } else
  326. alert("Sign up unsuccessul.");
  327. });
  328.  
  329. //chat
  330. var chatText = document.getElementById('chat-text');
  331. var chatInput = document.getElementById('chat-input');
  332. var chatForm = document.getElementById('chat-form');
  333.  
  334. socket.on('addToChat',function(data){
  335. chatText.innerHTML += '<div>' + data + '</div>';
  336. });
  337. socket.on('evalAnswer',function(data){
  338. console.log(data);
  339. });
  340.  
  341.  
  342. chatForm.onsubmit = function(e){
  343. e.preventDefault();
  344. if(chatInput.value[0] === '/')
  345. socket.emit('evalServer',chatInput.value.slice(1));
  346. else
  347. socket.emit('sendMsgToServer',chatInput.value);
  348. chatInput.value = '';
  349. }
  350.  
  351. //game
  352. var ctx = document.getElementById("ctx").getContext("2d");
  353. ctx.font = '30px Arial';
  354.  
  355. var Player = function(initPack){
  356. var self = {};
  357. self.id = initPack.id;
  358. self.number = initPack.number;
  359. self.x = initPack.x;
  360. self.y = initPack.y;
  361. Player.list[self.id] = self;
  362. return self;
  363. }
  364. Player.list = {};
  365.  
  366.  
  367. var Bullet = function(initPack){
  368. var self = {};
  369. self.id = initPack.id;
  370. self.x = initPack.x;
  371. self.y = initPack.y;
  372. Bullet.list[self.id] = self;
  373. return self;
  374. }
  375. Bullet.list = {};
  376.  
  377.  
  378. socket.on('init',function(data){
  379. //{ player : [{id:123,number:'1',x:0,y:0},{id:1,number:'2',x:0,y:0}], bullet: []}
  380. for(var i = 0 ; i < data.player.length; i++){
  381. new Player(data.player[i]);
  382. }
  383. for(var i = 0 ; i < data.bullet.length; i++){
  384. new Bullet(data.bullet[i]);
  385. }
  386. });
  387.  
  388. socket.on('update',function(data){
  389. //{ player : [{id:123,x:0,y:0},{id:1,x:0,y:0}], bullet: []}
  390. for(var i = 0 ; i < data.player.length; i++){
  391. var pack = data.player[i];
  392. var p = Player.list[pack.id];
  393. if(p){
  394. if(pack.x !== undefined)
  395. p.x = pack.x;
  396. if(pack.y !== undefined)
  397. p.y = pack.y;
  398. }
  399. }
  400. for(var i = 0 ; i < data.bullet.length; i++){
  401. var pack = data.bullet[i];
  402. var b = Bullet.list[data.bullet[i].id];
  403. if(b){
  404. if(pack.x !== undefined)
  405. b.x = pack.x;
  406. if(pack.y !== undefined)
  407. b.y = pack.y;
  408. }
  409. }
  410. });
  411.  
  412. socket.on('remove',function(data){
  413. //{player:[12323],bullet:[12323,123123]}
  414. for(var i = 0 ; i < data.player.length; i++){
  415. delete Player.list[data.player[i]];
  416. }
  417. for(var i = 0 ; i < data.bullet.length; i++){
  418. delete Bullet.list[data.bullet[i]];
  419. }
  420. });
  421.  
  422. setInterval(function(){
  423. ctx.clearRect(0,0,500,500);
  424. for(var i in Player.list)
  425. ctx.fillText(Player.list[i].number,Player.list[i].x,Player.list[i].y);
  426. for(var i in Bullet.list)
  427. ctx.fillRect(Bullet.list[i].x-5,Bullet.list[i].y-5,10,10);
  428. },40);
  429.  
  430.  
  431. document.onkeydown = function(event){
  432. if(event.keyCode === 68) //d
  433. socket.emit('keyPress',{inputId:'right',state:true});
  434. else if(event.keyCode === 83) //s
  435. socket.emit('keyPress',{inputId:'down',state:true});
  436. else if(event.keyCode === 65) //a
  437. socket.emit('keyPress',{inputId:'left',state:true});
  438. else if(event.keyCode === 87) // w
  439. socket.emit('keyPress',{inputId:'up',state:true});
  440.  
  441. }
  442. document.onkeyup = function(event){
  443. if(event.keyCode === 68) //d
  444. socket.emit('keyPress',{inputId:'right',state:false});
  445. else if(event.keyCode === 83) //s
  446. socket.emit('keyPress',{inputId:'down',state:false});
  447. else if(event.keyCode === 65) //a
  448. socket.emit('keyPress',{inputId:'left',state:false});
  449. else if(event.keyCode === 87) // w
  450. socket.emit('keyPress',{inputId:'up',state:false});
  451. }
  452.  
  453. document.onmousedown = function(event){
  454. socket.emit('keyPress',{inputId:'attack',state:true});
  455. }
  456. document.onmouseup = function(event){
  457. socket.emit('keyPress',{inputId:'attack',state:false});
  458. }
  459. document.onmousemove = function(event){
  460. var x = -250 + event.clientX - 8;
  461. var y = -250 + event.clientY - 8;
  462. var angle = Math.atan2(y,x) / Math.PI * 180;
  463. socket.emit('keyPress',{inputId:'mouseAngle',state:angle});
  464. }
  465.  
  466.  
  467.  
  468.  
  469. </script>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement