Ir ao conteúdo
  • Cadastre-se

Efeito substuição


Posts recomendados

Bom, voltando ao jogo, como sou leigo ainda nesse tipo de assunto ainda tenho muitas dúvidas.

Primeiramente eu ainda não sei como faço para um jogador usar a carta ao clicar nela com o javascript, sem interromper o jogo que vai ser online.

Outra coisa, eu queria fazer um efeito na hora de substituir a carta com javascript, eu já tenho o efeito aqui, só não sei como inserir quando o jogador clicar na carta, seria tipo um animate ( jquery).

 

abraços!

Link para o comentário
Compartilhar em outros sites

  • Moderador

Bom, não tenho um conhecimento sobre jogos onlines.. mas pela lógica podemos pensar da seguinte forma:

 

você tem os atributos das cartas cadastradas, com as imagens das cartas. quando um usuário fazer uma requisição( usar uma carta), você faz uma busca no banco de dados dos atributos dela..... então fazer algum tipo de comparação com a carta do adversário, se a sua carta for menor( em questão de  valores dos atributos),  você perde, e sua carta é eliminada( jogando para o fim do deck). 

 

Pondo isso em prática basicamente, você usará uma função jQuery chamada $.ajax() para fazer essas requisições de forma assíncrona.

Quanto ao efeito, você pode chamar o efeito no callback da função $.ajax() no parametro: success, que consiste em executar alguma coisa se a requisição for bem sucedida.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Estou estudando baseado em uma videoaulas sobre chats php.Acho que é uma boa pra aprender já como usar a função que atualiza os dados sem refresh.O sistema de batalha era exatamente assim que eu iria fazer, a minha duvida mesmo era como eu iria formular a batalha, tipo como eu pegaria os jogadores e botaria em uma batalha. seria por get?
Outra dúvida minha é quanto á videoaula que eu estou vendo é: por que eles usam classes para se conectar ao banco de dados?

Agradeço desde já.

[ ]'s


PS: No caso a videoaula é essa 

Link para o comentário
Compartilhar em outros sites

  • Moderador

Olá,

 

então, eles utilizam classes pois é o conceito de orientação a objetos. 

Sobre a mecânica do jogo.. infelizmente não sei dizer como funciona. eu não vi as outras video aulas. 

Só acho o seguinte,  tentar pensar de forma mais simples, antes de entrar no conceito de orientada a  objetos.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Pretendo fazer de forma mais simples possível, estou vendo as video aula apenas pelo $.ajax() para ver como funciona na prática.

o que eu estava me referindo mesmo, é como pego o dado dos jogadores para formular uma batalha.

Outra coisa, só pra saber mesmo rsrrs, teria como fazer um chat sem orientação a objetos, certo?

Abraços!

PS: devo usar sessões para fazer o sistema do combate?

Link para o comentário
Compartilhar em outros sites

  • Moderador

Sim, dá para fazer um chat sem "orientação a objetos" no caso você apenas usaria o php de forma procedural.(como você já vem fazendo)

 

No sistema de combate, acredito que não seja necessário, a menos que querias guardar as informações na sessão para usar posterior. isso é geralmente usado em sistemas de login, onde é armazenado o ID do usuario e nome de login, para poder apresentar o " bom dia fulano de tal" click aqui para deslogar.

 

Quanto a batalha.. você pode criar um arquivo chamado batalha.php,  e lá, fazer as consultas dos jogadores e das cartas.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Não consegui fazer com que executa a função usar carta pelo php, pelo menos, não sei como faz isso porque ele vai alterar o array do usa.php e não do jogo. php '-'
atualmente deixei assim

