Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

RenatoRibeiro

[Resolvido] Brincando com Random

Recommended Posts

Galera, fui fazer um script mais pra treinar mesmo, simulando duas pessoas se em uma 'luta' se 'atacando'.

 

<?php

for ( $i = 1; $i <= 20; $i++) {
$life1 = 100;
$life2 = 100;
$hit = rand(1,20);
$life1 = $life1 - $hit;
$life2 = $life2 - $hit;
$a = ($i % 2) ? "Seu adversário levou ".$hit : "Você levou ".$hit;
$b = ($i % 2) ? " de dano." : " de dano.";
$c = ($i % 2) ? "<b style='padding-left: 40px;'>O life do seu adversário é: ".$life1."</b>" : "<b style='padding-left: 40px;'>Seu life é: ".$life2."</b>";
echo $a, $b;
echo "<br>";
echo $c;
echo "<br><br>";
}

?>

 

Tenho 3 dúvidas:

1. Se rodarem o script vão perceber que o dano não acumula, ou seja, a cada 'hit' ele subtrai do 100, e não do resultado do life anterior. Como faço pra isso acumular?

2. Percebem que eu fiz um loop de 20 vezes, ou seja, é muito capaz de acabar a 'luta' e ninguém ter acabado com o life ou de o life ficar negativo. Como faço pra fazer o loop ir até algum dos lifes ficarem 0 e dar um echo "Você ganhou" ou "Você perdeu"?

3. Eu sei que da pra fazer, não se se é php ou mesmo utilizando outra linguagem, pra que cada loop aparecer em um delay predeterminado (3 em 3 segundos por exemplo). Como faço isso? Com que linguagem?

 

Nossa, vou ficar muito feliz se alguém me ajudar, nem que for em 2 ou até 1 dúvida só.

Agradeço!

Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites
a cada 'hit' ele subtrai do 100, e não do resultado do life anterior.
você precisa entender melhor sobre escopo

 

o loop ir até algum dos lifes ficarem 0 e dar um echo "Você ganhou" ou "Você perdeu"?
veja sobre break

 

cada loop aparecer em um delay predeterminado (3 em 3 segundos por exemplo).

chamamos de iteração cada volta de um loop.

o comando sleep() deve dar isso que você quer.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa valeeeu '-'

Mas o sleep() não funciona não! Eu coloquei sleep(3) no final do loop, porém ele multiplica 3*numero de loops que no caso é 20, isso é o tanto de segundos que demora pra carregar a página, rs.

Ai quando carrega mostra tudo do mesmo jeito.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Que estranho cara!

 

Eu consegui fazer as minhas 2 primeiras dúvidas, mas agora ta com um negócio estranho olha

 

Código

$life1 = 100;
$life2 = 100;
for ( $i = 1; $i <= 999999999, $i++;) {
$hit = rand(5,30);	
if ($life1 < 0) { $life1 = 0; } else { $life1 = $life1 - $hit; }
if ($life2 < 0) { $life2 = 0; } else { $life2 = $life2 - $hit; }
$a = ($i % 2) ? "Seu adversário levou ".$hit : "Você levou ".$hit;
$b = ($i % 2) ? " de dano." : " de dano.";
$c = ($i % 2) ? "<b style='padding-left: 40px;'>O life do seu adversário é: ".$life1."</b>" : "<b style='padding-left: 40px;'>Seu life é: ".$life2."</b>";
echo $a, $b;
echo "<br>";
echo $c;
echo "<br><br>";
if($life1 <= 0 or $life2 <= 0) break;
}

echo "Seu life: $life2<br>";
echo "Life do seu Adversário: $life1<br>";
if ($life1 < $life2) { echo "Você perdeu!"; } elseif ($life1 = $life2) { echo "Empatou!"; } else { echo "Você ganhou!"; }

 

Olhe o que retornou:

 

Você levou 21 de dano.
Seu life é: 79

Seu adversário levou 20 de dano.
O life do seu adversário é: 59

Você levou 29 de dano.
Seu life é: 30

Seu adversário levou 21 de dano.
O life do seu adversário é: 9

Você levou 24 de dano.
Seu life é: -15

Seu life: -15
Life do seu Adversário: -15
Empatou!

 

Era pro 'Seu life:' ter aparecido 0, e em 'Life do seu Adversário:' ter aparecido 9!

O life do adversário tá ficando igual o seu life, e não ta ficando 0 como esta no if no codigo

Não entendi nada agora!

 

Ajuda a resolver?!

Compartilhar este post


Link para o post
Compartilhar em outros sites

hum.. resolvi brincar também.

 

acho que fica bacana o algoritmo assim:

<?php
$life1 = 100;
$life2 = 100;
while( $life1>0 && $life2>0 )
{
/* você */
$hit = rand( 5,30 );
if( $hit > $life1 ) $hit = $life1;//não deixar receber mais dano do o life

$life1 -= $hit;
echo 'Você recebeu '.$hit.' de dano, agora seu life é: '.$life1.'<br />';

/* adversário */
$hit2 = rand( 5,30 );
if( $hit2 > $life2 ) $hit2 = $life2;//não deixar receber mais dano do o life

$life2 -= $hit2;
echo 'Seu adversário recebeu '.$hit2.' de dano, agora o life dele é: '.$life2.'<br /><br />';
}
if( $life1>$life2 ) echo 'Parabéns, você ganhou!';
else if( $life1<$life2 ) echo 'Azar, seu adversário ganhou';
else echo 'Empate!';

Compartilhar este post


Link para o post
Compartilhar em outros sites

huahauha me animei cara.. hauhauhau :lol:

 

dá uma olhada nesse aqui, fiz o efeito de ir aparecendo a cada 1 segundo.

Pura falsidade, os dados já estão lá no HTML, só o js que vai mostrando aos poucos:

 

http://wbruno.com.br/blog/2011/07/15/brincando-de-random-luta-tira-life-rpg/

Compartilhar este post


Link para o post
Compartilhar em outros sites

AUSHUAHSAUs

Ficou muito bom cara kk.

 

Só ficou meio estranho aqui:

Você recebeu 11 de dano, agora seu life é: 0

Seu adversário recebeu 12 de dano, agora o life dele é: 2

 

Como você ataca depois de morto? rs

Compartilhar este post


Link para o post
Compartilhar em outros sites

huahauhau é.. eu vi isso..

mas é simples de corrigir. :lol:

 

faz ai, to saindo, qndo eu voltar eu vejo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

arrumei, só adicionei um if

 

<html>
<head>
<script type="text/javascript">
function id( el ){
return document.getElementById( el )
}
function changeDisplay( els, val ){
for( var i=0; i<els.length; i++ ){
	els[ i ].style.display = val;
}
}
function mostra( ps ){
//alert( ps.length+' '+i );
if( ps.length>i ) ps[i].style.display = 'block';
else window.clearInterval( intv );
i++;
}
// i e intv tem escopo global
var i = 0;
var intv = 0;
window.onload = function(){
var ps = id('luta').getElementsByTagName('p');
changeDisplay( ps, 'none' );

intv = window.setInterval( mostra, 1000, ps );
}
</script>
<style type="text/css">
* { margin: 0; padding: 0; }
</style>
</head>
<body>
<div id="luta">
<?php
$life1 = 100;
$life2 = 100;
while( $life1>0 && $life2>0 )
{
	/* você */
	$hit = rand( 5,30 );
	if( $hit > $life1 ) $hit = $life1;//não deixar receber mais dano do o life

	$life1 -= $hit;
	echo '<p>Você recebeu '.$hit.' de dano, agora seu life é: '.$life1.'</p>';

	/* adversário */
	$hit2 = rand( 5,30 );
	if( $hit2 > $life2 ) $hit2 = $life2;//não deixar receber mais dano do o life

	if ($life1 == 0){} else{
	$life2 -= $hit2;
	echo '<p>Seu adversário recebeu '.$hit2.' de dano, agora o life dele é: '.$life2.'</p><br />';}
}
if( $life1>$life2 ) echo '<p>Parabéns, você ganhou!</p>';
else if( $life1<$life2 ) echo '<p>Azar, seu adversário ganhou</p>';
else echo '<p>Empate!</p>';
?>
</div><!-- /luta -->
</body>
</html>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Po entrei na brincadeira também uasdhusa, acrescentei a chance de defender caso o dano seja == 0.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<html>
<head>
<script type="text/javascript">
function id( el ){
       return document.getElementById( el )
}
function changeDisplay( els, val ){
       for( var i=0; i<els.length; i++ ){
               els[ i ].style.display = val;
       }
}
function mostra( ps ){
       //alert( ps.length+' '+i );
       if( ps.length>i ) ps[i].style.display = 'block';
       else window.clearInterval( intv );
       i++;
}
// i e intv tem escopo global
var i = 0;
var intv = 0;
window.onload = function(){
       var ps = id('luta').getElementsByTagName('p');
       changeDisplay( ps, 'none' );

       intv = window.setInterval( mostra, 1000, ps );
}
</script>
<style type="text/css">
* { margin: 0; padding: 0; }
</style>
</head>
<body>
<div id="luta">
<?php
       $life1 = 100;
       $life2 = 100;
       while( $life1>0 && $life2>0 )
       {
               /* você */
               $hit = rand( 0,30 );
               if( $hit > $life1 ) $hit = $life1;//não deixar receber mais dano do o life
			if( $hit == 0 ) {
			echo '<p>Você defendeu o ataque</p>'; } else {
               $life1 -= $hit;
               echo '<p>Você recebeu '.$hit.' de dano, agora seu life é: '.$life1.'</p>'; }

               /* adversário */
               $hit2 = rand( 0,30 );
               if( $hit2 > $life2 ) $hit2 = $life2;//não deixar receber mais dano do o life
			if( $hit2 == 0 ) {
			echo '<p>Seu adversário defendeu o ataque</p>'; } else if ($life1 == 0){} else {
               $life2 -= $hit2;
               echo '<p>Seu adversário recebeu '.$hit2.' de dano, agora o life dele é: '.$life2.'</p><br />';} 
       }
       if( $life1>$life2 ) echo '<p>Parabéns, você ganhou!</p>';
       else if( $life1<$life2 ) echo '<p>Azar, seu adversário ganhou</p>';
       else echo '<p>Empate!</p>';
?>
</div><!-- /luta -->
</body>
</html>

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.