O TEMA DO FÓRUM ESTÁ EM MANUTENÇÃO. FEEDBACKS AQUI: ACESSAR

[Programa] Verificador de Fórmulas

Iniciado por Corvo, 01/04/2018 às 18:09

01/04/2018 às 18:09 Última edição: 21/09/2018 às 11:30 por Corvo
Spoiler
Quando comecei isso há pouco mais de uma hora, estava pensando em enviar para o evento. Convenhamos que eu não ganharia ponto algum e com razão. Para não desperdiçar, deixo aqui para o caso de servir para alguém.
[close]
[box2 class=cat_bar title=Introdução]
Um dos problemas do RPG Maker é que, se você precisa testar uma fórmula de dano, você precisa reiniciar uma batalha diversas vezes. Como isso toma tempo, criei este humilde aplicativo para que você possa criar e testar fórmulas simples facilmente e com relativa rapidez. Porém, para melhor desempenho use uma calculadora.  (  ,_,)[/box2]
[box2 class=cat_bar title=Instruções]
O programa irá abrir uma janela do prompt de comandos onde todas as funções serão executadas. Para testar suas fórmulas, basta seguir corretamente a ordem de comandos do menu:


1: Defina os valores. Este aplicativo lida com fórmulas simples, você só pode definir um valo de ataque base, um modificador de ataque e a defesa do alvo.
2: Crie a fórmula. O processo é bem simples, você deve definir apenas a relação entre o modificador de ataque e seu valor base e, depois disso, a relação entre os valores do atacante e do alvo.
3: Calcule seu dano. A fórmula será exibida na tela e, na linha seguinte, o resultado da operação.
Para selecionar uma opção basta inserir o número correspondente e pressionar Enter.


Exemplos

Definindo valores
[close]
Criando a fórmula
[close]
Resultado
[close]
[close]
[/box2]
[box class=errorbox]
Importante!
Esta é a primeira versão do aplicativo, logo dezenas de erros ainda não foram resolvidos. Para evitá-los, certifique-se de que:
- Você inseriu exatamente o que é pedido para a tarefa: apenas números para os valores e os caracteres específicos para operadores!
- Sua fórmula não possui divisão por zero!
- Você seguiu a ordem de execução dos comandos corretamente!
[/box]
[box2 class=cat_bar title=Finalizando]
Gostaria de estudar como o aplicativo foi feito ou melhorá-lo? Eis o código fonte:
/* ===============================================================================================================================
 * Base Damage Test
 */ //==============================================================================================================================
using System;
//================================================================================================================================

namespace Teste_de_Dano
{
	// Start Class
	public class Program
	{
		// Variables
		// Attacker
		int a_atk;
		int a_atk_bonus;
	
		// Target
		int b_def;
		
		// System
		int temp;
		double damage;
		char op1, op2;
// ==========================================================================================================================		
		// Main
		public static void Main(string[] args)
		{
		
		// Início
		Program System = new Program();
		System.start();
		
		}
		
		// Start
		public  void start()
		{
		
			// Menu
			Console.WriteLine("Selecione uma opção:");
			Console.WriteLine("1: Definir Valores");
			Console.WriteLine("2: Definir Fórmula");
			Console.WriteLine("3: Calcular Dano");
			Console.WriteLine("4: Sair");
			temp = Convert.ToInt32(Console.ReadLine());
			
			// Choices
			switch (temp)
			{
				case 1:
					insert_values();
					break;
				case 2:
					insert_formula();
					break;
				case 3:
					deal_damage();
					break;
				case 4:
					Console.WriteLine("Aperte 'Enter' para fechar.");
					Console.ReadLine();
					break;
			}
			
		}
		
		// Insert Parameters
		public void insert_values()
		{
			Console.WriteLine("Insira o parâmetro base (Ataque, Ataque Mágico):");
			a_atk = Convert.ToInt32(Console.ReadLine());
			
			Console.WriteLine("Insira o parâmetro bônus (Arma, Equipamento):");
			a_atk_bonus = Convert.ToInt32(Console.ReadLine());
				
			Console.WriteLine("Insira a resistência do alvo (Defesa, Defesa Mágica):");
			b_def = Convert.ToInt32(Console.ReadLine());
						
			start();
		}
		
