Skip to content

Artjomgorodnitsev/SunSystemProject

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

30 Commits
 
 
 
 

Repository files navigation

SunSystemProject

В начале нас встречает главная форма, где мы присваиваем label, то что он родитель picturebox, что бы в будующем сделать их прозрачными на picturebox.

    public MainFrm()
    {
        InitializeComponent();
        label4.Parent = pictureBox1;
        label5.Parent = pictureBox1;
        label6.Parent = pictureBox1;
        label7.Parent = pictureBox1;
        label8.Parent = pictureBox1;
        label9.Parent = pictureBox1;
        label10.Parent = pictureBox1;
        label11.Parent = pictureBox1;
        label12.Parent = pictureBox1;
        label13.Parent = pictureBox1;
        label14.Parent = pictureBox1;
        label15.Parent = pictureBox1;
        label16.Parent = pictureBox1;
        label17.Parent = pictureBox1;
        label18.Parent = pictureBox1;
        label19.Parent = pictureBox1;
        label20.Parent = pictureBox1;
        label21.Parent = pictureBox1;
        label22.Parent = pictureBox1;
        label23.Parent = pictureBox1;
        label24.Parent = pictureBox1;
        label25.Parent = pictureBox1;
        label26.Parent = pictureBox1;
        label27.Parent = pictureBox1;

Тут мы прописываем функции для label. Что бы при двойном нажатии на планету label c информацией исчезал.

        label4.DoubleClick += Label4_DoubleClick;
        label5.DoubleClick += Label5_DoubleClick;
        label6.DoubleClick += Label6_DoubleClick;
        label7.DoubleClick += Label7_DoubleClick;
        label8.DoubleClick += Label8_DoubleClick;
        label9.DoubleClick += Label9_DoubleClick;
        label10.DoubleClick += Label10_DoubleClick;
        label11.DoubleClick += Label11_DoubleClick;
        label12.DoubleClick += Label12_DoubleClick;
        label13.DoubleClick += Label13_DoubleClick;
        label14.DoubleClick += Label14_DoubleClick;
        label15.DoubleClick += Label15_DoubleClick;
    }

Функция для исчезновения информации о планете

    private void Label4_DoubleClick(object sender, EventArgs e)
    {
        label16.Visible = false;
    }

Тут мы проптсали функции для кнопок, что бы они открывали новые окна с 2 играми, тестом, рекордами игроков и смена имени.

    private void buttonDef_Click(object sender, EventArgs e)
    {
        var form = new FormDefendGame();
        form.Show();
    }

    private void buttonSpeed_Click(object sender, EventArgs e)
    {
        var form = new FormPlanetSpeed();
        form.Show();
    }

    private void buttonTest_Click(object sender, EventArgs e)
    {
        var form = new FormTest();
        form.Show();
    }

    private void buttonResult_Click(object sender, EventArgs e)
    {
        var form = new FormResult();
        form.Show();
    }
    
    private void button1_Click(object sender, EventArgs e)
    {
        var form = new NameFrm(this);
        form.Show();
    }

Так же тут прописана функция для полного выхода из приложения.

    private void buttonExit_Click(object sender, EventArgs e)
    {
        Application.Exit();
    }

Дальше мы поподаем форму Расставить планеты на скорость. Форма состоит из нескольких кнопко и picturebox- где и происходит сама игра.

В самом начале мы создаем множество переменных.

Данные переменные созданы для того, что бы их использовать в функциях для перетаскивания планет. (Что бы планету можно было взять при нажатии на мышку и поставить в другую точку отпустив левую кнопку мыши):

    bool EarthClicked,
        MercuryClicked,
        VeneraClicked,
        MarsClicked,
        JupiterClicked,
        SaturnClicked,
        UrankClicked,
        NeptunClicked,
        PlutonClicked;

Данные переменные созданы для планеты, которая была поставлена на правильно место была зафиксирована на этом месте и не могла бы быть задействована дальше.

    bool StatusDone,
        StatusDone2,
        StatusDone3,
        StatusDone4,
        StatusDone5,
        StatusDone6,
        StatusDone7,
        StatusDone8,
        StatusDone9;