Jogo.php

  <?php  $name = $_SESSION["nome"];  $query=mysql_query("SELECT * FROM users WHERE nome='$name'"); //Seleciona todos os usúarios cujo o nome for o nome de quem está logado  $x=mysql_fetch_array($query); // Tranforma o nome do usuário em texto baseados em arrays  $xo =  $x["id"]; //Pega o id do usuário que está logado  $query2=mysql_query("SELECT * FROM deck WHERE idjogador='$xo' ORDER BY RAND()"); // Seleciona todas as cartas do deck que pertence ao jogador logado, por ordem aleatória   echo "<div id='cards'>"; //div$max = mysql_num_rows($query2); for($i = 0; $i < $max; $i++):$row = mysql_fetch_object($query2);$qur=mysql_query("SELECT * FROM cartas  WHERE id='$row->idcarta'"); $x2=mysql_fetch_array($qur);   $cartaimagem[$i]= $x2["imagem"];   $cartaid[$i]= $x2["id"];endfor;$i = 0;for($i=0;$i<5;$i++){$mao[$i]=$cartaid[$i];$maoimagem[$i]=$cartaimagem[$i];  }  unset($cartaid[0],$cartaid[1],$cartaid[2],$cartaid[3],$cartaid[4]);foreach($mao as $image => $coc){$k1 = mysql_query("SELECT * FROM cartas WHERE id='$coc'");$xd = mysql_fetch_array($k1);$image = $xd["imagem"];echo "<a href='usa.php' class='carta'><img src='".$image."' width='110' height='190'/></a>";}echo "<img src='images/cartas/default.png' width='110' height='190'><div class='cont'>".count($cartaid)."</div>";  ?>

Usa.php

<?php$host = "localhost";$bd="cadastro";$user="root";$pass="";$conexao = mysql_connect($host, $user, $pass) or die(mysql_error());mysql_select_db($bd) or die(mysql_error());?><?phpsession_start();  $name = $_SESSION["nome"];  $query=mysql_query("SELECT * FROM users WHERE nome='$name'"); //Seleciona todos os usúarios cujo o nome for o nome de quem está logado  $x=mysql_fetch_array($query); // Tranforma o nome do usuário em texto baseados em arrays  $xo =  $x["id"]; //Pega o id do usuário que está logado  $query2=mysql_query("SELECT * FROM deck WHERE idjogador='$xo' ORDER BY RAND()"); // Seleciona todas as cartas do deck que pertence ao jogador logado, por ordem aleatória   echo "<div id='cards'>"; //div$max = mysql_num_rows($query2); for($i = 0; $i < $max; $i++):$row = mysql_fetch_object($query2);$qur=mysql_query("SELECT * FROM cartas  WHERE id='$row->idcarta'"); $x2=mysql_fetch_array($qur);   $cartaimagem[$i]= $x2["imagem"];   $cartaid[$i]= $x2["id"];endfor;$i = 0;for($i=0;$i<5;$i++){$mao[$i]=$cartaid[$i];$maoimagem[$i]=$cartaimagem[$i];  }  unset($cartaid[0],$cartaid[1],$cartaid[2],$cartaid[3],$cartaid[4]);  function usarCarta($carta) {	global $mao;	global $i;	global $cartaid; 	foreach ($mao as $cartas =>$valor):	if($valor == $carta):		unset($mao[$cartas]);		array_push($mao,$cartaid[$i]);	unset($cartaid[$i]);		$i++;	endif;		endforeach;}usarCarta ("7");?>

intermed.js
 


$(document).ready(function(){
    $(".carta").click(function(event) {
            event.preventDefault();
 var idCarta = $(".hidden").val($("img",this).attr("id"));
 
        $.ajax({
                       //pegando a url a partir do href do link
            url: $(this).attr("href"),
data: "id="+idCarta,
            type: 'GET',
            context: jQuery('#content'),
            success: function(data){
                this.append(data);
            }
        });     
    });
    });
Link para o comentário
Compartilhar em outros sites

  • Moderador

Assim,

 

retire a função dali e jogue para dentro de um arquivo por exemplo functions.php 

Então no usa.php você chama a função.

A ideia da função é você passar um parâmetro. este parâmetro deve ser o ID da carta registrada. Mas para isso você precisa do ID da carta. 

 

Como você precisa passar um ID para o usa.php, a partir da carta clicada, você precisa de algum modo ter este id para enviar. então você pode usar um campo input do tipo hidden,  Neste campo hidden, vai receber o id da carta clicada, e já envia ao php :D

 

Um exemplo simples de requisição

Primeiro você faz uma consulta na tabela das cartas para pegar o ID, depois você passa para o jQuery

$(document).ready(function(){    $(".carta").click(function(event) {            event.preventDefault();                  var idCarta = $(".hidden").val(<?php echo $id ?>);           $.ajax({                       url: 'usa.php',            type: 'GET',            dataType: 'html',            data: idCarta,             context: jQuery('#content'),            success: function(data){                $('alguma div').html(data);            }        });         });    });

então no seu usa.php você recebe por GET o id passado:

<?php$host = "localhost";$bd="cadastro";$user="root";$pass="";$conexao = mysql_connect($host, $user, $pass) or die(mysql_error());mysql_select_db($bd) or die(mysql_error());?><?phpsession_start();$idCartausada = $_GET=["id"]  $name = $_SESSION["nome"];  $query=mysql_query("SELECT * FROM users WHERE nome='$name'"); //Seleciona todos os usúarios cujo o nome for o nome de quem está logado  $x=mysql_fetch_array($query); // Tranforma o nome do usuário em texto baseados em arrays  $xo =  $x["id"]; //Pega o id do usuário que está logado  $query2=mysql_query("SELECT * FROM deck WHERE idjogador='$xo' ORDER BY RAND()"); // Seleciona todas as cartas do deck que pertence ao jogador logado, por ordem aleatória   echo "<div id='cards'>"; //div$max = mysql_num_rows($query2); for($i = 0; $i < $max; $i++):$row = mysql_fetch_object($query2);$qur=mysql_query("SELECT * FROM cartas  WHERE id='$row->idcarta'"); $x2=mysql_fetch_array($qur);   $cartaimagem[$i]= $x2["imagem"];   $cartaid[$i]= $x2["id"];endfor;$i = 0;for($i=0;$i<5;$i++){$mao[$i]=$cartaid[$i];$maoimagem[$i]=$cartaimagem[$i];  }  unset($cartaid[0],$cartaid[1],$cartaid[2],$cartaid[3],$cartaid[4]);  function usarCarta($carta) {	global $mao;	global $i;	global $cartaid; 	foreach ($mao as $cartas =>$valor):	if($valor == $carta):		unset($mao[$cartas]);		array_push($mao,$cartaid[$i]);	unset($cartaid[$i]);		$i++;	endif;		endforeach;}usarCarta ($idCartaUsada);?>

A ideia é essa. agora é so implementar

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Eu não entendi muito bem o negocio da função, eu teria que atualizar o array que estivesse no jogo.php.

quanto a pegar o id da carta e enviar via GET eu tambem não entendi direito o que fez, porém acho que entendi o objetivo e então fiz a minha, e consegui pegar o valor da carta no usa.php. O problema é ele atualiza o array do usa.php e não do jogo.php.

segue:
JS

	$(document).ready(function(){    $(".carta").click(function(event) {            event.preventDefault();			  var idCarta = $(".hidden").val($("img",this).attr("id"));var aCarta = $('.hidden').val();        $.ajax({                       //pegando a url apartir do href do link            url: 'usa.php',            type: 'GET',			data: "id="+aCarta,            context: jQuery('#content'),            success: function(data){                this.append(data);            }        });         });    }); 

A parte do Jogo.PHP que eu mudei
 

$image = $xd["imagem"];$id = $xd["id"];echo "<a href='usa.php' class='carta'><img id='$id' src='".$image."' width='110' height='190'/></a>";}echo "<img src='images/cartas/default.png' width='110' height='190'><div class='cont'>".count($cartaid)."</div>";  ?> 

E o usa.php deixei como você postou.

Link para o comentário
Compartilhar em outros sites

  • Moderador

Parando para analisar seu código, fica um pouco redundante você ter o usa.php e jogo.php

 

você pode mesclar esses dois arquivos... 

 

Como mencionei anteriormente, evite de usar funções soltas como no caso ali. crie um arquivo functions.php e jogue a função para dentro. e chame ela no seu usa.php

 

Sugestão: elimine o jogo.php  deixe apenas o usa.php. nele você coloca os códigos do jogo,php.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Moderador

Sobre as funções, o que quis dizer é que você pode colocar ela separada, chamar o arquivo da função, e depois usar a função.

Sobre a ideia que eu dei esquece, vamos voltar um pouco na história e repensar na estrutura antiga( a que você estava fazendo) mas com algumas mudanças:

 

Resumidamente seria esta estrutura:

conexao.php(fazer a conexão com o banco)

Functions.php (conterá as funções criadas por você)

duelo.php (faz a consulta para listar as cartas.. montar o layout do duelo)

action.php( recebe os dados de duelo.php, processa os dados e retorna a resposta para duelo.php).

 

O action.php só servirá para receber os dados(id1da carta usada)... e executar a função de usar a carta.

 

Em duelo.php entra o uso da função jQuery que você criou para fazer a requisição ao action.php e retornar os dados para duelo.php

 

 

1. Campo auto increment da sua tabela cartas

Link para o comentário
Compartilhar em outros sites

  • Moderador

Outro exemplo.

Imagine o jogo Naruto online. Quando você entra em uma batalha, aparece em tela os dados(atributos) do seu personagem.. tais como:  chakra, força, destresa, inteligencia.. e suas habilidades de combate.  São estes dados que são utilizados na batalha.

 

Voltando para sua dúvida, os dados que serão usados na batalha serão: ID da carta e seus atributos específicos de cada carta.

 

Quando você inicia um duelo, você e o adversário seriam redirecionados a uma pagina chamada duelo.php, neste arquivo conterá a estrutura do duelo.. tais como:  seu deck de cartas, cartas da mão(juntamente com os dados de cada carta).

 

Quando você clica em uma carta, você fará uma requisição ao arquivo action.php. nesse arquivo, é recebido o ID da carta para que você possa buscar no banco os dados referente aquela carta usada... ainda neste arquivo você chama a função usarCarta() para de fato usar a carta.

 

Agora a mecânica do duelo,  tem N maneiras de fazer,  a primeira que penso é usar o mesmo sistema dos RPG de mesa com dados D10(dados de dez lados). para fazer uma comparação.

 

Para exemplificar vou dizer q o "dado" terá só 6 lados,

 

Quando você usa a carta, podes atribuir um valor aleatório para esta carta(em uma nova variável) e guardar na sessão, e esperar que o adversário faça a  jogada.

 

O mesmo acontecerá com ele.. ele vai escolher a carta, e esta carta irá assumir um valor aleatório.. e guardar na sessão. 

Assim que os valores dos " dados" estiverem atribuidos a estas variáveis.. você faz uma comparação de maior ou menor para definir quem venceu.

 

Outro exemplo:

 

Selecionei a carta "Pônei maldito". o sistema atribuiu  um valor randômico, 5

Aí vai você, escolhe a carta "Chuck Norris", o sistema atribuiu um valor randômico, 6

Logo 6 > 5, significa que sua carta ganhou da minha. .. então as duas cartas(minha e sua) voltam para o fim do deck e joga uma outra na sua mão(o que faz a função usarCarta()).

 

Lembrando, que provavelmente você teria que criar mais algumas funções para poder fazer uma verificação e etc.. 

Link para o comentário
Compartilhar em outros sites

O que não consigo entender mesmo é a parte de usar cara, o resto eu tenho tudo em mente já.

Quando eu uso a função usarCarta no action.php, eu vou precisar de um array e no caso eu teria que criar um array no própio arquivo, certo? Então no caso ele substituiria a carta no array do action.php e não do duelo.php. deixei assim
action.php

<?phpinclude "connect.php";include "functions.php";session_start();  $name = $_SESSION["nome"];  $query=mysql_query("SELECT * FROM users WHERE nome='$name'"); //Seleciona todos os usúarios cujo o nome for o nome de quem está logado  $x=mysql_fetch_array($query); // Tranforma o nome do usuário em texto baseados em arrays  $xo =  $x["id"]; //Pega o id do usuário que está logado  $query2=mysql_query("SELECT * FROM deck WHERE idjogador='$xo' ORDER BY RAND()"); // Seleciona todas as cartas do deck que pertence ao jogador logado, por ordem aleatória   echo "<div id='cards'>"; //div$max = mysql_num_rows($query2);for($i = 0; $i < $max; $i++):$row = mysql_fetch_object($query2);$qur=mysql_query("SELECT * FROM cartas  WHERE id='$row->idcarta'"); $x2=mysql_fetch_array($qur);   $cartaimagem[$i]= $x2["imagem"];   $cartaid[$i]= $x2["id"];endfor;$i = 0;for($i=0;$i<5;$i++){$mao[$i]=$cartaid[$i];$maoimagem[$i]=$cartaimagem[$i];  }  unset($cartaid[0],$cartaid[1],$cartaid[2],$cartaid[3],$cartaid[4]);$idCartausada = $_GET["id"];echo $idCartausada;$query = mysql_query ("SELECT * FROM cartas WHERE id=$idCartausada");$atributo = mysql_fetch_array($query);$ataque = $atributo["ataque"];$nome = $atributo["nome"];echo $nome."<Br>";usarCarta($idCartausada);?>

duelo

  $name = $_SESSION["nome"];  $query=mysql_query("SELECT * FROM users WHERE nome='$name'"); //Seleciona todos os usúarios cujo o nome for o nome de quem está logado  $x=mysql_fetch_array($query); // Tranforma o nome do usuário em texto baseados em arrays  $xo =  $x["id"]; //Pega o id do usuário que está logado  $query2=mysql_query("SELECT * FROM deck WHERE idjogador='$xo' ORDER BY RAND()"); // Seleciona todas as cartas do deck que pertence ao jogador logado, por ordem aleatória   echo "<div id='cards'>"; //div$max = mysql_num_rows($query2); for($i = 0; $i < $max; $i++):$row = mysql_fetch_object($query2);$qur=mysql_query("SELECT * FROM cartas  WHERE id='$row->idcarta'"); $x2=mysql_fetch_array($qur);   $cartaimagem[$i]= $x2["imagem"];   $cartaid[$i]= $x2["id"];endfor;$i = 0;for($i=0;$i<5;$i++){$mao[$i]=$cartaid[$i];$maoimagem[$i]=$cartaimagem[$i];  }  unset($cartaid[0],$cartaid[1],$cartaid[2],$cartaid[3],$cartaid[4]);foreach($mao as $image => $coc){$k1 = mysql_query("SELECT * FROM cartas WHERE id='$coc'");$xd = mysql_fetch_array($k1);$image = $xd["imagem"];$id = $xd["id"];echo "<a href='usa.php' class='carta'><img id='$id' src='".$image."' width='110' height='190'/></a>";}echo "<img src='images/cartas/default.png' width='110' height='190'><div class='cont'>".count($cartaid)."</div>";  ?>
Link para o comentário
Compartilhar em outros sites

  • Moderador

Irmão, o jeito que você está fazendo, é redundante, você faz as mesmas requisições e consultas nos dois arquivos.. isso tá tirando seus cabelos cabeça.

 

Partindo de que, obrigatoriamente você terá dois arrays, um para seu deck completo e outro para sua mão.

os arrays ficarão no duelo.php.. e você manipula eles no action.

 

Resumidamente, o action.php só servirá para chamar a função e executar a lógica do duelo, e os resultados devem retornar ao duelo.php

Agora para que não apareça esse action.php, é ai que entra o ajax.

 

Portanto, não tem necessidade de fazer duas vezes a mesma coisa, você estaria dando uma carga a mais no banco de dados.. imagine 150 pessoas jogando simultaneamente ... onde cada uma faz 2 requisições como você está fazendo... sua largura de banda(bandwidth) do servidor ultrapassará o limite caso não tenhas um servidor dedicado( extremamente caro)

Link para o comentário
Compartilhar em outros sites

Pra pegar os dados da tabela carta segundo o deck do jogador, com relacionamento seria assim?
 

<?php$z = mysql_query("SELECT cartas.* FROM cartas INNER JOIN deck ON cartas.id = deck.idcarta WHERE deck.idjogador='1' ");while ($produto2 = mysql_fetch_assoc($z)) {echo $produto2["imagem"].'<Br>';}?>

O problema é que quando eu coloco jogar 2 ao invés de 1, ele pega os dados tanto do jogador 1 quanto do 2

Link para o comentário
Compartilhar em outros sites

  • Moderador

Isso acontece, talvez por que você colocou como string tente desta forma:

<?php$idjogador = 2;$z = mysql_query("SELECT cartas.* FROM cartas INNER JOIN deck ON cartas.id = deck.idcarta WHERE deck.idjogador= $idjogador");while ($produto2 = mysql_fetch_assoc($z)) {echo $produto2["imagem"].'<Br>';}?>

Ps: partindo da premissa de que você já resgatou o ID do jogador. geralmente feito isso no login,

Link para o comentário
Compartilhar em outros sites

  • Moderador

Bem.. ¬¬'  talvez eu não tenha entendido muito bem o problema agora.

 

Eu recomendei aquele artigo para você ler, que explica quando precisamos registrar eventos para os elementos na página. por gentileza poderias explicar de uma outra forma? 

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...