Advertisement
Guest User

Untitled

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