Condividi tramite


Esercitazione: Aggiungere problemi matematici a un'app WinForms per quiz matematici

In questa serie di quattro esercitazioni si creerà un quiz matematico. Il quiz contiene quattro problemi matematici casuali che un quiz taker tenta di rispondere entro un determinato periodo di tempo.

I controlli usano codice C# o Visual Basic. In questa seconda esercitazione si rende difficile il quiz aggiungendo codice per problemi matematici basati su numeri casuali. È anche possibile creare un metodo denominato StartTheQuiz() per compilare i problemi.

In questa seconda esercitazione si apprenderà come:

  • Scrivere codice per creare oggetti casuali da usare nei problemi matematici.
  • Aggiungere un gestore eventi per il pulsante Start.
  • Scrivere codice per avviare il quiz.

Prerequisiti

Questa esercitazione si basa su un'esercitazione precedente Creare un'app WinForms per quiz matematici. Se non hai completato quell'esercitazione, affrontala prima.

Creare un problema di addizione casuale

  1. Nel progetto di Visual Studio, seleziona Designer di Windows Form.

  2. Selezionare il modulo Form1.

  3. Nella barra dei menu selezionare Visualizza>Codice. Form1.cs o Form1.vb viene visualizzato, a seconda del linguaggio di programmazione in uso, in modo da poter visualizzare il codice sottostante il modulo.

  4. Creare un oggetto Random aggiungendo un'istruzione new nella parte superiore del codice in Form1.cs o Form1.vb.

    public partial class Form1 : Form
    {
        // Create a Random object called randomizer 
        // to generate random numbers.
        Random randomizer = new Random();
    

È possibile usare new istruzioni come questa per creare pulsanti, etichette, pannelli, OpenFileDialogs, ColorDialogs, SoundPlayers, Randoms e persino moduli. Questi elementi vengono chiamati oggetti .

Quando si esegue il programma, viene avviato il formulario. Il codice sottostante crea un oggetto Random e lo assegna randomizer.

Il quiz richiede variabili per archiviare i numeri casuali creati per ogni problema. Prima di usare le variabili, dichiararle, ovvero elencarne i nomi e i tipi di dati.

  1. Aggiungere due variabili integer al form e denominarle addend1 e addend2 in Form1.cs o Form1.vb.

    Nota

    Una variabile integer è nota come int in C# o un Integer in Visual Basic. Questo tipo di variabile archivia un numero positivo o negativo da -2147483648 a 2147483647 e può archiviare solo numeri interi, non decimali.

    Si usa una sintassi simile per aggiungere una variabile integer come è stato fatto per aggiungere l'oggetto Random, come illustrato nel codice seguente.

    // Create a Random object called randomizer 
    // to generate random numbers.
    Random randomizer = new Random();
    
    // These integer variables store the numbers 
    // for the addition problem. 
    int addend1;
    int addend2;
    

  1. Aggiungere un metodo denominato StartTheQuiz()Form1.cs o Form1.vb. Questo metodo usa il metodo Next() dell'oggetto Random per generare numeri casuali per le etichette. StartTheQuiz() alla fine riempirà tutti i problemi e poi avvierà il timer, quindi aggiungi queste informazioni al commento di riepilogo. La funzione dovrebbe essere simile al codice seguente.

    /// <summary>
    /// Start the quiz by filling in all of the problems
    /// and starting the timer.
    /// </summary>
    public void StartTheQuiz()
    {
        // Fill in the addition problem.
        // Generate two random numbers to add.
        // Store the values in the variables 'addend1' and 'addend2'.
        addend1 = randomizer.Next(51);
        addend2 = randomizer.Next(51);
    
        // Convert the two randomly generated numbers
        // into strings so that they can be displayed
        // in the label controls.
        plusLeftLabel.Text = addend1.ToString();
        plusRightLabel.Text = addend2.ToString();
    
        // 'sum' is the name of the NumericUpDown control.
        // This step makes sure its value is zero before
        // adding any values to it.
        sum.Value = 0;
    }
    

Quando si usa il metodo Next() con un oggetto Random, ad esempio quando si chiama randomizer.Next(51), si ottiene un numero casuale minore di 51 o compreso tra 0 e 50. Questo codice chiama randomizer.Next(51) in modo che i due numeri casuali si sommano a una risposta compresa tra 0 e 100.

Esaminare più da vicino queste affermazioni.

plusLeftLabel.Text = addend1.ToString();
plusRightLabel.Text = addend2.ToString();

Queste istruzioni impostano le proprietà di Text di plusLeftLabel e plusRightLabel in modo che visualizzino i due numeri casuali. I controlli etichetta visualizzano i valori in formato testo e, nella programmazione, le stringhe contengono testo. Il metodo ToString() di ogni numero intero converte il numero in testo che un'etichetta può visualizzare.

Creare problemi di sottrazione, moltiplicazione e divisione casuali

Il passaggio successivo consiste nel dichiarare le variabili e fornire valori casuali per gli altri problemi matematici.

  1. Aggiungere variabili intere per i problemi matematici rimanenti al modulo, dopo le variabili dei problemi di addizione. Il codice in Form1.cs o Form1.vb dovrebbe essere simile all'esempio seguente.

    public partial class Form1 : Form
    {
        // Create a Random object called randomizer 
        // to generate random numbers.
        Random randomizer = new Random();
    
        // These integer variables store the numbers 
        // for the addition problem. 
        int addend1;
        int addend2;
    
        // These integer variables store the numbers 
        // for the subtraction problem. 
        int minuend;
        int subtrahend;
    
        // These integer variables store the numbers 
        // for the multiplication problem. 
        int multiplicand;
        int multiplier;
    
        // These integer variables store the numbers 
        // for the division problem. 
        int dividend;
        int divisor;
    

  1. Modificare il metodo StartTheQuiz() in Form1.cs o Form1.vb aggiungendo il codice seguente, a partire dal commento "Compilare il problema di sottrazione".

    /// <summary>
    /// Start the quiz by filling in all of the problem 
    /// values and starting the timer. 
    /// </summary>
    public void StartTheQuiz()
    {
        // Fill in the addition problem.
        // Generate two random numbers to add.
        // Store the values in the variables 'addend1' and 'addend2'.
        addend1 = randomizer.Next(51);
        addend2 = randomizer.Next(51);
    
        // Convert the two randomly generated numbers
        // into strings so that they can be displayed
        // in the label controls.
        plusLeftLabel.Text = addend1.ToString();
        plusRightLabel.Text = addend2.ToString();
    
        // 'sum' is the name of the NumericUpDown control.
        // This step makes sure its value is zero before
        // adding any values to it.
        sum.Value = 0;
    
        // Fill in the subtraction problem.
        minuend = randomizer.Next(1, 101);
        subtrahend = randomizer.Next(1, minuend);
        minusLeftLabel.Text = minuend.ToString();
        minusRightLabel.Text = subtrahend.ToString();
        difference.Value = 0;
    
        // Fill in the multiplication problem.
        multiplicand = randomizer.Next(2, 11);
        multiplier = randomizer.Next(2, 11);
        timesLeftLabel.Text = multiplicand.ToString();
        timesRightLabel.Text = multiplier.ToString();
        product.Value = 0;
    
        // Fill in the division problem.
        divisor = randomizer.Next(2, 11);
        int temporaryQuotient = randomizer.Next(2, 11);
        dividend = divisor * temporaryQuotient;
        dividedLeftLabel.Text = dividend.ToString();
        dividedRightLabel.Text = divisor.ToString();
        quotient.Value = 0;
    

Questo codice usa il metodo Next() della classe Random in modo leggermente diverso da come funziona il problema di addizione. Quando si assegna al metodo Next() due valori, viene selezionato un numero casuale maggiore o uguale al primo valore e minore del secondo.

Usando il metodo Next() con due argomenti, è possibile verificare che il problema di sottrazione abbia una risposta positiva, la risposta di moltiplicazione è al massimo 100 e la risposta di divisione non è una frazione.

Aggiungere un gestore eventi al pulsante Start

In questa sezione si aggiunge il codice per avviare il quiz quando si seleziona il pulsante Start. Il codice eseguito in reazione a un evento come una selezione del pulsante è denominato gestore eventi.

  1. Nel Designer di Windows Form, fare doppio clic sul pulsante Avvia il quiz, oppure selezionarlo e poi selezionare Invio. Viene visualizzato il codice del modulo e viene visualizzato un nuovo metodo.

    Queste azioni aggiungono un gestore dell'evento Click al pulsante Start. Quando un quiz taker seleziona questo pulsante, l'app esegue il codice che verrà aggiunto a questo nuovo metodo.

  2. Aggiungere le due istruzioni seguenti in modo che il gestore eventi avvii il quiz.

    private void startButton_Click(object sender, EventArgs e)
    {
        StartTheQuiz();
        startButton.Enabled = false;           
    }
    

La prima istruzione chiama il nuovo metodo StartTheQuiz(). La seconda istruzione imposta la proprietà Enabled del controllo startButton su false in modo che chi sostiene il quiz non possa selezionare il pulsante durante un quiz.

Esegui l'app

  1. Salvare il codice.

  2. Eseguire l'app e quindi selezionare Avviare il quiz. Vengono visualizzati problemi matematici casuali, come illustrato nello screenshot seguente.

    Screenshot che mostra valori casuali in tutti e quattro i problemi matematici. Il pulsante Avvia il quiz viene visualizzato in grigio.

Passaggi successivi

Passare all'esercitazione successiva per aggiungere un timer al quiz matematico e controllare le risposte dell'utente.