在我的SubmitButton_Click方法中,我正在尝试添加代码,以便为每个正确答案将分数提高20分。但由于某种原因,每次我正确地回答问题时它不会增加20分,它会说0.我的另一个问题是,当我点击新的时候我的两个随机变量发生了变化,我输入了正确的答案,它标记为不正确。我是否在处理这两个问题?
这是我的代码
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;
namespace Lab4
{
public partial class Lab4 : Form
{
public Lab4()
{
InitializeComponent();
score = 0;
}
private int score = 0;
private int product = 0;
private int answer = 0;
private void SubmitButton_Click(object sender, EventArgs e)
{
try
{
answer = int.Parse(AnswerTextBox.Text);
if(Convert.ToInt32(AnswerTextBox.Text)==product)
{
score=score+20;
MessageBox.Show("Correct!");
}
else
{
MessageBox.Show("Sorry, your answer is incorrect!");
}
}
catch
{
MessageBox.Show("There was an error processing your answer!");
}
}
private void NewButton_Click(object sender, EventArgs e)
{
Random rnd = new Random();
int i, var1, var2, product;
var1 = rnd.Next(1,9);
var2 = rnd.Next(1,9);
PromptLabel.Text = ("WHAT IS " + var1 +" . " + var2 + "?");
product = var1 * var2;
for (i = 10; i >= 1; i--)
{
MessageBox.Show("You have " + i + " sec(s) left!");
TimeLabel.Text = ("Time: " + i + " sec(s)");
}
}
private void ScoreLabel_Click(object sender, EventArgs e)
{
}
private void AnswerTextBox_TextChanged(object sender, EventArgs e)
{
}
}
}
答案 0 :(得分:1)
第一个问题是您在方法中声明了一个局部变量,其名称与表单类中的字段相同。它们都被命名为product
。因此局部变量隐藏了字段,因此没有为您的班级中的product
分配值。所以你必须删除本地的,或者必须使用this
关键字告诉编译器使用类中的字段。
你不必在这里声明product
,因为你不需要它。
int i, var1, var2; //product; dont declare local variable. instead use the field which is already available
var1 = rnd.Next(1,9);
var2 = rnd.Next(1,9);
PromptLabel.Text = ("WHAT IS " + var1 +" . " + var2 + "?");
product = var1 * var2; // this.product = var1 * var2;
我看到的另一个问题是计时器。你的计时器内循环几乎立即完成。因为你不要等到秒倒计时器。
for (i = 10; i >= 1; i--)
{
MessageBox.Show("You have " + i + " sec(s) left!");
TimeLabel.Text = ("Time: " + i + " sec(s)");
await Task.Delay(1000); // wait 1 second
}
为此,您必须将方法的签名更改为异步。
private async void NewButton_Click(object sender, EventArgs e)
这可能被认为是做倒数计时器的糟糕设计。所以我强烈建议你看看这里知道如何正确创建倒数计时器。
答案 1 :(得分:0)
更改此行
int i, var1, var2, product;
到
int i, var1, var2;
它应该解决问题