C#,并为一个视觉文字游戏随机显示一行
本文关键字:随机 文字游戏 显示 一行 视觉 一个 | 更新日期: 2023-09-27 18:29:39
我试图在访问数据库中随机生成一个介于表的最小值和最大值之间的数字,然后将该随机数字与我的表匹配,并显示等于该随机数字的字段1列和行。我找到了一个随机数生成器和一些代码,这些代码应该会给我表的最小值和最大值。我想把我的数字和表中的那一行相匹配。我对c#编程很陌生,只是想更好地掌握编程。这是我的代码,到目前为止,任何帮助都将不胜感激。代码中的粗体部分是我在代码中出现错误的地方。谢谢你的光临。
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 CapstoneProgram
{
public partial class SightWordRandom : Form
{
public SightWordRandom()
{
InitializeComponent();
}
private void SightWordRandom_Load(object sender, EventArgs e)
{
}
private void btnNext_Click(object sender, EventArgs e)
{
Double sword;
var answer = this.sightWordsDB1DataSet.Kindergarten.Aggregate(new { Min = int.MinValue, Max = int.MaxValue },
(a, b) => new
{
Min = Math.Min(a.Min, b.Field<int>("")),
Max = Math.Max(a.Max, b.Field<int>(""))
});
int min = answer.Min;
int max = answer.Max;
Random rng = new Random();
for (int i = min; i < max; i++)
**sword = (this.sightWordsDB1DataSet.Kindergarten.IDColumn == rng);**
lblSightWord.Text = Convert.ToString(sword);
}
}
}
虽然我根本不确定自己是否理解,但这里有一个尝试,可能会朝着你想要做的方向发展。
我从你的解释和代码中理解如下:
你需要实际生成一个随机数来进行比较。我猜你想要生成一个介于确定的min
和max
值之间的数字,并在Kindergarten
表中选择一个特定字段等于随机数的行。显然,该字段可以作为Field<int>("")
访问(这有点奇怪,如果有一行没有行名,您可能需要仔细检查这是否正确,或者由于您使用的是强类型数据集,请像对IDColumn
那样使用成员字段)。
对于该字段与生成的随机值匹配的第一行,您希望检索该行中另一个字段的值作为sword
。从您当前的代码中还不清楚这个字段在Kindergarten
表中是如何命名的。在我下面的建议中,我将用"剑"来称呼它。如果实际上列的名称不同,则可能需要更改此设置。
此外,您当前的代码还包含一些错误,其中包含您聚合的min
和max
的初始值。
所以我的建议是:
private void btnNext_Click(object sender, EventArgs e)
{
Double sword;
var answer = this.sightWordsDB1DataSet.Kindergarten.Aggregate(
new { Min = int.MaxValue, Max = int.MinValue },
(a, b) => new
{
Min = Math.Min(a.Min, b.Field<int>("")),
Max = Math.Max(a.Max, b.Field<int>(""))
});
int min = answer.Min;
int max = answer.Max;
Random rng = new Random();
// The value to be matched.
var selectedMatchingValue = rng.Next(min, max + 1);
sword = this.sightWordsDB1DataSet.Kindergarten
.Where(r => r.Field<int>("") == selectedMatchingValue)
.Select(r => r.Field<double>("sword")) // change to the correct column name.
.First();
lblSightWord.Text = Convert.ToString(sword);
}