Ir para conteúdo

POWERED BY:

Arquivado

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

xTrovaox

[Resolvido] Calcular até um valor ser menor

Recommended Posts

Pessoal queria uma ajuda de vocês para fazer uma soma.

 

É o seguinte eu tenho um rpg de site, e preciso fazer uma soma de Exp ganha para o char ganhar level.

 

Funciona da seguinte forma:

 

existem 2 campos na tabela, Exp e MaxExp. No momento em que eu realizar uma missão e finaliza-la, eu ganho mais Exp. Quando o Exp chega no mesmo valor que o MaxExp eu ganho 1 level e o Exp volta a 0 e o MaxExp aumenta + 200.

 

Exemplo: Meu char está com 0 level, 0 pontos em Exp, e 900 pontos em MaxExp.

Realizo uma missão onde ganho 1000 pontos em Exp, na hora que eu finalizar ele vai fazer uma soma entre o Exp que eu ganhei menos o valor do meu MaxExp, se for menor nao vou subir de level pois tenho que chegar até 900, se for igual ($expganho = 900; $MaxExp = 900; $Soma = $expganho - $MaxExp = 0) ele vai subir um level, zerar o Exp e me adicionar mais 200 pts em MaxExp. Se for maior que o MaxExp ($expganho = 1000; $MaxExp = 900; $Soma = $expganho - $MaxExp = 100) ele tem que me adicionar 100 pontos em exp, pois eu consegui mais pts do que meu MaxExp, então ele vai ser tipo meu troco, ai vou ganhar 1 level e o MaxExp vai subir 200 pts.

 

O problema é o seguinte: Quando possuo 5000 em Exp, e 6000 em MaxExp e vou la e ganho mais 10000 em Exp, ele teria que fazer a soma

$expganho = 15000;

$MaxExp = 6000;

$Soma = $expganho - $MaxExp;

 

Ele me retornaria 9000, esse valor eu teria que adicionar em Exp, mas não pode porquê eu iria ganhar + 200 em MaxExp, e ficaria com 6200, e o Exp seria de 9000, sendo que o MaxExp sempre tem q ser maior, nesse caso ele teria que pegar o 9000 e somar menos 6200, (ai eu subiria mais 1 level), ele me retornaria 2800, e eu ganharia mais 200 em MaxExp.

 

O problema é que meu código faz só uma conta, e o certo seria ele fazer as contas de menos até ele retornar o Exp menor que o MaxExp.

Compartilhar este post


Link para o post
Compartilhar em outros sites

<?php
/**
* @calculaExp
* Recebe a quantidade total de experiência que o usuário possiu e a quantidade necessária
* para evoluir e retorna quantos leveis deverão ser upados.
*
* @param	Exp	int - Experiência do Jogador
* @param	MaxExp	int - Experiência necessária para evoluir.
* @return	Obj	Array - ['level']	Quantidade de leveis upados.
*				['Exp']		Quantidade restante de Exp.
*				['MaxExp']	Próximo MaxExp
*/
public function calculaExp($Exp, $MaxExp){
$contador = 0;
while($Exp > $MaxExp){
	$Exp -= $MaxExp;
	$MaxExp += 200;
	$contador++;
}
$Obj = array();
$Obj['level']	= $contador;
$Obj['Exp']		= $Exp;
$Obj['MaxExp']	= $MaxExp;
return $contador;
}
?>

 

Não sei como está seu código, mas talvez você queira dar uma olhada no conceito de recursividade também.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa amigo voce sabe algo sobre programaçao ??

Pelo que eu entendi voce tera que fazer uma "tabela com os valores e os lvls"

pegar essa informaçao e e fazer um while

exemplo

 

$lvl // aqui o lvl que voce ta
$exp // aqui a exp que voce ganho
$exp_lvl//aqui e a exp para o proximo lvl
//enquanto exp maior que exp_lvl faça
while($exp > $exp_lvl){
//exp recebe exp - exp_lvl 
$exp = $exp - $exp_lvl ;
//lvl ganha lvl + 1
$lvl = $lvl + 1;
}

espero ter ajudado mais alguma duvida e so perguntar

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.