92 lines
3.0 KiB
C#
92 lines
3.0 KiB
C#
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;
|
||
}
|
||
}
|
||
}
|
||
}
|