using laba3.Subprograms; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.Xml; namespace ProgLab1.GUI { public partial class MathGameForm : Form { private Label error; private Label formula; private Label rules; private TextBox textBoxA; private TextBox textBoxB; private Label labelA; private Label labelB; private double a=0; private double b=0; private GuessAnswerMath game; private GuessForm guessForm; public MathGameForm(Form onCloseForm) { guessForm = new GuessForm(onCloseForm); game = new GuessAnswerMath(); InitializeComponent(); this.Text = "Угадайка"; formula = new Label(); formula.Text = "Math.Sin((Math.Pow(a, 3) + Math.Pow(b, 5)) / (2 * PI)) + Math.Pow(Math.Cos(a + b), (1.0 / 3.0))"; formula.AutoSize = true; formula.Top = 50; formula.Left = 50; rules = new Label(); rules.Text = "Нужно ввести аргументы для функции, а затем попытаться отгадать её значение"; rules.AutoSize = true; rules.Top = 100; rules.Left = 50; // Создание Label для "a" labelA = new Label(); labelA.Text = "a:"; labelA.Top = 150; labelA.Left = 20; labelA.AutoSize = true; // Создание TextBox для "a" textBoxA = new TextBox(); textBoxA.Top = 150; textBoxA.Left = 50; textBoxA.Width = 300; // Создание Label для "b" labelB = new Label(); labelB.Text = "b:"; labelB.Top = 190; labelB.Left = 20; labelB.AutoSize = true; // Создание TextBox для "b" textBoxB = new TextBox(); textBoxB.Top = 190; textBoxB.Left = 50; textBoxB.Width = 300; error = new Label(); error.Text = ""; error.AutoSize = true; error.Top = 220; error.Left = 50; error.ForeColor = Color.Red; this.Controls.Add(formula); this.Controls.Add(rules); this.Controls.Add(labelA); this.Controls.Add(textBoxA); this.Controls.Add(labelB); this.Controls.Add(textBoxB); this.Controls.Add(error); Button confirmButton = new Button { Text = "Подтвердить", Width = 100, Height = 30, Top = 165, Left = 400 }; confirmButton.Click += ConfirmButton_Click; this.Controls.Add(confirmButton); this.FormClosing += new FormClosingEventHandler((object sender, FormClosingEventArgs e) => { e.Cancel = true; this.Hide(); onCloseForm.Show(); }); } private bool ValidateInput(TextBox textBox) { if (double.TryParse(textBox.Text, out _)) { return true; } else { return false; } } private void ConfirmButton_Click(object sender, EventArgs e) { // Проверяем значения в полях bool isAValid = ValidateInput(textBoxA); bool isBValid = ValidateInput(textBoxB); if (isAValid && isBValid) { // Если оба значения корректные, выводим сумму в textBoxA.BackColor = SystemColors.Window; textBoxB.BackColor = SystemColors.Window; a = double.Parse(textBoxA.Text); b = double.Parse(textBoxB.Text); game.setArgs(a, b); bool funcValid = game.CheckArgs(); if (!funcValid) { error.Text = "Функция не определена при этих аргументах"; } else { error.Text = ""; game.ComputeResult(); guessForm.SetAnswer(game.GetResult()); this.Hide(); guessForm.Show(); } } else { // Если есть ошибка, подсвечиваем поля if (!isAValid) textBoxA.BackColor = Color.Red; if (!isBValid) textBoxB.BackColor = Color.Red; error.Text = "Аргументы должны быть double"; } } } }