Данные переменные созданы для получения координат планет.

    int EarthX,
        EarthY,
        MercuryX,
        MercuryY,
        VeneraX,
        VeneraY,
        MarsX,
        MarsY,
        JupiterX,
        JupiterY,
        SaturnX,
        SaturnY,
        UranX,
        UranY,
        NeptunX,
        NeptunY,
        PlutonX,
        PlutonY;


    int X, Y, X2, Y2, X3, Y3, X4, Y4, X5, Y5, X6, Y6, X7, Y7, X8, Y8, X9, Y9;
    int LastClicked;
    Image img1, img2, img3, img4, img5, img6, img7, img8, img9;

Данные переменные это фигуры, которым мы присваиваем картинку плнеты, её изначальное расположение и размеры.

    Rectangle earth = new Rectangle(-200, -200, 91, 92);
    Rectangle mercury = new Rectangle(-200, -200, 42, 40);
    Rectangle venera = new Rectangle(-200, -200, 84, 83);
    Rectangle mars = new Rectangle(-200, -200, 79, 78);
    Rectangle jupiter = new Rectangle(-200, -200, 166, 164);
    Rectangle saturn = new Rectangle(-200, -200, 156, 204);
    Rectangle uran = new Rectangle(-200, -200, 102, 101);
    Rectangle neptun = new Rectangle(-200, -200, 87, 88);
    Rectangle pluton = new Rectangle(-200, -200, 38, 38);

Тут прописаны 3 функции для кнопок. Функции- при нажатии на кнопку, при движение курсора и при отпускании кнопки.

    public FormPlanetSpeed()
    {
        InitializeComponent();
        pictureBox1.MouseDown += PictureBox1_MouseDown;
        pictureBox1.MouseUp += PictureBox1_MouseUp;
        pictureBox1.MouseMove += PictureBox1_MouseMove;

        labelEarth.Parent = pictureBox1;
        labelMercury.Parent = pictureBox1;
        labelVenera.Parent = pictureBox1;
        labelMars.Parent = pictureBox1;
        labelJupiter.Parent = pictureBox1;
        labelSaturn.Parent = pictureBox1;
        labelUran.Parent = pictureBox1;
        labelNeptun.Parent = pictureBox1;
        labelPluton.Parent = pictureBox1;
        label2.Parent = pictureBox1;

Тут задаются картинки из ресурсов, что бы проект можно было открывать на разных компьютерах не меняя постоянно путь до картинок.

        img1 = Resources.earthSpeed;
        img2 = Resources.merkurySpeed;
        img3 = Resources.veneraSpeed;
        img4 = Resources.marsSpeed;
        img5 = Resources.upiterSpeed;
        img6 = Resources.saturnSpeed;
        img7 = Resources.uranSpeed;
        img8 = Resources.neptunSpeed;
        img9 = Resources.plutonSpeed;
    } 

Данная функция для считывания координаты планеты, когда кнопка мыши нажимается.

    private void PictureBox1_MouseDown(object sender, MouseEventArgs e)
    {
        if ((e.X < earth.X + earth.Width) && (e.X > earth.X))
        {
            if ((e.Y < earth.Y + earth.Height) && (e.Y > earth.Y))
            {
                EarthClicked = true;

                EarthX = e.X - earth.X;
                EarthY = e.Y - earth.Y;
            }
        }
     }

Функция для движения планеты. Если StatusDone=false, то планета может быть перемещена, в противном случае она будет статичная и невозможна для перемещения.

     private void PictureBox1_MouseMove(object sender, MouseEventArgs e)
    {
        if (StatusDone == false)
        {
            if (EarthClicked)
            {
                earth.X = e.X - EarthX;
                earth.Y = e.Y - EarthY;
            }
        } 
    }
    
    pictureBox1.Invalidate();

Данная функция для считывания координаты планеты и куда была перемещена планета когда кнопка отпускается.