		// Insert Formula
		public void insert_formula()
		{
			Console.WriteLine("Insira a relação entre o Valor Base e o Valor Bônus: ");
			Console.WriteLine("+ : Soma");
			Console.WriteLine("- : Subtração");
			Console.WriteLine("* : Multiplicação");
			Console.WriteLine("/ - Divisão");
			op1 = Convert.ToChar(Console.ReadLine());
			
			Console.WriteLine("Insira a relação entre o atacante e o alvo");
			Console.WriteLine("+ : Soma");
			Console.WriteLine("- : Subtração");
			Console.WriteLine("* : Multiplicação");
			Console.WriteLine("/ - Divisão");
			op2 = Convert.ToChar(Console.ReadLine());
			
			start();
		}
		
		// Deal Damage
		public void deal_damage()
		{
			Console.WriteLine("Sua fórmula é {0} {1} {2} {3} {4}", a_atk, op1, a_atk_bonus, op2, b_def);
			
			// Verificar operadores:
			switch (op1)
			{
				case '+':
				switch (op2)
				{
					case '+':
						damage = Convert.ToDouble(a_atk + a_atk_bonus + b_def);
						Console.WriteLine("O resultado foi de {0}.", damage);
						start();
						break;
					case '-':
						damage = Convert.ToDouble(a_atk + a_atk_bonus - b_def);
						Console.WriteLine("O resultado foi de {0}.", damage);
						start();
						break;
					case '*':
						damage = Convert.ToDouble(a_atk + a_atk_bonus * b_def);
						Console.WriteLine("O resultado foi de {0}.", damage);
						start();
						break;
					case '/':
						damage = Convert.ToDouble(a_atk + a_atk_bonus / b_def);
						Console.WriteLine("O resultado foi de {0}.", damage);
						start();
						break;
				}
				break;
				case '-':
				switch (op2)
				{
					case '+':
						damage = Convert.ToDouble(a_atk - a_atk_bonus + b_def);
						Console.WriteLine("O resultado foi de {0}.", damage);
						start();
						break;
					case '-':
						damage = Convert.ToDouble(a_atk - a_atk_bonus - b_def);
						Console.WriteLine("O resultado foi de {0}.", damage);
						start();
						break;
					case '*':
						damage = Convert.ToDouble(a_atk - a_atk_bonus * b_def);
						Console.WriteLine("O resultado foi de {0}.", damage);
						start();
						break;
					case '/':
						damage = Convert.ToDouble(a_atk - a_atk_bonus / b_def);
						Console.WriteLine("O resultado foi de {0}.", damage);
						start();
						break;
				}
				break;
				case '*':
				switch (op2)
				{
					case '+':
						damage = Convert.ToDouble(a_atk * a_atk_bonus + b_def);
						Console.WriteLine("O resultado foi de {0}.", damage);
						start();
						break;
					case '-':
						damage = Convert.ToDouble(a_atk * a_atk_bonus - b_def);
						Console.WriteLine("O resultado foi de {0}.", damage);
						start();
						break;
					case '*':
						damage = Convert.ToDouble(a_atk * a_atk_bonus * b_def);
						Console.WriteLine("O resultado foi de {0}.", damage);
						start();
						break;
					case '/':
						damage = Convert.ToDouble(a_atk * a_atk_bonus / b_def);
						Console.WriteLine("O resultado foi de {0}.", damage);
						start();
						break;
				}
				break;
				case '/':
				switch (op2)
				{
					case '+':
						damage = Convert.ToDouble(a_atk / a_atk_bonus + b_def);
						Console.WriteLine("O resultado foi de {0}.", damage);
						start();
						break;
					case '-':
						damage = Convert.ToDouble(a_atk / a_atk_bonus - b_def);
						Console.WriteLine("O resultado foi de {0}.", damage);
						start();
						break;
					case '*':
						damage = Convert.ToDouble(a_atk / a_atk_bonus * b_def);
						Console.WriteLine("O resultado foi de {0}.", damage);
						start();
						break;
					case '/':
						damage = Convert.ToDouble(a_atk / a_atk_bonus / b_def);
						Console.WriteLine("O resultado foi de {0}.", damage);
						start();
						break;
				}
				break;
			}
		}
	}
}
[/box2]
[box2 class=cat_bar title=Agradecimentos]
À Alisson e MayLeone pelas aulas de C#.[/box2]

Avante e sempre, meu caro poe. Código bem fácil de se entender, é satisfatório ver o que aprendeu.
Um programa assim era algo que eu queria muito em tempos remotos, ficar testando na batalha realmente é frustrante pra galera.

Eu acho que isso está uma vergonha, mas, quando tiver mais experiência, vou refazer bonitinho com WindowsForms, deixar o usuário inserir todos os parâmetros que os personagens tem no RPG Maker e tal. Tipo seus bancos e editores externos. Mas até lá, calculadora.  :rick9: