Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
94 changes: 94 additions & 0 deletions LucasCorreia.MathGame/math-game/Library.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
public class Library
{
private Random randNum = new();
private string[] operadores = { "+", "-", "x", "/" };

public int Jogar(string operador, int maxNum1, int maxNum2)
{
int ponto = 0;
for (int i = 0; i < 5; i++)
{
int num1 = 0;
int num2 = 0;

string opAtual = operador == "aleatorio" ? operadores[randNum.Next(operadores.Length)] : operador;

if (opAtual == "/")
{
num2 = randNum.Next(1, maxNum2 + 1);
int multiplicador = randNum.Next(0, maxNum1 + 1);
num1 = num2 * multiplicador;
}

NovasPerguntas(num1, num2, opAtual);

if (int.TryParse(Console.ReadLine(), out int resposta))
{
if (Resposta(num1, num2, opAtual, resposta))
{
ponto++;
}
}
else
{
Console.Clear();
Console.WriteLine("Por favor, digite apenas números!\n");
i--;
}
}
return ponto;
}

public void NovasPerguntas(int x, int y, string operador)
{
Console.WriteLine("Qual é resultado da conta abaixo ?");
Console.WriteLine($"{x} {operador} {y}");
}

public bool Resposta(int x, int y, string operador, int z)
{
return operador switch
{
"+" => (x + y) == z,
"-" => (x - y) == z,
"/" => (x / y) == z,
"x" => (x * y) == z,
_ => false
};
}

public string EscolhaOperador()
{
int op = 0;
bool entradaValida = false;

while(!entradaValida)
{
Console.WriteLine("Escolha a operação que quer fazer:");
Console.WriteLine("1- Somar\n2- Subtrair\n3- Multiplicar\n4- Dividir\n5- Aleatório");

if (int.TryParse(Console.ReadLine(), out op) && op >= 1 && op <= 5)
{
entradaValida = true;
}
else
{
Console.Clear();
Console.ForegroundColor = ConsoleColor.Yellow;
Console.WriteLine("Opção inválida! Por favor, digite um número de 1 a 5.\n");
Console.ResetColor();
}
}


return op switch
{
1 => "+",
2 => "-",
3 => "x",
4 => "/",
5 => "aleatorio",
_ => throw new ArgumentException("Número escolhido errado!")
};
}
}
99 changes: 99 additions & 0 deletions LucasCorreia.MathGame/math-game/Program.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
using System.Diagnostics;

public class Program
{
public static void Main()
{
int op = 0;
int pontos = 0;
Library lb = new();
double tempo_jogo = 0;
List<int> rodadas = [];
List<double> tempo_rodadas = [];
string operador = "";

do
{
Console.WriteLine("===============================\nBem vindo ao Jogo Matématico.\n===============================");
Console.WriteLine("\nEscolha uma opção abaixo:");
Console.WriteLine("1- Jogo fácil\n2- Jogo intermédiario\n3- Jogo Difícil\n4- Jogo Aleátorio\n5- Listar Pontuações\n0- Sair do jogo");

if (!int.TryParse(Console.ReadLine(), out op))
{
Console.Clear();
Console.WriteLine("Por favor, digite apenas números!\n");
Console.WriteLine("Pressione qualquer tecla para continuar...");
Console.ReadKey();
// PARA O C# PARA DE CONVERTE PARA 0
op = -1;
Console.Clear();
continue;
}

Console.Clear();

try
{
switch (op)
{
case 1:
operador = lb.EscolhaOperador();
tempo_jogo = Time.MedirTempo(() => pontos = lb.Jogar(operador, 10, 10));
rodadas.Add(pontos);
tempo_rodadas.Add(tempo_jogo);
break;
case 2:
operador = lb.EscolhaOperador();
tempo_jogo = Time.MedirTempo(() => pontos = lb.Jogar(operador, 10, 50));
rodadas.Add(pontos);
tempo_rodadas.Add(tempo_jogo);
break;
case 3:
operador = lb.EscolhaOperador();
tempo_jogo = Time.MedirTempo(() => pontos = lb.Jogar(operador, 50, 100));
rodadas.Add(pontos);
tempo_rodadas.Add(tempo_jogo);
break;
case 4:
tempo_jogo = Time.MedirTempo(() => pontos = lb.Jogar("aleatorio", 100, 100));
rodadas.Add(pontos);
tempo_rodadas.Add(tempo_jogo);
break;
case 5:
Console.WriteLine("=====================\n=PONTUAÇÃO DOS JOGOS=\n=====================");
if (rodadas.Count==0)
{
Console.WriteLine("Nenhuma partida Jogada");
}
else
{
for (int i = 0; i < rodadas.Count; i++)
{
Console.WriteLine($"Rodada {i + 1}° -> {rodadas[i]} pontos | Tempo -> {(int)tempo_rodadas[i]} segundos");
}
}
Console.WriteLine("\nPressione ENTER para voltar ao menu");
Console.ReadLine();
Console.Clear();
break;
case 0:
break;
default:
Console.WriteLine("Opção inválida");
break;
}
} catch (ArgumentException ex)
{
Console.Clear();
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine($"[ERRO]: {ex.Message}");
Console.ResetColor();
Console.WriteLine("Pressione qualquer tecla para voltar ao menu...");
Console.ReadKey();
Console.Clear();
}

}while(op != 0);

}
}
16 changes: 16 additions & 0 deletions LucasCorreia.MathGame/math-game/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# Desafio Jogo da Matemática

Criar um jogo que consiste em perguntar ao jogador qual é resultado de uma pergunta de matemática (ou seja, 9 x 9 = ?), coletar a entrada e adiconar um ponto em caso de uma resposta coreta.

## Requisitos do projeto

- [X] Ter pelo menos 5 perguntas.
- [X] As divisões resultam apenas em INTEGERS e os dividendos devem passar de 0 a 100. Além disso não deve apresentar a divisão 7/2 para o usuário, já que não resulta em um número inteiro.
- [X] Os usuários devem receber um menu para escolher uma operação.
- [X] Deve gravar jogos anteriores em uma lista e deve haver uma opção no menu para o usuário visualizar um histórico de jogos anteriores.

## Desafios
- [X] Implementar níveis de dificuldade.
- [X] Adicione um tempororizador para acompanhar quanto o usuário leva para terminar o jogo.
- [X] Crie uma opção de 'jogo aleátorio' onde os jogadores serão apresentados com perguntas de operações aleatórios. (* Praticamente todos que eu fiz são aleátorios.)
- [X] Tentar usar apenas um método para todos os jogos. Utilizar o Princípio DRY. ( Não achei algo !)
9 changes: 9 additions & 0 deletions LucasCorreia.MathGame/math-game/Teste.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
public class Teste
{
public void Test()
{
Library lb = new();

lb.NovasPerguntas(7,2,"/");
}
}
15 changes: 15 additions & 0 deletions LucasCorreia.MathGame/math-game/Time.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
using System.Diagnostics;

public class Time
{
public static double MedirTempo(Action acao)
{
Stopwatch tempo = Stopwatch.StartNew();

acao();

tempo.Stop();

return tempo.Elapsed.TotalSeconds;
}
}
11 changes: 11 additions & 0 deletions LucasCorreia.MathGame/math-game/math-game.csproj
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net10.0</TargetFramework>
<RootNamespace>math_game</RootNamespace>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>

</Project>