Etapa 6: Adicionar um problema de subtração
Para adicionar um problema de subtração, você precisa:
Armazene os valores de subtração.
Gerar números aleatórios para o problema (e certifique-se de que a resposta está entre 0 e 100).
Atualize o método que verifica as respostas para que o método verifica o novo problema de subtração muito.
Atualize o manipulador de eventos Tick do seu timer para que o manipulador de eventos preenche a resposta correta quando o tempo se esgote.
Para adicionar um problema de subtração
Primeiro, você precisa de um local para armazenar os valores, portanto, adicione dois icas (inteiros) para o problema de subtração ao seu formulário.O novo código aparece entre os inteiros de adição e o inteiro de timer.O código deve ser semelhante ao seguinte.
Public Class Form1 ' Create a Random object to generate random numbers. Private randomizer As New Random ' These Integers will store the numbers ' for the addition problem. Private addend1 As Integer Private addend2 As Integer ' These Integers will store the numbers ' for the subtraction problem. Private minuend As Integer Private subtrahend As Integer ' This Integer will keep track of the time left. Private timeLeft As Integer
public partial class Form1 : Form { // Create a Random object to generate random numbers. Random randomizer = new Random(); // These ints will store the numbers // for the addition problem. int addend1; int addend2; // These ints will store the numbers // for the subtraction problem. int minuend; int subtrahend; // This int will keep track of the time left. int timeLeft;
Observação Os nomes dos novos icas —minuend e subtrahend— não são termos de programação.Eles são os nomes tradicionais na aritmética para o número que está sendo subtraído (o subtrahend) e o número sendo subtraído do (a minuend).A diferença é o minuend menos o subtrahend.Você pode usar outros nomes, porque seu programa não requer nomes específicos para icas, controles, componentes ou métodos.Existem algumas regras (por exemplo, nomes não podem começar com dígitos), mas em geral, você poderia usar nomes como x1, x2, X3, x4 e assim por diante.Mas seria difícil de ler o código e quase impossíveis de controlar problemas.Você usará os nomes tradicionais para multiplicação (multiplicador de × multiplicand = product) e divisão (divisor do dividendo ÷ = quociente) posterior neste tutorial.
Em seguida, modifique o StartTheQuiz() método para preencher um problema de subtração aleatório.O novo código segue o comentário "Preencher o problema de subtração".O código deve ser semelhante ao seguinte.
''' <summary> ''' Start the quiz by filling in all of the problems ''' and starting the timer. ''' </summary> ''' <remarks></remarks> Public Sub StartTheQuiz() ' Fill in the addition problem. addend1 = randomizer.Next(51) addend2 = randomizer.Next(51) plusLeftLabel.Text = addend1.ToString() plusRightLabel.Text = addend2.ToString() 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 ' Start the timer. timeLeft = 30 timeLabel.Text = "30 seconds" Timer1.Start() End Sub
/// <summary> /// Start the quiz by filling in all of the problems /// and starting the timer. /// </summary> public void StartTheQuiz() { // Fill in the addition problem. addend1 = randomizer.Next(51); addend2 = randomizer.Next(51); plusLeftLabel.Text = addend1.ToString(); plusRightLabel.Text = addend2.ToString(); 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; // Start the timer. timeLeft = 30; timeLabel.Text = "30 seconds"; timer1.Start(); }
Esse código usa a Random classe Next() método um pouco diferente.Quando você der dois valores, ele escolhe um número aleatório que é maior que ou igual ao primeiro e menor que a segunda.A seguinte linha escolhe um número aleatório de 1 a 100 e armazena em minuend.
minuend = randomizer.Next(1, 101)
minuend = randomizer.Next(1, 101);
O Random classe Next() método pode ser chamado de várias maneiras.Quando você pode chamar um método em mais de uma forma, que é chamado de um método sobrecarregado, e você pode usar IntelliSense para explorá-lo.Olhar novamente a IntelliSense janela de dica de ferramenta para o Next() método.
Dica de ferramenta do IntelliSense janela
Observe como a dica de ferramenta mostra (+ 2 overload(s)).Isso significa que existem duas maneiras que você pode chamar o Next() método.Quando você digita o novo código para o StartTheQuiz() método, você pode ver mais informações.Assim que você digite randomizer.Next(, a IntelliSense de IntelliSense é aberta.Pressione as teclas de seta para cima e seta para baixo para percorrer as sobrecargas, conforme mostrado na figura a seguir.
Sobrecargas da janela do IntelliSense
Na figura anterior é o item desejado, porque ele permite que você especifique um valor mínimo e máximo.
Modificar o CheckTheAnswer() método para verificar se a resposta correta de subtração.O código deve ser semelhante ao seguinte.
''' <summary> ''' Check the answer to see if the user got everything right. ''' </summary> ''' <returns>True if the answer's correct, false otherwise.</returns> ''' <remarks></remarks> Public Function CheckTheAnswer() As Boolean If addend1 + addend2 = sum.Value AndAlso minuend - subtrahend = difference.Value Then Return True Else Return False End If End Function
/// <summary> /// Check the answer to see if the user got everything right. /// </summary> /// <returns>True if the answer's correct, false otherwise.</returns> private bool CheckTheAnswer() { if ((addend1 + addend2 == sum.Value) && (minuend - subtrahend == difference.Value)) return true; else return false; }
O && é o Visual C# logical and operador.Em Visual Basic, o operador equivalente é AndAlso.É o mesmo que dizer, "se addend1 plus addend2 for igual ao valor da soma NumericUpDown e se minuend menos subtrahend é igual ao valor da diferença NumericUpDown. O CheckTheAnswer() método só retorna true se o problema de adição está correto e se o problema de subtração está correto.
Altere a última parte do manipulador de eventos Tick do timer para que ela preencha a resposta correta quando o tempo se esgote.O código deve ser semelhante ao seguinte.
Else ' If the user ran out of time, stop the timer, show ' a MessageBox, and fill in the answers. Timer1.Stop() timeLabel.Text = "Time's up!" MessageBox.Show("You didn't finish in time.", "Sorry") sum.Value = addend1 + addend2 difference.Value = minuend - subtrahend startButton.Enabled = True End If
else { // If the user ran out of time, stop the timer, show // a MessageBox, and fill in the answers. timer1.Stop(); timeLabel.Text = "Time's up!"; MessageBox.Show("You didn't finish in time.", "Sorry"); sum.Value = addend1 + addend2; difference.Value = minuend - subtrahend; startButton.Enabled = true; }
Salve e execute seu código.O programa agora deve ter um problema de subtração, conforme mostrado na figura a seguir.
Teste de matemática com problema de subtração
Para continuar ou revisar
Para ir para a próxima etapa do tutorial, consulte Etapa 7: Adicionar a multiplicação e divisão de problemas.
Para retornar para a etapa anterior do tutorial, consulte Etapa 5: Adicionar insira manipuladores de eventos para controles NumericUpDown.