gpt4 book ai didi

c# - 如何在 WPF 中创建填字游戏?

转载 作者:太空狗 更新时间:2023-10-29 17:59:26 24 4
gpt4 key购买 nike

我创建了 10 x 10 的文本框,用户应该将单词输入相关的文本框以定位单词的位置。然后我将所有内容保存到这样的文本文件中:

enter image description here

然后在 WPF 方面,我阅读了文本文件并在面板中填充了文本框,但问题是填字游戏有向下和交叉的提示,这些提示会引导您找到答案,每个提示都有一个数字来指示哪个是哪个.但是,我想不出一种方法将数字的拼图数字与向下和跨数字的提示联系起来。这是现在的样子:

enter image description here

注意横向和向下旁边的数字(我在绘画中编辑它们以可视化我想要的内容),我需要显示这些数字。

在我的数据库中,我将文件的位置存储在一个表中,将提示和答案存储在另一个表中,如下所示:

enter image description here

这是提示(上下)和答案:

enter image description here

我正在使用 Entity 框架 lambda 表达式来检索 across 和 down。

感谢任何帮助将数字分配给拼图中的 Across 和 Down。

这是我显示拼图的代码:

  protected void Across()
{
IList<ModelSQL.puzzlecontent> lstAcross = daoPuzzleContent.GetAcross();

foreach (ModelSQL.puzzlecontent lista in lstAcross)
{
Label tbA = new Label();
tbA.Content = lista.Hint;
tbA.Width = Double.NaN;
tbA.BorderBrush = Brushes.CadetBlue;
tbA.BorderThickness = new Thickness(2);
stackPanel1.Width = Double.NaN;
stackPanel1.Children.Add(tbA);
words.Add(lista.Answer);

}
}

protected void AddPuzzle()
{
// foldername of the txt file.
// using (StreamReader reader = File.OpenText((@daoWordPuzzle.GetfileURL())))
string[] fileData = File.ReadAllLines(@"C:\Users\apr13mpsip\Desktop\OneOrganizer\OneOrganizer\WordPuzzle\educational.txt");

string[] lineValues;

int row = 0;
int col;
int hint = 1;

string[][] rowcol = new string[fileData.Length][];

foreach (string line in fileData)
{
lineValues = line.Split(new string[] { "," }, StringSplitOptions.None);


rowcol[row] = new string[lineValues.Length];

col = 0;

foreach (string value in lineValues)
{
rowcol[row][col] = value;
col++;
}
row++;

}


for (int i = 0; i < rowcol.GetLength(0) ; i++)
{
for (int j = 0; j < rowcol[i].GetLength(0) ; j++)
{


int iadd = i+1 < rowcol.GetLength(0) ? i+1 : 100;
int iminus = i-1 >= 0 ? i-1 : 100;
int jadd = j+1 < rowcol.GetLength(0) ? j+1 : 100;
int jminus = j-1 >= 0 ? j-1 : 100;
var self = rowcol[i][j]; // current value

var top = iminus == 100 ? "" : rowcol[iminus][j];
var bottom = iadd == 100 ? "" : rowcol[iadd][j];
var left = jminus == 100 ? "" : rowcol[i][jminus];
var right = jadd == 100 ? "" : rowcol[i][jadd];

//ACROSS HORIZONTAL
if (
(!String.IsNullOrEmpty(self) && !String.IsNullOrEmpty(right) && !String.IsNullOrEmpty(bottom) && String.IsNullOrEmpty(top) && String.IsNullOrEmpty(left)) ||
(!String.IsNullOrEmpty(self) && !String.IsNullOrEmpty(right) && String.IsNullOrEmpty(bottom) && !String.IsNullOrEmpty(top) && String.IsNullOrEmpty(left)) ||
(!String.IsNullOrEmpty(self) && !String.IsNullOrEmpty(right) && String.IsNullOrEmpty(bottom) && String.IsNullOrEmpty(top) && String.IsNullOrEmpty(left)) ||
(!String.IsNullOrEmpty(self) && !String.IsNullOrEmpty(right) && !String.IsNullOrEmpty(bottom) && !String.IsNullOrEmpty(top) && String.IsNullOrEmpty(left))
)
{
wordAcross = "";
for (int k = 0; k < 10; k++)
{
wordAcross += rowcol[i][k];
if (k == 9)
{
puzzlewordAcross.Add(wordAcross);
// print hello and live
}
}

}

//DOWN VERTICAL
if (
(!String.IsNullOrEmpty(self) && String.IsNullOrEmpty(right) && !String.IsNullOrEmpty(bottom) && String.IsNullOrEmpty(top) && !String.IsNullOrEmpty(left)) ||
(!String.IsNullOrEmpty(self) && String.IsNullOrEmpty(right) && !String.IsNullOrEmpty(bottom) && String.IsNullOrEmpty(top) && String.IsNullOrEmpty(left)) ||
(!String.IsNullOrEmpty(self) && !String.IsNullOrEmpty(right) && !String.IsNullOrEmpty(bottom) && String.IsNullOrEmpty(top) && String.IsNullOrEmpty(left))
)
{

wordDown = "";
for (int k = 0; k < 10; k++)
{
wordDown += rowcol[k][j];
if (k == 9)
{
puzzlewordDown.Add(wordDown);
// print holy and leducated
}


}
}

//Check Top , Left , Bottom , Right value.
if (
(!String.IsNullOrEmpty(self) && String.IsNullOrEmpty(top) && !String.IsNullOrEmpty(right) && !String.IsNullOrEmpty(bottom) && String.IsNullOrEmpty(left)) ||
(!String.IsNullOrEmpty(self) && String.IsNullOrEmpty(top) && String.IsNullOrEmpty(right) && !String.IsNullOrEmpty(bottom) && !String.IsNullOrEmpty(left)) ||
(!String.IsNullOrEmpty(self) && !String.IsNullOrEmpty(top) && !String.IsNullOrEmpty(right) && String.IsNullOrEmpty(bottom) && String.IsNullOrEmpty(left)) ||
(!String.IsNullOrEmpty(self) && !String.IsNullOrEmpty(top) && !String.IsNullOrEmpty(right) && !String.IsNullOrEmpty(bottom) && String.IsNullOrEmpty(left)) ||
(!String.IsNullOrEmpty(self) && String.IsNullOrEmpty(top) && String.IsNullOrEmpty(right) && !String.IsNullOrEmpty(bottom) && String.IsNullOrEmpty(left)) ||
(!String.IsNullOrEmpty(self) && String.IsNullOrEmpty(top) && !String.IsNullOrEmpty(right) && String.IsNullOrEmpty(bottom) && String.IsNullOrEmpty(left))

)
{

TextBox tbox = new TextBox();
tbox.Height = 50;
tbox.Width = 50;
tbox.Text = hint.ToString();
wrapPanel1.Children.Add(tbox);



tbox.GotFocus += (source, e) =>
{
if (!string.IsNullOrEmpty(tbox.Text))
{
string Str = tbox.Text.Trim();
double Num;
bool isNum = double.TryParse(Str, out Num);
if (isNum)
tbox.Text = "";
}
else
{
tbox.Text = "";
}

};

hint++;
}
else
{
TextBox tbox2 = new TextBox();
tbox2.Height = 50;
tbox2.Width = 50;
if (String.IsNullOrEmpty(self))
{
tbox2.Background = Brushes.Black;
tbox2.Focusable = false;
}
wrapPanel1.Children.Add(tbox2);
}// end of top bottom left right.

}


}
} // End of AddPuzzle()

横向和向下显示的代码:

    protected void Down()
{
IList<ModelSQL.puzzlecontent> lstDown = daoPuzzleContent.GetDown();

foreach (ModelSQL.puzzlecontent listd in lstDown)
{
Label tbD = new Label();
tbD.Content = listd.Hint;
tbD.Width = Double.NaN;
tbD.BorderBrush = Brushes.CadetBlue;
tbD.BorderThickness = new Thickness(2);
stackPanel2.Width = Double.NaN;
stackPanel2.Children.Add(tbD);


}
}

protected void Across()
{
IList<ModelSQL.puzzlecontent> lstAcross = daoPuzzleContent.GetAcross();

foreach (ModelSQL.puzzlecontent lista in lstAcross)
{
Label tbA = new Label();
tbA.Content = lista.Hint;
tbA.Width = Double.NaN;
tbA.BorderBrush = Brushes.CadetBlue;
tbA.BorderThickness = new Thickness(2);
stackPanel1.Width = Double.NaN;
stackPanel1.Children.Add(tbA);
words.Add(lista.Answer);

}
}

最佳答案

您可能需要在这里重新定义您的数据模型,因为我认为您在第一个障碍 - 系统分析上失败了。当我们只想编写代码并且总是意味着大的重构时,它让我们所有人都抓狂了。

在这里考虑您的域。填字游戏。如果我们正在阅读报纸拼图,而您不知道某条线索的答案,那么当您问 friend 时您会怎么说。

6 letters, clue is 'blah blah'

...后跟任何您已经知道的字母。

现在我们知道拼图需要知道每个答案有多少个字母,并且每个答案都需要一条线索。我们还知道,在您填写之前,字母是隐藏的,但我们需要在某个时候知道正确答案。

拼图如何在纸的背面呈现出来?线索不是写成 1、2、3 等。它们是向下 4、横向 1 等。现在我们知道您需要存储一些位置数据。

您可以通过两种方式实现这一目标。

<强>1。将每条线索作为自己的条目,并附上文字

线索“1”方向“交叉”位置 '1,1'回答“你好”描述 '问候语'

根据条目计算出网格大小并相应地放置字母。优点:易于使用。所有信息集中在一个地方缺点:可能的数据损坏。该方法可以在同一个位置定义2个不同的字母。

<强>2。单独的条目但在网格中回答文本

这与您现在的方式非常相似,但是您将文本分隔到 CSV 网格中,如您在第一个屏幕截图中所演示的那样。然后,您将获得与方法 1 中一样的线索条目。但省略“答案”字段。

您的代码必须:

  1. 算出网格大小
  2. 填充网格
  3. 填写列表线索
  4. 将用户条目转换为 CSV 文本文件,以便您可以根据答案验证输入
  5. 告诉用户如果

至于将线索链接到入口文本框。设置每个 textboxTooltip 属性,其中包含对包含该字母的线索的描述。 他们做对了。

最后(这可能是您想要的),将正确的数字添加到输入文本框,您必须利用WPF 的布局管道。不要只在你的网格中放一个文本框,放另一个网格!我将向您展示它在 XAML 中的外观,但您可能希望在代码中生成它。

<Grid>
<TextBlock x:Name="TextBlock_NumberLabel"/>
<TextBox x:Name="TextBox_LetterEntry"/>
<Grid>

在任何需要数字的方 block 中使用它而不是纯文本框。

关于c# - 如何在 WPF 中创建填字游戏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18247265/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com