private async void PictureBox1_MouseUp(object sender, MouseEventArgs e)
    {
        if (((labelEarth.Location.X < earth.X + earth.Width) && (labelEarth.Location.X > earth.X))
            && ((labelEarth.Location.Y < earth.Y + earth.Height) && (labelEarth.Location.Y > earth.Y)))
        {
            StatusDone = true;
            earth.X = 394;
            earth.Y = 231;
        }
    }

Когда все статусы выполнены, то игра заканчивается и сохроняется в БД.

    if (StatusDone && StatusDone2 && StatusDone3 && StatusDone4 &&
            StatusDone5 && StatusDone6 && StatusDone7 && StatusDone8 &&
            StatusDone9)
        {
            await SaveGame();
        }

Проверка для повторного перемещения планеты, если она ещё не статичная.

    if (EarthClicked)
        {
            LastClicked = 1;
            X = earth.X;
            Y = earth.Y;
        }
    EarthClicked = false;

Функция на кнопку для выхода из игры "Расставить планеты на скорость".

    private void buttonExitForm1_Click(object sender, EventArgs e)
    {
        this.Close();
    }

Функция для кнопки "Начать игру". При нажатии на кнопку, в этой функции включается таймер и планеты появляются в случайном месте в picturebox.

    private void buttonGameStart_Click(object sender, EventArgs e)
    {
        pictureBox1.Image = Resources.planetSpeedSunSystemCutRus;
        timer1.Enabled = true;
        buttonGameStart.Visible = false;

        Random rand = new Random();
        X = rand.Next(pictureBox1.Width - 100);
        Y = rand.Next(pictureBox1.Height - 400);
        earth.Location = new Point(X, Y);
        earth.Size = new Size(91, 92);
        StatusDone = false;
      } 

Таймер для игры.

    private void Timer1_Tick(object sender, EventArgs e)
    {
        _gameDurationSec += 1;

        var t = TimeSpan.FromSeconds(_gameDurationSec);
        var answer = $"{t.Hours:D2}:{t.Minutes:D2}:{t.Seconds:D2}";

        labelTime.Text = answer;
    }

Теперь переходим к форме для введения имени пользователя.

    private readonly MainFrm _mainForm;

    public NameFrm()
    {
        InitializeComponent();
    }

    public NameFrm(Form mainForm)
    {
        _mainForm = mainForm as MainFrm;
        InitializeComponent();
    }

В форме пользователя прописана функция для кнопки подтверждения имени. Когда кнопка нажата, то имя сохраняется в БД.

    private async void button1_Click(object sender, EventArgs e)
    {
        if (label2.Text != null)
        {
            label2.Text = @"";
        }

        if (!string.IsNullOrEmpty(textBox1.Text) && !string.IsNullOrWhiteSpace(textBox1.Text))
        {
            var command = new SqlCommand("INSERT INTO [Records] (Name) VALUES (@Name)",
                await MainFrm.GetSqlConnection());
            command.Parameters.AddWithValue("Name", textBox1.Text);

            await command.ExecuteNonQueryAsync();
            MainFrm.UserId = textBox1.Text;
            await _mainForm.LoadName();
            Close();
        }
        else
        {
            label2.Text = @"Введите своё имя!";
        }
    }

Далее переходим к форме с рекордами пользователей.

    public FormResult()
    {
        InitializeComponent();
    }

