Ir ao conteúdo

Repor cartas ( PHP ).


Pedro Guilherme

Posts recomendados

Postado

Oi de novo, hehe.

acabei algumas coisas na estrutura do jogo, porém ainda continua com uma dúvida.

for($i = 1; $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;for($i=1;$i<6;$i++){echo "<span id='$cartaid[$i]'><img  onclick='apanga()' width='100' class='carta' id='c$cartaid[$i]' src='$cartaimagem[$i]'  ></span>";  }

Armazenei as cartas nos arrays e imprimi na tela, já consigo destruir a carta caso ele use.Porém agora o problema é o seguinte:Preciso verificar se a carta foi destruida, e caso ela não exista preciso trocar ela por outra carta que vai pra mão.

  • Moderador
Postado

Olá,

 você pode usar as funções específicas do array. por exemplo:

<php     $frutas = array("Morango", "Melancia","uva");   foreach($frutas as $cesta):     if(!in_array($cesta, $frutas, true)):        array_push($frutas, $cesta);     endif;   endforeach;

ps: o exemplo é fictício só para representação.

Dê uma lida no uso das funções  array_push, in_array, array_key_exists 

  • 2 semanas depois...
Postado

Bom, como acabei o outro projeto, retomei esse.

eu tentei aqui, e consegui fazer o que queria, ou quase.o problema é que o unset está apagando todas as cartas depois da ultima por causa do loop

<?php     $deck = array("Dragão Vermelho","Magro Negro","Mago do tempo","Rei caveira","Exodia","Gaia");   $mao = array("Dragão Vermelho","Magro Negro","Mago do tempo","Rei caveira");   foreach($deck as $carta){   if(count($mao) < 5){    if(!in_array($carta, $mao, true)){   array_push($mao, $carta);   $valor = array_search($carta, $deck);   	  unset($deck[$valor]); echo "O valor inserido foi $carta<BR>";   }  }  }  echo "<B>Mão:</b><BR>";for($i=0;$i<count($mao);$i++){echo $mao[$i]."<BR>";  }echo "<BR><BR><B>Deck:</b><BR>";for($i=0;$i<count($deck);$i++){echo $deck[$i]."<BR>";  }   ?>

quero que ele remova apenas o elemento em especifico no caso o exodia

Alguem?

  • Moderador
Postado

Olá, desculpe a demora.

 

Tente desta maneira:

$deck = array (		"Exodia",		"Mago Branco",		"Dragao Azul",		"Dragao amarelo",		"Bixo feio",		"Diablo",		"Ragkarol",		"Tiamat" );$mao = array (		"Dragao Vermelho",		"Magro Negro",		"Mago do tempo",		"Rei caveira",		"gaia" );// imprime todos os arrayecho "<pre>";print_r ($deck);print_r ( $mao );echo "</pre><br/>";function usarCarta($carta) {	global $mao;	global $deck;	foreach ($mao as $cartas =>$valor):	if($valor == $carta):		unset($mao[$cartas]);		array_push($deck, $carta);	endif;	endforeach;}usarCarta ("Mago do tempo"); // imprime todo o array da mão menos a carta usadaecho "<pre>";print_r ($mao);echo "</pre><br/>";// imprime todo o array deck com a carta usada no final do deckecho "<pre>";print_r ($deck);echo "</pre><br/>";

Saída:

//seu deck de cartasArray(    [0] => Exodia    [1] => Mago Branco    [2] => Dragao Azul    [3] => Dragao amarelo    [4] => Bixo feio    [5] => Diablo    [6] => Ragkarol    [7] => Tiamat)//Sua mãoArray(    [0] => Dragao Vermelho    [1] => Magro Negro    [2] => Mago do tempo    [3] => Rei caveira    [4] => gaia)//mão sem a carta usadaArray(    [0] => Dragao Vermelho    [1] => Magro Negro    [3] => Rei caveira    [4] => gaia)//Deck com a ultima carta usadaArray(    [0] => Exodia    [1] => Mago Branco    [2] => Dragao Azul    [3] => Dragao amarelo    [4] => Bixo feio    [5] => Diablo    [6] => Ragkarol    [7] => Tiamat    [8] => Mago do tempo) 

Era isso?

Criei uma função para que simplifique sua vida.. quando for usar a tal carta. 

 

Daria para fazer uma função um pouco diferente como esta:

function usarCarta($array, $usar) {  $novo_array = array(); foreach ($array as $valor) {  if ($valor != $usar) { $novo_array[] = $valor; } } return $novo_array;}$carta = "Chuck Norris";$mao = array("Gosma Fedorenta", "Chuck Norris", "Darth Vader");$jogar = usarCarta($mao, $carta);print_r($jogar);

Eu prefiro a primeira opção.

 

Uma coisa interessante, seria você usar a orientação a objetos..  facilitaria mais a sua vida... pois você pode referenciar o próprio objeto com o "$this"

Postado

Bom, é algo perto disso que eu quero fazer.Nesse código, quando usa uma carta ela retorna ao deck, eu quero fazer com que essa carta suma da mão quando usada, e que outra carta no deck entre no lugar dela na mao.

Mais uma coisinha, eu não entendi essa parte

foreach ($mao as $cartas =>$valor):

qual a função do =>$valor?
PS:Ficou genial os nomes das cartas que você deu  :D  :D  :D

  • Moderador
Postado

$mao as $cartas =>$valor

 

seria: array as chave => valor

 

isto se chama array associativo.

array(  chave =>  valor     , ...     )// chave pode ser tanto string ou um integer// valor pode ser qualquer coisa

erxemplo:

array(  1 =>  Chuck Norris     , ...     )// chave pode ser tanto string ou um integer// valor pode ser qualquer coisa
Postado

 Arrumei o código para que quando usasse uma carta, ela seria removida da mão e outra do deck substituiria ela.

<?php$deck = array ("Exodia","Mago Branco","Dragao Azul","Dragao amarelo","Bixo feio","Diablo","Ragkarol","Tiamat" );$mao = array (		"Dragao Vermelho",		"Magro Negro",		"Mago do tempo",		"Rei caveira",		"gaia" ); // imprime todos os arrayecho "<pre>";print_r ($deck);print_r ( $mao );echo "</pre><br/>"; $i = 0;function usarCarta($carta) {	global $mao;	global $i;	global $deck; 	foreach ($mao as $cartas =>$valor):	if($valor == $carta):		unset($mao[$cartas]);		array_push($mao,$deck[$i]);	unset($deck[$i]);		$i++;	endif;		endforeach;}usarCarta ("gaia");usarCarta ("Magro Negro"); // imprime todo o array da mão menos a carta usadaecho "<pre>";print_r ($mao);echo "</pre><br/>"; // imprime todo o array deck com a carta usada no final do deckecho "<pre>";print_r ($deck);echo "</pre><br/>"; ?>

Agora, como eu faço para que a função usarCarta só execute quando clicar em um botão? eu poderia por exemplo fazer isso: 

<button onclick="<?php usarCarta('gaia');?>">Usa</button> ?
E como eu atualizo para ver se deu certo? abraços!

  • Moderador
Postado

Legal a sua implementação,  não tinha pensado em usar um contador ali.. rsrs

 

Não é possível chamar uma função php diretamente no formulário.  você precisa fazer uma função intermediária no javascript.

https://www.darcweb.com.br/posts/view/1/8/Chamar+funcao+PHP+via+javascript.dhtml

 

Tente implementar com jQuery e ajax para eliminar a necessidade de "refresh" na página.

Arquivado

Este tópico foi arquivado e está fechado para 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...

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!