ProgLab1/Subprograms/GuessAnswerMath.cs
2024-11-29 15:35:19 +04:00

92 lines
3.0 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using laba3.Core;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace laba3.Subprograms
{
/// <summary>
/// CLI math game "Gusess the answer";
/// Player need to guess result of math function;
/// </summary>
internal static class GuessAnswerMath
{
/// <summary>
/// Runs game;
/// Console will be clean!;
/// </summary>
public static void RunGame()
{
const int attempts = 3;
Console.WriteLine("Введите аргументы функции, а затем попытайтесь угадать её значение. Количество попыток ограничено!");
bool isValid;
do
{
MathFunc.setArgs(Utils.ReadDouble("аргумент a"), Utils.ReadDouble("аргумент b"));
isValid = MathFunc.CheckArgs();
if (!isValid)
{
Console.Clear();
Console.WriteLine("Функция не определена при данных аргументах!");
}
} while (!isValid);
MathFunc.ComputeResult();
if (GameLogic(MathFunc.GetResult(), attempts))
{
Console.WriteLine("Ответ верный! Победа!");
} else
{
Console.WriteLine(String.Format("Попытки кончились! Правильный ответ: {0:0.00}", MathFunc.GetResult()));
}
}
private static bool GameLogic(double correctAnswer, int attempts)
{
bool win = false;
for (int i = attempts; i > 0; i--)
{
Console.Clear();
Console.WriteLine($"Количество попыток: {i}");
double answer = Utils.ReadDouble("ваш ответ");
win = Math.Abs(correctAnswer - answer) < 0.01;
if (win)
{
i = 0;
}
}
return win;
}
private static class MathFunc
{
private const double PI = Math.PI;
private const double E = Math.E;
private static double a;
private static double b;
private static double result;
public static void setArgs(double a, double b)
{
MathFunc.a = a;
MathFunc.b = b;
}
public static void ComputeResult()
{
MathFunc.result = Math.Sin((Math.Pow(a, 3) + Math.Pow(b, 5)) / (2 * PI)) + Math.Pow(Math.Cos(a + b), (1.0 / 3.0));
}
public static bool CheckArgs()
{
return Math.Cos(a + b) >= 0;
}
public static double GetResult()
{
return result;
}
}
}
}