Windows 形成随机定时数学测验 c#
Windows forms Random Timed Math quiz c#
我的问题是我想设置一个最大数量限制,用户会像示例一样提出最多 2 个问题,而我的程序只会显示随机问题 2 次,但它会不断生成数字我认为我的问题是通过将文本框更改为 int 以及将其放置在何处我是 windows 的新手,第一个按钮生成随机问题,第二个按钮应该做同样的事情,但每次用户点击时都会减去一些问题我尝试了很多operationbox
供用户选择操作(+,-,*,/),范围框是随机数的范围。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication7
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
rangebox1.Items.Add("[1,100]");
rangebox1.Items.Add("[1,500]");
rangebox1.Items.Add("[1,1000]");
Operationbox1.Items.Add("+");
Operationbox1.Items.Add("-");
Operationbox1.Items.Add("*");
Operationbox1.Items.Add("/");
}
int[] Rand(int v)
{
Random r = new Random();
int a = r.Next(1,v);
int b = r.Next(1,v);
int[] N = {Math.Max(a,b) , Math.Min(a,b)};
return N;
}
void generate()
{
int range = 0;
switch (rangebox1.SelectedIndex)
{
case 0:
range = 100;
break;
case 1:
range = 500;
break;
case 2:
range = 1000;
break;
default:
MessageBox.Show("Put a range !");
break;
}
int[] numbers = Rand(range);
switch (Operationbox1.SelectedIndex)
{
case 0:
questionlbl1.Text = string.Format("{0} + {1} =",numbers[0],numbers[1]);
break;
case 1:
questionlbl1.Text = string.Format("{0} - {1} =" , numbers[0], numbers[1]);
break;
case 2:
questionlbl1.Text = string.Format("{0} * {1} =" , numbers[0], numbers[1]);
break;
case 3:
questionlbl1.Text = string.Format("{0} / {1} =" , numbers[0], numbers[1]);
break;
default:
MessageBox.Show("Please insert a operation");
break;
}
}
void numberquest()
{
int numofquestionleft = Convert.ToInt32(numofquest1.Text);
int r = int.Parse(numofquest1.Text);
if (numofquestionleft > 0) generate();
numofquestionleft--;
}
private void genbutton1_Click(object sender, EventArgs e)
{
generate();
}
private void button1_Click(object sender, EventArgs e)
{
numberquest();
}
}
}
据我了解你的问题,你遇到了 numofquestionleft
变量的问题,你想限制用户最多只能请求两个数字。你需要修改你的代码。你这样做是行不通的。一种解决方案可能是,
声明numofquestionleft
为class级。
public partial class Form1 : Form
{
int numofquestionleft = 2; //here
public Form1()
{
你的 numberquest()
方法看起来像
void numberquest()
{
if (numofquestionleft > 0)
{
generate();
}
numofquestionleft--;
//You can use the textBox to communicate with user about number of turns left
//as
numofquest1.Text ="Request left " +numofquestionleft;
}
但是如果你仍然想从文本框读取最大请求,那么限制用户只能发出两个请求的目的就失去了(用户可能输入其他数字,在这种情况下你需要验证输入),而且,你需要想办法读取一次数据。
希望能帮助到你。
我的问题是我想设置一个最大数量限制,用户会像示例一样提出最多 2 个问题,而我的程序只会显示随机问题 2 次,但它会不断生成数字我认为我的问题是通过将文本框更改为 int 以及将其放置在何处我是 windows 的新手,第一个按钮生成随机问题,第二个按钮应该做同样的事情,但每次用户点击时都会减去一些问题我尝试了很多operationbox
供用户选择操作(+,-,*,/),范围框是随机数的范围。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication7
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
rangebox1.Items.Add("[1,100]");
rangebox1.Items.Add("[1,500]");
rangebox1.Items.Add("[1,1000]");
Operationbox1.Items.Add("+");
Operationbox1.Items.Add("-");
Operationbox1.Items.Add("*");
Operationbox1.Items.Add("/");
}
int[] Rand(int v)
{
Random r = new Random();
int a = r.Next(1,v);
int b = r.Next(1,v);
int[] N = {Math.Max(a,b) , Math.Min(a,b)};
return N;
}
void generate()
{
int range = 0;
switch (rangebox1.SelectedIndex)
{
case 0:
range = 100;
break;
case 1:
range = 500;
break;
case 2:
range = 1000;
break;
default:
MessageBox.Show("Put a range !");
break;
}
int[] numbers = Rand(range);
switch (Operationbox1.SelectedIndex)
{
case 0:
questionlbl1.Text = string.Format("{0} + {1} =",numbers[0],numbers[1]);
break;
case 1:
questionlbl1.Text = string.Format("{0} - {1} =" , numbers[0], numbers[1]);
break;
case 2:
questionlbl1.Text = string.Format("{0} * {1} =" , numbers[0], numbers[1]);
break;
case 3:
questionlbl1.Text = string.Format("{0} / {1} =" , numbers[0], numbers[1]);
break;
default:
MessageBox.Show("Please insert a operation");
break;
}
}
void numberquest()
{
int numofquestionleft = Convert.ToInt32(numofquest1.Text);
int r = int.Parse(numofquest1.Text);
if (numofquestionleft > 0) generate();
numofquestionleft--;
}
private void genbutton1_Click(object sender, EventArgs e)
{
generate();
}
private void button1_Click(object sender, EventArgs e)
{
numberquest();
}
}
}
据我了解你的问题,你遇到了 numofquestionleft
变量的问题,你想限制用户最多只能请求两个数字。你需要修改你的代码。你这样做是行不通的。一种解决方案可能是,
声明numofquestionleft
为class级。
public partial class Form1 : Form
{
int numofquestionleft = 2; //here
public Form1()
{
你的 numberquest()
方法看起来像
void numberquest()
{
if (numofquestionleft > 0)
{
generate();
}
numofquestionleft--;
//You can use the textBox to communicate with user about number of turns left
//as
numofquest1.Text ="Request left " +numofquestionleft;
}
但是如果你仍然想从文本框读取最大请求,那么限制用户只能发出两个请求的目的就失去了(用户可能输入其他数字,在这种情况下你需要验证输入),而且,你需要想办法读取一次数据。 希望能帮助到你。