Cífro13 0 Denunciar post Postado Junho 7, 2011 Bom Galera a idéia é lançar nossas dúvidas e descobertas. vou começar contribuindo com a formula da coca-cola, um simples script que vai pegar os valores que você colocar nos inputs texts e gerar valores randômicos. <html> <head><title>Rolar dado de RPG</title></head> <body> <form name='cadastro' method='get'> <table> <tr><td>Quantidade</td><td><input type='text'name='quantia'size='2'></td></tr> <tr><td>Lados</td><td><input type='text'name='faces' size='2'></td></tr> <tr><td><input type='submit' value='Rolar'></td></tr> </table> </form> <?php //O method 'get' foi usado no form 'cadastrado' e as variaveis //$lados e $qtd vai receber esses valores. $lados = $_GET[faces]; $qtd = $_GET[quantia]; //criei uma array vazia para no próximo passo receber os valores $arr = array(); /*o comando while (vamos chamar de faça enquanto) vai executar um lop enquanto $qtd for maior que 0 (zero) */ while($qtd>0){ /*rand gera e escrever na tela números aleatórios do, nesse caso números iagual ou maiores que 1 e menores ou igual ao número de lados definidos pelo usuário*/ echo $roll = rand(1,$lados);echo "</br>"; //quando ponho o a variavel correspondente a array com abre e fecha colchetes '[]' eu insiro //um elemento nele, nesse caso o valor gerado randomicamente $arr[]=$roll; //agora eu subtraio 1 da quantidade, isso é que vai findar o lop já que a variavel //$qtd vai ser atualizada, e quando ela atingir zero ela encerra o ciclo $qtd--;} //declarei mais uma variavel com o nome de $dice e atribuir a soma do conteúdo da array $arr a ele // array_sum() soma o conteúdo de uma array $dice = array_sum($arr); //pedi pra imprimir "Total: " mais $dice q é o total dos elementos de $arr echo "Total: "; print_r ($dice); ?> </body> </html> basta copiar e colar num bloco de notas salvar como a extensão .php e vai funfar. Compartilhar este post Link para o post Compartilhar em outros sites
Sr.hehehe 0 Denunciar post Postado Junho 8, 2011 Não e que teja errado. Mas você podia usar for: for($qt=$_get[quantia];$qt>0;$qt--) { ... Compartilhar este post Link para o post Compartilhar em outros sites
Cífro13 0 Denunciar post Postado Junho 8, 2011 funciona tbm Sr hehehe. pessoal queria evoluir essa idéia para algo assim no meio do post, eu possa colocar algo como [dice]2d12[/dice] e ele role 2 dados de 12. vou iniciar a pesquisa, se alguém souber como fazer postaew. Compartilhar este post Link para o post Compartilhar em outros sites
- KbeçãO - 0 Denunciar post Postado Junho 8, 2011 desculpe se eu me perdi, mas qual a real função desse código ?? Compartilhar este post Link para o post Compartilhar em outros sites
Cífro13 0 Denunciar post Postado Junho 8, 2011 desculpe se eu me perdi, mas qual a real função desse código ?? isso é um rolador de dados muito usado nos sistemas de RPG, ao executar esse script vai aparece duas caixas de texto um para a quantodade de dados a ser rolado e a outra para a quantidade de faces do dado, ao rolar ele vai exibir cada dado rolado e o total da rolagem Compartilhar este post Link para o post Compartilhar em outros sites
- KbeçãO - 0 Denunciar post Postado Junho 8, 2011 aaaaaaaaannnnnnnnnn saquei !!! nuss 1.000.000.000.000.000.000 de anos que ñ jogo um rpg... uaehuaeh botei fé agora ! ^^ Compartilhar este post Link para o post Compartilhar em outros sites
Back-on 14 Denunciar post Postado Junho 8, 2011 Não é complicado, porém, você quer fazer isso com imagem ou simples? Compartilhar este post Link para o post Compartilhar em outros sites
Cífro13 0 Denunciar post Postado Junho 8, 2011 Não é complicado, porém, você quer fazer isso com imagem ou simples? simples msm, como normalmente isso acontece em narrativas, imprimindo apenas o resultado tá joia. Compartilhar este post Link para o post Compartilhar em outros sites
Back-on 14 Denunciar post Postado Junho 8, 2011 Usa a função sleep();, ele dá um delay no código. <?php echo "Rodando dado 1 <br />"; sleep(2); //dá um delay de 2 segundos echo rand(1,2)."<br />"; sleep(2); //outro delay de 2 segundos echo "Rodando dado 2 <br />"; sleep(3); //delay de 3 segundos echo rand(1,6); ?> Depois, é só ir encrementando o seu código. Compartilhar este post Link para o post Compartilhar em outros sites
Cífro13 0 Denunciar post Postado Junho 8, 2011 Usa a função sleep();, ele dá um delay no código. <?php echo "Rodando dado 1 <br />"; sleep(2); //dá um delay de 2 segundos echo rand(1,2)."<br />"; sleep(2); //outro delay de 2 segundos echo "Rodando dado 2 <br />"; sleep(3); //delay de 3 segundos echo rand(1,6); ?> Depois, é só ir encrementando o seu código. <?php //vai imprimir esse valor echo "Rodando dado 1 <br />"; //aguardar 2 segundos sleep(2); //dá um delay de 2 segundos //vai imprimir esse valor echo rand(1,2)."<br />"; //aguardar 2 segundos sleep(2); //outro delay de 2 segundos //vai imprimir esse valor echo "Rodando dado 2 <br />"; //aguardar 3 segundos sleep(3); //delay de 3 segundos //vai imprimir esse valor echo rand(1,6); ?> acredito que não me fiz entender, vou explicar imagine uma área de texto num fórum, onde o cara vai responder a uma situação, como estamos fazendo aqui. então ele vai colocar essa tag [dice][/dice] e dentro dela os valores, por exemplo 4d5, a quantidade de dados e de lados do dado não é definido pelo desenvolvedor do script, mas pelo usuário. no msm post o cara pode por: [dice]1d5[/dice] [dice]4d20[/dice] [dice]6d4[/dice] tipo: xdy onde x = ao número de lançamentos de dados d = é um separador y = ao número de faces do dado e cada um deve rolar seus valore ex: [dice]1d5[/dice] = 3 [dice]4d20[/dice] = 16+3+2+9 =30 [dice]6d4[/dice] = 3+4+2+4+1+3 = 17 Compartilhar este post Link para o post Compartilhar em outros sites
Back-on 14 Denunciar post Postado Junho 8, 2011 putz... x.x Isso é o que chamamos de BBcode, dê uma olhada nas funções str_replace(); e preg_replace();. Compartilhar este post Link para o post Compartilhar em outros sites
Cífro13 0 Denunciar post Postado Junho 9, 2011 beleza Sr Back-on, fui a luta e cheguei a fórmula da coca-cola com limão. <html> <head><title>code</title></head> <body> <form name='teste' method='get'> <table> <tr><td><textarea cols='32' rows='4' name='mensagem'></textarea></td></tr> <tr><td><input type='submit' value='Postar>>'></td></tr> </table> </form> <?php //criei um arrey em que as chaves eram :) e :( //seus valores são feliz e triste $arr = array(':)'=>'feliz',':('=>'triste'); //a variavel seguinte va extrair apenas as chaves //eainda em $GLOBALS() vou definilá como super global //isso fará com que ela seja reconhecida em todo o programa $chaves = array_keys($GLOBALS['arr']); //fiz o mesmo com os valores $valores = array_values($GLOBALS['arr']); //peguei a mensagem que eu postaria na área de texto $mensagem = $_GET[mensagem]; //str_replace funciona assim(a grosso modo) ler o texto verifica se existem chaves especiais //se encontrar substitui pelo valor correspondente //a ordem é chave>valor>mensgaem $saida = str_replace($chaves,$valores,$mensagem); //imprime o valor de saida que já possui as substituições de chaves por valores echo $saida; ?> </body> </html> jhone diz: - E os dados cífro? cífro13 diz: -Calma que eu chego nos dados, me dá um tempo jhone _________ Cífro13: -Jhone, estou editando esse post pq estava aqui pensando neh. No bbcode eu posso criar delimitadores assim como expliquei pra galera no texto acima neh?! Jhone: -Sim, e daew? Cífro13: -pensei em colocar os roladores como [dice]xdy[/dice], mas não estou conseguindo fazer isso pq tenho que explicar pro php que [dice]até o 'd', é a quantidade de dados que eu quero rolar, e que do d até o[/dice] são as faces dos dados. mas se eu usar o str_replace e diser q o "d" é um delimitador, se eu escrever eduardo por exemplo o que ele vai imprimir, e se o usuário casquinha q nem eu escrever "d junior" ao inves de "de junior" o que vai acontecer? Jhone: - Poxa cara, eu só sei o que você sabe então vou pesquisar com você e vamos achar a solução vlw?! Cífro13: - Possa crer, e como se não fosse pra o suficiente ainda tenho q descobrir como escrever em uma cx de texto e ele reconhecer os enters como parágrafo, tô avaliando a idéia do nl2br, mas acho q num vai rolar. Jhone: -Calma vei uma coisa de cada vez, calma, vamos aos dados primeiro, pq a outra questão me parece mais simples, eu vi uns resultado legais num fórum aew pra estas questões, e verdade que num lembro onde, mas vamo com calma. Cífro13: -ok man vamo lá então Compartilhar este post Link para o post Compartilhar em outros sites
Cífro13 0 Denunciar post Postado Junho 10, 2011 beleza Sr Back-on, fui a luta e cheguei a fórmula da coca-cola com limão. <html> <head><title>code</title></head> <body> <form name='teste' method='get'> <table> <tr><td><textarea cols='32' rows='4' name='mensagem'></textarea></td></tr> <tr><td><input type='submit' value='Postar>>'></td></tr> </table> </form> <?php //criei um arrey em que as chaves eram :) e :( //seus valores são feliz e triste $arr = array(':)'=>'feliz',':('=>'triste'); //a variavel seguinte va extrair apenas as chaves //eainda em $GLOBALS() vou definilá como super global //isso fará com que ela seja reconhecida em todo o programa $chaves = array_keys($GLOBALS['arr']); //fiz o mesmo com os valores $valores = array_values($GLOBALS['arr']); //peguei a mensagem que eu postaria na área de texto $mensagem = $_GET[mensagem]; //str_replace funciona assim(a grosso modo) ler o texto verifica se existem chaves especiais //se encontrar substitui pelo valor correspondente //a ordem é chave>valor>mensgaem $saida = str_replace($chaves,$valores,$mensagem); //imprime o valor de saida que já possui as substituições de chaves por valores echo $saida; ?> </body> </html> jhone diz: - E os dados cífro? cífro13 diz: -Calma que eu chego nos dados, me dá um tempo jhone _________ Cífro13: -Jhone, estou editando esse post pq estava aqui pensando neh. No bbcode eu posso criar delimitadores assim como expliquei pra galera no texto acima neh?! Jhone: -Sim, e daew? Cífro13: -pensei em colocar os roladores como [dice]xdy[/dice], mas não estou conseguindo fazer isso pq tenho que explicar pro php que [dice]até o 'd', é a quantidade de dados que eu quero rolar, e que do d até o[/dice] são as faces dos dados. mas se eu usar o str_replace e diser q o "d" é um delimitador, se eu escrever eduardo por exemplo o que ele vai imprimir, e se o usuário casquinha q nem eu escrever "d junior" ao inves de "de junior" o que vai acontecer? Jhone: - Poxa cara, eu só sei o que você sabe então vou pesquisar com você e vamos achar a solução vlw?! Cífro13: - Possa crer, e como se não fosse pra o suficiente ainda tenho q descobrir como escrever em uma cx de texto e ele reconhecer os enters como parágrafo, tô avaliando a idéia do nl2br, mas acho q num vai rolar. Jhone: -Calma vei uma coisa de cada vez, calma, vamos aos dados primeiro, pq a outra questão me parece mais simples, eu vi uns resultado legais num fórum aew pra estas questões, e verdade que num lembro onde, mas vamo com calma. Cífro13: -ok man vamo lá então Desculpa o flod mas naum apareceu a opção para editar o post Cífro: - olha a evolução para separar <?php error_reporting(E_ALL); $msg= "[dice]3d5[/dice]"; $x=str_word_count($msg,1,1234567890);//separa todas as palavras e palavrascom numeros e armazena em strings $dice = $x[1]; //o valor 1 é que possui o XdY $arr = explode("d",$dice);//transforma o d em separador e armazena os pedaços em uma array $qtd = $arr[0];//recebe o elemento 0 $lados = $arr[1];//recebe o elemento 1 //daki vcs ja sabem while($qtd>0){ echo $roll = rand(1,$lados);echo "</br>"; $arr[]=$roll; $qtd--;} $dice = array_sum($arr); echo "Total: "; print_r ($dice); ?> Compartilhar este post Link para o post Compartilhar em outros sites
Sr.hehehe 0 Denunciar post Postado Junho 11, 2011 Amo BBCODE. Só não entendi a tag: xdy onde x = ao número de lançamentos de dados d = é um separador y = ao número de faces do dado Bem, gerar um numero randomico é facil. Tem isso: echo uniqid(time()); = numeros e letras echo rand(); = numeros echo rand(1, 10); = numeros de 1 a 10 $letras = array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'); echo array_rand($letras); = letras. Já o bbcode: '/\[dice\]([0-9]{1, 3})d([0-9]{1, 3})\[\/dice\]/is' Ai da o replace por o que você quiser. exemplo: $x = '$1' $y = '$2' $texto = "[dice]TANTO FAZ[/dice]"; $texto = preg_replace('/\[dice\]([0-9]{1, 3})d([0-9]{1, 3})\[\/dice\]/is', '<span class="dado">'.uniqid(time()).'</span>', $texto); // FIZ A MINHA FORMULA DA COCA-COLA Compartilhar este post Link para o post Compartilhar em outros sites
Andrey Knupp Vital 136 Denunciar post Postado Junho 11, 2011 já que a brincadeira e dice de jogo cria uma porcentagem, para a chance que o cara tem de receber tal item na rolagem, por exemplo <?php $Items = Array( 'item1' => '10%', 'item2' => '2%' ); ... Faz o algoritmo pra o cara receber tal item de acordo com a porcentagem no array, ao der a rolagem, no caso o 'dice' Compartilhar este post Link para o post Compartilhar em outros sites
Cífro13 0 Denunciar post Postado Junho 13, 2011 Amo BBCODE. Só não entendi a tag: xdy onde x = ao número de lançamentos de dados d = é um separador y = ao número de faces do dado Bem, gerar um numero randomico é facil. Tem isso: echo uniqid(time()); = numeros e letras echo rand(); = numeros echo rand(1, 10); = numeros de 1 a 10 $letras = array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'); echo array_rand($letras); = letras. Já o bbcode: '/\[dice\]([0-9]{1, 3})d([0-9]{1, 3})\[\/dice\]/is' Ai da o replace por o que você quiser. exemplo: $x = '$1' $y = '$2' $texto = "[dice]TANTO FAZ[/dice]"; $texto = preg_replace('/\[dice\]([0-9]{1, 3})d([0-9]{1, 3})\[\/dice\]/is', '<span class="dado">'.uniqid(time()).'</span>', $texto); // FIZ A MINHA FORMULA DA COCA-COLA $arr = explode("d",$dice); //transforma o d em separador e armazena os pedaços em uma array no caso da função explode, você determina um caracter para separar os texto, tipo uma vírgula, um traço, espaço ou um underline, eu escolhi o "d" isso faz eu pegar os valores exceto o "d" e mais q isso eu divido em antes do "d" e depois do "d". <?php error_reporting (E_ALL ^ E_NOTICE); $txt = "o ataque causou [dice]1d3[/dice] e [dice][/dice]"; $extrai = '/\[dice\]([0-9]{1,3})d([0-9]{1,3})\[\/dice\]/'; $func = preg_match($extrai,$txt,$matches); print_r($matches[0]);echo "<br>"; $msg= $matches[0]; $x=str_word_count($msg,1,1234567890);//separa todas as palavras e palavrascom numeros e armazena em strings $dice = $x[1]; //o valor 1 é que possui o XdY $arr = explode("d",$dice);//transforma o d em separador e armazena os pedaços em uma array $qtd = $arr[0];//recebe o elemento 0 $lados = $arr[1];//recebe o elemento 1 //daki vcs ja sabem while($qtd>0){ echo $roll = rand(1,$lados);echo "</br>"; $arr[]=$roll; $qtd--;} $dice = array_sum($arr); echo "Total: "; print_r ($dice); ?> :huh: Cífro13: -pequeno problema, se você mandar imprimir a array $matches tipo print_r(matches); vai aparecer 0=>1d3,1=>1,2=>3 então o array_sum acaba dando o valor randômico +1+3. não sei se errei no código, mas tentei armazenar o elemento "0" dentro de uma outra array mas não obtive exito ainda ;) Jhone: -Calma garotão vamo lá, estamos quase chegando. Andrey Knupp ainda vou avançar para os modificadores. no rpg existe um adicional de modificação nos testes, tipo uma arma msm q te dá mais cinco(5), ficaria assim: [dice]2d5+1[/dice] resultado 4+1=5 2+1=3 total 5+3=8 Jhone vejaew como estáo código, mas o q preciso agora é que ele substitua o comando pelo valor, assim como fizemos com o :) por feliz e o :( pelo triste <html> <head><title>Projeto RPG Browser</title></head> <body> <p><h1>Alteração do código por simbolos</h1></p> Simbolos dispoíveis: :) e :( <form name='teste' method='get'> <table> <tr><td><textarea cols='32' rows='4' name='mensagem'></textarea></td></tr> <tr><td><input type='submit' value='Postar>>'></td></tr> </table> </form> <?php error_reporting(E_ALL); //criei um arrey em que as chaves eram :) e :( //seu valores são feliz e triste $arr = array(':)'=>"<img src='emo\feliz.gif'>",':('=>"<img src='emo\mau.gif'>"); //a variavel seguinte va extrair apenas as chaves //eainda em $GLOBALS() vou definilá como super global //isso fará com que ela seja reconhecida em todo o programa $chaves = array_keys($GLOBALS['arr']); //fiz o mesmo com os valores $valores = array_values($GLOBALS['arr']); //peguei a mensagem que eu postaria na área de texto $mensagem = $_GET[mensagem]; $extrai = '/\[dice\]([0-9]{1,3})d([0-9]{1,3})\[\/dice\]/'; $func = preg_match($extrai,$mensagem,$matches); $msg= $matches[0]; //separa todas as palavras e palavrascom numeros e armazena em strings $x=str_word_count($msg,1,1234567890); //o valor 1 é que possui o XdY $dice = $x[1]; //transforma o d em separador e armazena os pedaços em uma array $arr = explode("d",$dice); //recebe o elemento 0 $qtd = $arr[0]; //recebe o elemento 1 $lados = $arr[1]; while($qtd>0){ echo $roll = rand(1,$lados);echo "</br>"; $arr[]=$roll; $qtd--;} $dice = array_sum($arr); //str_replace funciona assim(a grosso modo) ler o texto verifica se existem chaves especiais //se encontrar substitui pelo valor correspondente //a ordem é chave>valor>mensgaem $saida = str_replace($chaves,$valores,$mensagem); //imprime o valor de saida que já possui as substituições de chaves por valores echo $saida; ?> </body> </html> Compartilhar este post Link para o post Compartilhar em outros sites