初学者数独游戏
这篇文章介绍如何轻松开发一个数独游戏。
引言
这篇文章介绍如何轻松开发一个数独游戏。这个程序没有经过适当的优化。因此,欢迎任何建议。唯一的想法是帮助初学者轻松创建数独游戏。
背景
非常感谢下面提到的博客。如果没有它,我就无法生成一个有效的数独游戏。
http://www.chrismeijers.com/post/A-Sudoku-generator.aspx
使用代码
我一直很喜欢玩数独。我在报纸上做的第一件事就是解决数独,但曾经只有一个游戏,这对我来说变得不够了。这就是我计划为自己创建一个数独游戏的时候,在这个过程中我学到了很多东西。
最初,我用1个tablelayoutpanel、9个groupbox和81个textbox设计了我的表单。
创建然后格式化81个textbox并不容易。所以首先创建一个textbox并格式化所有属性和样式,然后复制粘贴它。
创建表单后,就是验证部分了。首先,我编写程序来检查groupbox中是否有重复的值或空白值。
private void groupBox_Validate()
{
foreach (GroupBox groupBox in tableLayoutPanel1.Controls)
{
foreach (TextBox txtBox in groupBox.Controls)
{
string s_txt_Value = txtBox.Text.ToString();
foreach (TextBox txtBox1 in groupBox.Controls)
{
if (txtBox.Name == txtBox1.Name)
{
continue;
}
else if (s_txt_Value == "")
{
arr_Add(txtBox);
continue;
}
if (s_txt_Value == txtBox1.Text)
{
arr_Add(txtBox);
}
}
}
}
}
在验证了一组框中是否存在错误后,我开始水平验证textbox。为此,我创建了一个所有textbox的水平数组。
public void txtBox_Horiz_Validate()
{
foreach (TextBox[] txtBox_Horiz_Controls in arr_txtBox_Horiz)
{
foreach (TextBox txtBox_Horiz in txtBox_Horiz_Controls)
{
string s_txt_Value = txtBox_Horiz.Text;
foreach (TextBox txtBox_Horiz_1 in txtBox_Horiz_Controls)
{
if (txtBox_Horiz.Name == txtBox_Horiz_1.Name)
{
continue;
}
else if (s_txt_Value == txtBox_Horiz_1.Text)
{
if (arr_control.Contains(txtBox_Horiz_1) == false)
{
arr_control.Add(txtBox_Horiz_1);
}
}
}
}
}
}
在验证了水平textbox后,我转向垂直放置的textbox。对于这个,我也做了同样的事情,我把所有东西都放在数组中,然后使用foreach进行验证。
public void txtBox_Vert_Validate()
{
foreach (TextBox[] txtBox_Vert_Controls in arr_txtBox_Vert)
{
foreach (TextBox txtBox_Vert in txtBox_Vert_Controls)
{
string s_txt_Value = txtBox_Vert.Text;
foreach (TextBox txtBox_Vert_1 in txtBox_Vert_Controls)
{
if (txtBox_Vert.Name == txtBox_Vert_1.Name)
{
continue;
}
else if (s_txt_Value == txtBox_Vert_1.Text)
{
if (arr_control.Contains(txtBox_Vert_1) == false)
{
arr_control.Add(txtBox_Vert_1);
}
}
}
}
}
}
如果你遵循代码,那么在验证之后,我将每个控件添加到了另一个数组中。这是为了更改那些具有错误值的textbox的颜色。
我使用其backcolor属性更改了textbox的颜色。
public DialogResult paint_TxtBox()
{
DialogResult d_Result = DialogResult.Cancel;
if (arr_control.Count != 0)
{
foreach (TextBox txtBox2 in arr_control)
{
txtBox2.BackColor = Color.Yellow;
}
arr_control.Clear();
}
else
{
d_Result = MessageBox.Show("GAME OVER.\nSUDOKU SOLVED SUCCESSFULLY" +
"...\nCLICK YES TO START A NEW GAME OR NO TO SET HIGH SCORE.",
"SUDOKU", MessageBoxButtons.YesNo, MessageBoxIcon.Information);
}
return d_Result;
}
将所有内容添加到数组中的主要逻辑是,如果该数组没有任何值,则意味着答案是正确的。所以我不必再次检查重复的值。
完成此操作后,我完全卡住了两天,因为我无法想到任何创建有效数独的逻辑。我在互联网上搜索解决方案,但我找不到任何对初学者来说容易的解决方案。
我完全沮丧,因为我以为我不得不半途而废地停止这个项目。正是在那个时候,我遇到了Chris Meijers的博客,它提供了一个创建有效数独的美妙方法,我又开始工作了。使用他的方法,我很快完成了我的工作。
关注点
在本项目中,我学到了很多经验教训,最重要的部分是首先完成手头的工作。曾经有一段时间,我在设计时完全迷失了方向,想着我将如何验证数独,这造成了积压。由于这个原因,我哪里也去不了,因为我既不能正确地专注于设计部分,也不能专注于验证部分。在这个时候,我学会了不去想即将到来的工作,而是先做必须做的事情。
建议
如前所述,此代码尚未经过优化。这可能包含您可能注意到的错误。如果您遇到任何此类错误,请通过“hari.19113@gmail.com”告诉我。
谢谢。