Сразу как мы загружаем эту форму, нам открывается большая таблица с именами пользователей и их рекордами из БД.

    private async void FormResult_Load(object sender, EventArgs e)
    {
        listBox2.Visible = true;
        listBox3.Visible = true;
        listBox4.Visible = true;
        listBox5.Visible = true;
        listBox6.Visible = true;
        listBox7.Visible = true;
        var connectionString = ConfigurationManager.ConnectionStrings["SQLConnectionString01"];

        _sqlConnection = new SqlConnection(connectionString.ToString());

        await _sqlConnection.OpenAsync();

        SqlDataReader sqlReader = null;

        var command = new SqlCommand("SELECT * FROM[Records]", _sqlConnection);
        try
        {
            sqlReader = await command.ExecuteReaderAsync();

            while (await sqlReader.ReadAsync())
            {
                listBox1.Items.Add(Convert.ToString(sqlReader["Name"]));
                listBox2.Items.Add(Convert.ToString(sqlReader["Level"]));
                listBox3.Items.Add(Convert.ToString(sqlReader["Points"]));
                listBox4.Items.Add(Convert.ToString(sqlReader["CorrectAnswer"]));
                listBox5.Items.Add(Convert.ToString(sqlReader["IncorrectAnswer"]));
                listBox6.Items.Add(Convert.ToString(sqlReader["Date"]));
                listBox7.Items.Add(Convert.ToString(sqlReader["Time"]));
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message, ex.Source, MessageBoxButtons.OK,
                MessageBoxIcon.Error);
        }
        finally
        {
            sqlReader?.Close();
        }

        // TODO: данная строка кода позволяет загрузить данные в таблицу "databaseSunSystemDataSet1.Records".
        // При необходимости она может быть перемещена или удалена.
        //this.recordsTableAdapter.Fill(this.databaseSunSystemDataSet1.Records);
    }

При закрытии формы рекордов, с формой закрывается и подключение к БД

private void FormResult_FormClosing(object sender, FormClosingEventArgs e)
    {
        if (_sqlConnection != null && _sqlConnection.State != ConnectionState.Closed)
            _sqlConnection.Close();
    }

Функция для сортировки в листбоксах рекордов.

    private async void label6_Click(object sender, EventArgs e)
    {
        clear();
        SqlDataReader sqlReader = null;
        SqlCommand command =
            new SqlCommand("SELECT * FROM[Records] ORDER BY[IncorrectAnswer] DESC", _sqlConnection);
        try
        {
            sqlReader = await command.ExecuteReaderAsync();

            while (await sqlReader.ReadAsync())
            {
                listBox1.Items.Add(Convert.ToString(sqlReader["Name"]));
                listBox2.Items.Add(Convert.ToString(sqlReader["Level"]));
                listBox3.Items.Add(Convert.ToString(sqlReader["Points"]));
                listBox4.Items.Add(Convert.ToString(sqlReader["CorrectAnswer"]));
                listBox5.Items.Add(Convert.ToString(sqlReader["IncorrectAnswer"]));
                listBox6.Items.Add(Convert.ToString(sqlReader["Date"]));
                listBox7.Items.Add(Convert.ToString(sqlReader["Time"]));
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message, ex.Source, MessageBoxButtons.OK,
                MessageBoxIcon.Error);
        }
        finally
        {
            sqlReader?.Close();
        }
    }

Функции дляя переключений между листбоксами, для отображения разных рекордов из разных игр.

    private void radioButton1_CheckedChanged(object sender, EventArgs e)
    {
        listBox2.Visible = true;
        listBox3.Visible = true;
        listBox4.Visible = true;
        listBox5.Visible = true;
        listBox6.Visible = true;
        listBox7.Visible = true;
    }

    private void radioButton2_CheckedChanged(object sender, EventArgs e)
    {
        listBox2.Visible = true;
        listBox3.Visible = true;
        listBox4.Visible = false;
        listBox5.Visible = false;
        listBox6.Visible = false;
        listBox7.Visible = false;
    }

    private void radioButton3_CheckedChanged(object sender, EventArgs e)
    {
        listBox2.Visible = false;
        listBox3.Visible = false;
        listBox4.Visible = true;
        listBox5.Visible = true;
        listBox6.Visible = false;
        listBox7.Visible = false;
    }

    private void radioButton4_CheckedChanged(object sender, EventArgs e)
    {
        listBox2.Visible = false;
        listBox3.Visible = false;
        listBox4.Visible = false;
        listBox5.Visible = false;
        listBox6.Visible = true;
        listBox7.Visible = true;
    }

Функция для очистки листбоксов после переключения между ними

    private void clear()
    {
        listBox1.Items.Clear();
        listBox2.Items.Clear();
        listBox3.Items.Clear();
        listBox4.Items.Clear();
        listBox5.Items.Clear();
        listBox6.Items.Clear();
        listBox7.Items.Clear();
    }

Форма защиты планеты. В начале создаем переменные для дальнейшего использования в коде.

    private string asteroidImage;
    private int[] asteroidsHorizontal = new int[5];
    private int[] asteroidsVertical = new int[5];
    private int[] asteroidsHeightWidth = new int[5];
    private bool[] asteroidAlive = new bool[5];
    private int[] asteroidSpeed = new int[5];


    private string moonImage = "objectOff.png", earth = "Earth.png";
    private static int moonHorizontal = earthHorizontal + 60, moonVertical = earthVertical + 15;
    private bool moonAchievesGoal = false;


    private static int earthHorizontal = 30, earthVertical = 280, backgroundHorizontal = 0;
    private static int score = 0;

    Random GetRandom = new Random();

Функция, которая рисует все объекты в форме.

    private void FormDefendGame_Paint(object sender, PaintEventArgs e)
    {
        e.Graphics.DrawImage(new Bitmap("kosmos2.jpg"), backgroundHorizontal, 0, 1200, 800);

        e.Graphics.DrawImage(new Bitmap(earth), earthHorizontal, earthVertical, 100, 100);

        e.Graphics.DrawImage(new Bitmap(moonImage), moonHorizontal, moonVertical, 30, 30);

        asteroidImage = "asteroid3.png";
        for (int i = 0; i <= 4; i++)
        {
            e.Graphics.DrawImage(new Bitmap(asteroidImage), asteroidsHorizontal[i], asteroidsVertical[i], asteroidsHeightWidth[i],                  asteroidsHeightWidth[i]);
        }
    }

Функции для генерации летающих тарелок, которые будут атаковать землю.

     private void AsteroidAlive()
    {
        for (int i = 0; i <= 4; i++)
        {
            asteroidAlive[i] = false;
        }
    }
    private void AsteroidsGenerate(int i)
    {
        asteroidsHeightWidth[i] = GetRandom.Next(30, 130);
        asteroidsHorizontal[i] = GetRandom.Next(1024, 1300);
        asteroidsVertical[i] = GetRandom.Next(15, 548);
        asteroidSpeed[i] = GetRandom.Next(4, 8);
        asteroidAlive[i] = true;
        int image = GetRandom.Next(1, 3);
        asteroidImage = ("asteroid" + image + ".png").ToString();

        asteroidsHorizontal[i] -= asteroidSpeed[i];
    }

В начале игры появляется лейбл для очков.

    private void FormDefendGame_Load(object sender, EventArgs e)
    {
        
        label1.Text = "Очки: " + score.ToString();
        
    }

Функция для земли. Что бы земля не могла уходить за определенные границы.

    private void SetSceneBorders()
    {
        if (earthHorizontal <= 10)
        {
            earthHorizontal = 11;
        }
        else if (earthHorizontal >= 200)
        {
            earthHorizontal = 198;
        }
        else if (earthVertical <= 10)
        {
            earthVertical = 15;
        }
        else if (earthVertical >= 480)
        {
            earthVertical = 478;
        }
    } 

Функция для передвижения объектов в форме.

     private void Timer1_Tick_1(object sender, EventArgs e)
    {
        Defeat();
        for (int i = 0; i <= 4; i++)
        {
            if (asteroidAlive[i] == false)
            {
                AsteroidsGenerate(i);

            }
            else
            {
                asteroidsHorizontal[i] -= asteroidSpeed[i];
            }
        }

        for (int i = 0; i <= 4; i++)
        {
            if (asteroidsHorizontal[i] < 0 - asteroidsHeightWidth[i])
            {
                AsteroidsGenerate(i);
            }
            else if ((moonImage == "moon.png") && (moonHorizontal >= asteroidsHorizontal[i] - 30))
            {
                if ((moonVertical >= asteroidsVertical[i] - 30) && (moonVertical <= asteroidsVertical[i] + asteroidsHeightWidth[i]))
                {
                    moonAchievesGoal = true;
                    asteroidAlive[i] = false;
                    asteroidImage = "objectOff.png";
                    AsteroidsGenerate(i);
                    score += 1;
                    label1.Text = "Очки: " + score.ToString();
                }
            }
        }




        if ((moonHorizontal > 1024) || (moonAchievesGoal == true))
        {
            moonImage = "objectOff.png";
            moonAchievesGoal = false;
        }
        else
        {
            moonHorizontal += 150;
        }
        Invalidate();
    }  

Функция для выхода из игры.

    private void Exit()
    {
        DialogResult dialog = new DialogResult();
        timer1.Enabled = false;
        dialog = MessageBox.Show("Ты уверен?", "Закрыть игру", MessageBoxButtons.YesNo);
        if (dialog == DialogResult.Yes)
        {
            Close();
        }
        else
        {
            timer1.Enabled = true;
        }
    }

Функция при проигрыше. Которая спрашивает игрока, хочет ли он продолжить игру.

    private void Defeat()
    {
        for (int i = 0; i <= 4; i++)
        {
            if (((earthHorizontal > asteroidsHorizontal[i] - 60)) && ((earthVertical > asteroidsVertical[i] - 60) && (earthVertical         < asteroidsVertical[i] + asteroidsHeightWidth[i])))
            {
                if ((earthHorizontal < asteroidsHorizontal[i] + asteroidsHeightWidth[i]))
                {

                    earth = "objectOff.png";
                    timer1.Enabled = false;
                    DialogResult dialog = new DialogResult();
                    dialog = MessageBox.Show("Хочешь попробовать сыграть ещё?", "Твои очки: " + score, MessageBoxButtons.YesNo);

                    if (dialog == DialogResult.Yes)
                    {
                        earthHorizontal = 30; earthVertical = 280;
                        AsteroidsGenerate(i);
                        earth = "Earth.png";
                        score = 0;
                        label1.Text = "Очки: " + score.ToString();
                        for (i = 0; i <= 4; i++)
                        {
                            asteroidAlive[i] = false;
                        }
                        timer1.Enabled = true;
                    }

                    if (dialog == DialogResult.No)
                    {
                        Close();
                    }
                }
            }
        }
    }

Управление землей.

    private void FormDefendGame_KeyDown(object sender, KeyEventArgs e)
    {
        switch (e.KeyCode)
        {
            case Keys.Left:
                earthHorizontal -= 7;
                Defeat();
                SetSceneBorders();
                break;
            case Keys.Right:
                earthHorizontal += 7;
                Defeat();
                SetSceneBorders();
                break;
            case Keys.Up:
                earthVertical -= 7;
                Defeat();
                SetSceneBorders();
                break;
            case Keys.Down:
                earthVertical += 7;
                Defeat();
                SetSceneBorders();
                break;
            case Keys.Escape:
                Exit();
                break;
            case Keys.Space:
                if (moonHorizontal < 1024)
                {

                }
                else
                {
                    moonHorizontal = earthHorizontal + 60;
                    moonVertical = earthVertical + 15;
                    moonImage = "moon.png";
                }
                break;
        }
    }
    
    
 public FormDefendGame()
    {
        InitializeComponent();
        AsteroidAlive();
    }

Форма с Теста.

В начале создаются переменные для дальнейшего использования.

    public List<string> voprosi;
    int num;
    string vopros;
    string potvet;
    public int correct = 0;
    public int incorrect = 0;
    int randomm = 9;
    public Random random = new Random();
    int kolotvetov = 0;

При загрузке формы, загружается лист с вопросами.

    public FormTest()
    {
        InitializeComponent();

        voprosi = new List<string>() { "Какая по счету от Солнца планета Земля?", "Эта планета могла стать звездой, но не набрала           достаточно массы:", "Сколько спутников у Марса?",
         "Солнце – типичный представитель этого класса звезд:","Ближайшая к Солнцу планета:","Сколько всего планет в Солнечной              системе?","Первооткрывателем законов движения планет Солнечной системы был:","Самая большая планета Солнечной системы?","Самый          большой спутник в Солнечной системе:"};
    }

