Advertisement
ipsBruno

(Javascript) Multiplayer em Canvas

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