Advertisement
ipsBruno

(Javascript) Multiplayer em Canvas

Feb 25th, 2014
310
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*
  2.  * Mover QUADRADOs MULTIPLAYER
  3.  * Protótipo para implementação de jogos Peer-to-Peer em JS e Canvas
  4.  * Simples, mas serve pra estudos
  5.  * email@brunodasilva.com
  6.  *
  7. */
  8.  
  9. <script src="http://cdn.peerjs.com/0.3/peer.min.js"></script>
  10.  
  11.  
  12. <script>
  13.  
  14.  
  15. // Configurações básicas para uso de JS
  16. var appid = 'gfr5dkuqgyyl23xr';
  17.  
  18. // Variável para definir quem é o jogador. O convidante ou convidado. Caso for = -1, não está jogando
  19. var convidado = -1;
  20.  
  21. // Fazer a conexão
  22. var peer = new Peer({
  23.  
  24.     key:  appid,
  25.     debug: 0,
  26.  
  27.     config: {'iceServers': [
  28.         { url: 'stun:stun.l.google.com:19302' }
  29.     ]}
  30. });
  31.  
  32. // Ao conectar, registrar o ID do jogador conectado
  33. peer.on('open', function(id) {
  34.   document.getElementById('seuid').innerHTML = id;
  35. });
  36.  
  37. // caso Receber alguma conexão, chamar função recebeuConvite
  38. peer.on('connection', function(conn) {
  39.     recebeuConvite(conn);
  40. });
  41.  
  42.  
  43. // Ao clicar no link, abrir caixa para convite de jogador
  44. function jogarCom() {
  45.  
  46.     // caso ele estiver jogando
  47.     if(convidado != -1) return alert("Você já está jogando!");
  48.  
  49.     // abrir caixa
  50.     var jogarid = prompt("Digite o ID da pessoa com quem deseja jogar:");
  51.    
  52.     // idc guarda o id com quem está jogando
  53.     idc = jogarid;
  54.  
  55.     // enviar o convite para o id digitado
  56.     conn = peer.connect(jogarid);
  57.  
  58.     conn.on('open', function(){
  59.         conn.send("convite");
  60.     });
  61.  
  62.     // aguardar dois segundos e liberar o jogo pra quem está convindado
  63.  
  64.     setTimeout(function() { convidado = false; }, 2000);
  65.  
  66.    
  67.  
  68.  
  69. }
  70.  
  71.  
  72. // funcao que recebe os dados
  73.  
  74. function recebeuConvite(c) {
  75.  
  76.        
  77.     c.on('data', function(data) {
  78.    
  79.         // ao receber um dado, verificar se é convite
  80.         if(data == "convite") {
  81.  
  82.             // caso ele já for convidado, não fazer nada         
  83.             if(convidado != -1) return false;
  84.  
  85.             // registrar quem convidou
  86.             idc = (c.peer);
  87.  
  88.             // avisar convite
  89.             alert("Você recebeu um convite!");
  90.    
  91.             // liberar o jogo
  92.             convidado = true;
  93.         }
  94.         else {
  95.  
  96.             // caso não for jogo de convite, é para atualizar movimento
  97.             atualizarMovimento(data);
  98.  
  99.         }
  100.        
  101.     });
  102.  
  103. }
  104. </script>
  105.  
  106. Seu ID de jogo é: <b><span id="seuid"></span></b>
  107.  
  108. <br/>
  109.  
  110. Para jogar com alguém, <a href="javascript: jogarCom();">clique aqui</a>
  111.  
  112. <br/>
  113.  
  114. <br/>
  115.  
  116. <canvas style="background-color:black" id='canvas' width=800 height=600></canvas>
  117.  
  118.  
  119. <script>
  120.         cnv = document.getElementById('canvas').getContext('2d')
  121.  
  122.         cnv.fillStyle="white"
  123.  
  124.         // definir tamanho do quadro
  125.         var w = 800
  126.  
  127.         var h = 600
  128.  
  129.         // definir pos inicial dos cara
  130.         var x = new Array(0, 100)
  131.  
  132.         var y = new Array(100, 200);
  133.  
  134.  
  135.         // definir velocidade de cada jogador
  136.         dx = 30
  137.         dy = 30
  138.  
  139.  
  140.         // criar os jogadores
  141.  
  142.         cnv.clearRect(0,0,w,w);
  143.  
  144.         cnv.fillRect(x[1], y[1], 25, 25);
  145.  
  146.         cnv.fillRect(x[0], y[0], 25, 25);
  147.  
  148.         // essa funcao aqui, é chamada quando usuario teclar algo, realiza os movimentos
  149.         function executarMovimento(t) {
  150.      
  151.  
  152.                 // caso nao estiver jogando, nao fazer nada
  153.  
  154.                 if(convidado == -1) {
  155.  
  156.         alert("Ainda não começou o jogo!");
  157.  
  158.         return false;
  159.     }
  160.  
  161.         // verificar se ele é o jogador 1 ou jogador 2 e proceder o movimento {W,A,S,D}
  162.     if(convidado == true) {
  163.         if(119 == t) y[0] -= dx;
  164.         if(115 == t) y[0] += dx;
  165.  
  166.         if(100 == t) x[0] += dx;
  167.         if(097 == t) x[0] -= dx;
  168.     }
  169.     else {
  170.         if(119 == t) y[1] -= dx;
  171.         if(115 == t) y[1] += dx;
  172.  
  173.         if(100 == t) x[1] += dx;
  174.         if(097 == t) x[1] -= dx;
  175.  
  176.     }
  177.  
  178.     // verificar se ele ultrapassou os limites do quadros e corrigir
  179.     if(y[0] < 0) y[0] = 0;
  180.     if(x[0] < 0) x[0] = 0;
  181.  
  182.     if(y[1] < 0) y[1] = 0;
  183.     if(x[1] < 0) x[1] = 0;
  184.  
  185.  
  186.  
  187.     if(y[0] > h) y[0] = h;
  188.     if(x[0] > w) x[0] = w;
  189.  
  190.     if(y[1] > h) y[1] =h;
  191.     if(x[1] > w) x[1] = w;
  192.  
  193.  
  194.     // recriar na nova posição
  195.     cnv.clearRect(0,0,w,w);
  196.     cnv.fillRect(x[0], y[0], 25, 25);
  197.     cnv.fillRect(x[1], y[1], 25, 25);
  198.         }
  199.  
  200.  
  201.  
  202.         // essa funcao é chamada a cada 1 segundo, para enviar os dados para o outro PLAYER informando qual a posição do jogador
  203.         function outroMoveu() {
  204.  
  205.  
  206.     // caso ele não estiver jogando nao fazer nada
  207.     if(convidado == -1) return false;
  208.    
  209.                 // realizar conexao
  210.     conn = peer.connect(idc);
  211.  
  212.                 // enviar os dados
  213.     conn.on('open', function(){
  214.         // caso ele for o jogador 1, enviar as informacoes x[0] e y[0]
  215.         if(convidado == true) conn.send(x[0]+"|"+y[0]);
  216.  
  217.         // caso for o 2, envia x[1] e y[1]
  218.         if(convidado == false) conn.send(x[1]+"|"+y[1]);
  219.  
  220.     });
  221.  
  222.     // fechar conexão
  223.     conn.close();
  224.  
  225.         }
  226.  
  227.    
  228.         // essa funcao é chamada quando recebe as informações do outro player
  229.         function atualizarMovimento(s) {
  230.    
  231.  
  232.     if(convidado == -1) return false;
  233.  
  234.     // filtrar X e Y       
  235.     a = s.split("|");
  236.  
  237.                 // verificar qual é o jogador, e mover o OUTRO jogador (afinal, as informacoes sao do OUTRO jogador e nao ele)
  238.     if(convidado != true)  {
  239.         x[0] = a[0];
  240.         y[0] = a[1];
  241.     }
  242.     else {
  243.         x[1] = a[0];
  244.         y[1] = a[1];
  245.     }
  246.  
  247.    
  248.             // atualizar os quadros
  249.     cnv.clearRect(0,0,w,w);
  250.     cnv.fillRect(x[0], y[0], 25, 25);
  251.     cnv.fillRect(x[1], y[1], 25, 25);
  252.  
  253.         }
  254.      
  255.  
  256.         // verificar tecla pressionada no body
  257.         function tecla_pressionada(){
  258.                 executarMovimento( window.event.keyCode) ;
  259.         }
  260.  
  261.         // atualizar dados a cada 1 seg
  262.  
  263.         setInterval( function () { outroMoveu(); }, 1000 );
  264. </script>
  265.  
  266. <body onKeyPress="tecla_pressionada()">
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement