Postado Fevereiro 22, 2012 13 anos O programa irá calcular quanto é necessário em gold para você fazer a bless (completa). Fiz ele em duas linguagems (PHP e C#), irei usar o código PHP para explicar. <!DOCTYPE html> <html lang="en-US"> <head> <meta charset="UTF-8" /> <title>Bless Cost</title> <link rel="stylesheet" type="text/css" href="style.css" /> </head> <body> <div id="wrp"> <?php if (isset($_POST['calculate'])) { $level = (int)$_POST['level']; function getBlessCost($lvl) { $lvl = (int)$lvl; return (max(30, min(120, $lvl)) - 20) * 1000; } $bless = getBlessCost($level); $blessCost = substr($bless, 0, -3); $blessCost = $blessCost. ',000'; } ?> <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" enctype="multipart/form-data"> <p> <label>Player Level:</label> <input type="text" name="level" required /> <?php if (isset($_POST['calculate'])) { echo "<input type=\"text\" readonly name=\"bless\" value=\"".$blessCost."\"/>"; } ?> <input type="hidden" name="calculate" /> <input type="submit" value="Bless Price" /> </p> </form> </div> </body> </html> [/php] Vamos por parte: [php] <!DOCTYPE html> <html lang="en-US"> <head> <meta charset="UTF-8" /> <title>Bless Cost</title> <link rel="stylesheet" type="text/css" href="style.css" /> </head> <body> <div id="wrp"> Esta parte do código consiste em estruturar nossa página, chamando o título e o css, além de criar a div para alinhamento. <?php if (isset($_POST['calculate'])) { //verifica se o post enviado pelo botão (submit) é o correto para calcular $level = (int)$_POST['level']; //guarda o level do player que foi enviado pelo botão em uma variavel $level function getBlessCost($lvl) { //função pra pegar o preço da bless $lvl = (int)$lvl; //retorna o level que foi dado junto com a chamada da função. Exemplo: getBlessCost(100) > irá guardar o 100 que foi o valor que eu inseri. return (max(30, min(120, $lvl)) - 20) * 1000; //esta é a fórmula, simples //digamos que o level que você escolheu foi 100, a fóruma irá interpretar desta maneira: //(pegavalormáximo(30, pegavalorminimo(120, 100)) - 20) * 1000; //(pegavalormáximo(30, 100) - 20) * 1000; aqui ela pega o valor minimo (o menor valor) entre 120 e 100 (level que você escolheu) //(100 - 20) * 1000; //80 * 1000; //80000; //não sei se deu de entender muito bem, mas é simples, irei tentar explicar com outro exemplo mais além. } $bless = getBlessCost($level); //guarda o valor da bless que pegou pela function, onde $level foi o level enviado pelo usuário $blessCost = substr($bless, 0, -3); //como a bless sempre retornará N000, retiramos os 3 últimos 0 para... $blessCost = $blessCost. ',000'; //...colocar a vírgula, no fim, adicionamos os 3 zeros novamente } ?>[/php] Achei mais fácil comentar o código, então leiam por ali. [php] <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" enctype="multipart/form-data"> <p> <label>Player Level:</label> <input type="text" name="level" required /> Esta parte, inicia o form que será usado para enviar as informações e já cria nosso campo level, onde o usuário irá digitar o leve para calcular a bless. <?php if (isset($_POST['calculate'])) { //verifica o post enviado pelo botão novamente echo "<input type=\"text\" readonly name=\"bless\" value=\"".$blessCost."\"/>"; //se ele contiver, quer dizer que a bless foi calculada e podemos printar o valor da mesma } ?> [/php] Código comentado. [php] <input type="hidden" name="calculate" /> <input type="submit" value="Bless Price" /> </p> </form> </div> </body> </html> Fim do código HTML, e botamos o input do tipo hidden para que ele sirva como nosso verificador nessa parte: if (isset($_POST['calculate'])) { Além disso, adicionamos o botão de enviar que é onde o player irá clicar para calcular a bless. Outro exemplo: //usaremos o level 39 para exemplo. return (max(30, min(120, $lvl)) - 20) * 1000; //esta é a fórmula, simples return (max(30, min(120, 39)) - 20) * 1000; //nessa primeira parte, você lembra das regras de parênteses? Então, usaremos ela, o que último é o (120, 39), então, o PHP irá calcular qual é o menor valor dentre esses. return (max(30, 39) - 20) * 1000; //Com o valor calculado do min e retornado 39, ele irá partir para o próximo que é calcular o maior valor dentre os 2. return (39 - 20) * 1000; //Retorna o valor de 39 que é o maior dentre os dois acima e continua o código; return 19 * 1000; // como o parenteses vem antes, 39-20 = 19, e continuamos o código, agora é só multiplicar por 1000 que chegaremos ao valor da bless return 19000; //viram? esse é o valor da bless para um level 39 [/php] Css File: [spoiler] [php] body { font-size:14px; font-family:"Trebuchet Ms", Arial; } #wrp { background:#f7f7f7; padding:10px 10px; border-radius:5px; width:163px; margin:0 auto; margin-top:20%;} #wrp label { display:block; } #wrp input { display:block; margin-bottom:5px;} #wrp input[type=text] { background: #fff; border:2px solid #e6e6e6; padding:5px 5px; width:150px; } #wrp input[type=submit] { background:#fff; border:2px solid #e6e6e6; padding:10px 10px; width:163px; } Mostrar conteúdo oculto Quem quiser o código feito em C#, está ai: Mostrar conteúdo oculto using System; using System.Linq; using System.Text; using System.Windows.Forms; namespace Bless_Cost { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private int getBlessCost(int level) { return (Math.Max(30, Math.Min(120, level)) - 20) * 1000; } private void button1_Click(object sender, EventArgs e) { int num; bool vNum = int.TryParse(tLevel.Text.Trim(), out num); if (vNum) { int lvl = getBlessCost(Convert.ToInt32(tLevel.Text)); string lvlF = lvl.ToString("#,###"); tCost.Text = Convert.ToString(lvlF); } else { tCost.Text = "Incorrect level."; } } private void Form1_Load(object sender, EventArgs e) { } } } Sendo que tLevel = textbox para o level Sendo que tCost = textbox para o valor da bless Ps: Não sou designer, não me chinguem pela arrumação do tópico e muito menos pelo Form do PHP para as blessings. Se quiser ver funcionando, entre em: http://tibiarvbot.com/blessing/ Editado Fevereiro 22, 2012 13 anos por Robson Venturin (veja o histórico de edições)
Postado Fevereiro 22, 2012 13 anos Faz tanto tempo que não programo, que fiquei com saudades agora =D Fico bacana Robson, testado e aprovado!
Postado Fevereiro 22, 2012 13 anos Autor u.u Valeu, conseguiu entender a parte ali do max e min? SDUH SAUH UASHd Me enrolei todo, não sou acostumado a explicar ;o
Postado Março 7, 2012 13 anos a versão em c# está mal otimizada, veja: string lvlF = lvl.ToString("#,###"); tCost.Text = Convert.ToString(lvlF); converteu uma string em string do mais, excepcional, gostei da lógica apesar de odiar usar Math
Participe da conversa
Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.