Функция для кнопки "Начать игру".

    private void buttonGameStart_Click(object sender, EventArgs e)
    {
        buttonGameStart.Visible = false;//кнопка начать игру пропадает
        timer1.Enabled = true;//таймер начинаеться
        num = random.Next(0, randomm);//береться рандомный индекс
        vopros = voprosi[num];
        label1.Text = voprosi[num];
        voprosi.RemoveAt(num);//удаляеться вопрос
        randomm -= 1;
        num = 0;

        switch (vopros)
        {
            case "Какая по счету от Солнца планета Земля?":
                radioButton1.Text = "первая";
                radioButton2.Text = "вторая";
                radioButton3.Text = "третья+";
                radioButton4.Text = "четвертая";
                potvet = "radioButton3";
                break;
            case "Эта планета могла стать звездой, но не набрала достаточно массы:":
                radioButton1.Text = "Юпитер+";
                radioButton2.Text = "Меркурий";
                radioButton3.Text = "Нептун";
                radioButton4.Text = "Сатурн";
                potvet = "radioButton1";
                break;
            case "Сколько спутников у Марса?":
                radioButton1.Text = "у Марса нет спутников";
                radioButton2.Text = "один спутник";
                radioButton3.Text = "два спутника+";
                radioButton4.Text = "пять спутников";
                potvet = "radioButton3";
                break;
            case "Солнце – типичный представитель этого класса звезд:":
                radioButton1.Text = "желтый карлик+";
                radioButton2.Text = "белый карлик";
                radioButton3.Text = "красный гигант";
                radioButton4.Text = "пульсар";
                potvet = "radioButton1";
                break;
            case "Ближайшая к Солнцу планета:":
                radioButton1.Text = "Земля";
                radioButton2.Text = "Юпитер";
                radioButton3.Text = "Марс";
                radioButton4.Text = "Меркурий+";
                potvet = "radioButton4";
                break;
            case "Сколько всего планет в Солнечной системе?":
                radioButton1.Text = "шесть";
                radioButton2.Text = "семь";
                radioButton3.Text = "восемь+";
                radioButton4.Text = "девять";
                potvet = "radioButton3";
                break;
            case "Первооткрывателем законов движения планет Солнечной системы был:":
                radioButton1.Text = "Николай Коперник";
                radioButton2.Text = "Иоганн Кеплер+";
                radioButton3.Text = "Джордано Бруно";
                radioButton4.Text = "Жак Кассини";
                potvet = "radioButton2";
                break;
            case "Самая большая планета Солнечной системы?":
                radioButton1.Text = "Уран";
                radioButton2.Text = "Церера";
                radioButton3.Text = "Сатурн";
                radioButton4.Text = "Юпитер+";
                potvet = "radioButton4";
                break;
            case "Самый большой спутник в Солнечной системе:":
                radioButton1.Text = "Ио";
                radioButton2.Text = "Ганимед+";
                radioButton3.Text = "Европа";
                radioButton4.Text = "Фобос";
                potvet = "radioButton2";
                break;
        }
    }

Функция для кнопки "Ответить".

    private void button1_Click_2(object sender, EventArgs e)
    {
       
        if (kolotvetov < 8)
        {


            kolotvetov++;
            label5.Text = kolotvetov.ToString() + " / 8";
            num = 0;
            randomm -= 1;
            num = random.Next(0, randomm);
            if (radioButton1.Name == potvet && radioButton1.Checked)
            {

               
                correct++;
                label2.Text = "Правильных ответов: " + correct.ToString();
                ffgf();

            }
            else if (radioButton2.Name == potvet && radioButton2.Checked)
            {

                
                correct++;
                label2.Text = "Правильных ответов: " + correct.ToString();
                ffgf();
            }
            else if (radioButton3.Name == potvet && radioButton3.Checked)
            {

                
                correct++;
                label2.Text = "Правильных ответов: " + correct.ToString();
                ffgf();

            }
            else if (radioButton4.Name == potvet && radioButton4.Checked)
            {

                
                correct++;
                label2.Text = "Правильных ответов: " + correct.ToString();
                ffgf();

            }
            else
            {
                incorrect++;
                ffgf();
            }
        }
        else
        {
            
            label1.Text = "konec";
            timer1.Enabled = false;
            SaveGame();
        }

    }

Функции для сохранения данных из игры в базу данных.

    protected virtual async Task SaveGame()
    {
        var command = new SqlCommand("UPDATE [Records] set CorrectAnswer = @correct where Name = @Name",
            await MainFrm.GetSqlConnection());
        command.Parameters.AddWithValue("correct", correct);
        command.Parameters.AddWithValue("Name", MainFrm.UserId);
        var command1 = new SqlCommand("UPDATE [Records] set IncorrectAnswer = @incorrect  where Name = @Name",
            await MainFrm.GetSqlConnection());
        command1.Parameters.AddWithValue("incorrect", incorrect);
        command1.Parameters.AddWithValue("Name", MainFrm.UserId);

        await command.ExecuteNonQueryAsync();
        await command1.ExecuteNonQueryAsync();
        Close();
    }
    private int _gameDurationSec;
    private void Timer1_Tick(object sender, EventArgs e)
    {
        _gameDurationSec += 1;

        var t = TimeSpan.FromSeconds(_gameDurationSec);
        var answer = $"{t.Hours:D2}:{t.Minutes:D2}:{t.Seconds:D2}";

        labelTime.Text =  "Время: " + answer;
    }

Функция для перехода к следующему ответу и проверки ответов, были ли ответы правильные или нет.

    public void ffgf()
    {


        vopros = voprosi[num];
        label1.Text = vopros;
        voprosi.RemoveAt(num);


        switch (vopros)
        {
            case "Какая по счету от Солнца планета Земля?":
                radioButton1.Text = "первая";
                radioButton2.Text = "вторая";
                radioButton3.Text = "третья+";
                radioButton4.Text = "четвертая";
                potvet = "radioButton3";
                break;
            case "Эта планета могла стать звездой, но не набрала достаточно массы:":
                radioButton1.Text = "Юпитер+";
                radioButton2.Text = "Меркурий";
                radioButton3.Text = "Нептун";
                radioButton4.Text = "Сатурн";
                potvet = "radioButton1";
                break;
            case "Сколько спутников у Марса?":
                radioButton1.Text = "у Марса нет спутников";
                radioButton2.Text = "один спутник";
                radioButton3.Text = "два спутника+";
                radioButton4.Text = "пять спутников";
                potvet = "radioButton3";
                break;
            case "Солнце – типичный представитель этого класса звезд:":
                radioButton1.Text = "желтый карлик+";
                radioButton2.Text = "белый карлик";
                radioButton3.Text = "красный гигант";
                radioButton4.Text = "пульсар";
                potvet = "radioButton1";
                break;
            case "Ближайшая к Солнцу планета:":
                radioButton1.Text = "Земля";
                radioButton2.Text = "Юпитер";
                radioButton3.Text = "Марс";
                radioButton4.Text = "Меркурий+";
                potvet = "radioButton4";
                break;
            case "Сколько всего планет в Солнечной системе?":
                radioButton1.Text = "шесть";
                radioButton2.Text = "семь";
                radioButton3.Text = "восемь+";
                radioButton4.Text = "девять";
                potvet = "radioButton3";
                break;
            case "Первооткрывателем законов движения планет Солнечной системы был:":
                radioButton1.Text = "Николай Коперник";
                radioButton2.Text = "Иоганн Кеплер+";
                radioButton3.Text = "Джордано Бруно";
                radioButton4.Text = "Жак Кассини";
                potvet = "radioButton2";
                break;
            case "Самая большая планета Солнечной системы?":
                radioButton1.Text = "Уран";
                radioButton2.Text = "Церера";
                radioButton3.Text = "Сатурн";
                radioButton4.Text = "Юпитер+";
                potvet = "radioButton4";
                break;
            case "Самый большой спутник в Солнечной системе:":
                radioButton1.Text = "Ио";
                radioButton2.Text = "Ганимед+";
                radioButton3.Text = "Европа";
                radioButton4.Text = "Фобос";
                potvet = "radioButton2";
                break;
        }
    }

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages