【发布时间】:2012-11-01 15:10:19
【问题描述】:
上面是棋盘的图片
我发现很难找出如何连续检测 2 种颜色来确定获胜者 不使用暴力枚举..
我有一个算法,我一直在尝试实现它,但我似乎无法让它工作 有谁知道该怎么做..会很有帮助谢谢..
我想检测获胜者对角线垂直和水平..
p.s 我通常不寻求解决方案,但这次我真的需要一些帮助。非常感谢
这是我为程序提供的代码,可让您进行和平处理
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
private Button[] btns;
private Button[] btns2;
private Button[] btns3;
public Color[] col;
// public var x;
public Form1()
{
InitializeComponent();
btns = new Button[2] { button2, button3 };
btns2 = new Button[2] { button4, button5 };
btns3 = new Button[2] { button9, button8 };
col = new Color[2] { Color.Red, Color.Yellow };
Color x = col[0];
Color y = col[1];
}
private void Form1_Load(object sender, EventArgs e)
{
foreach (var btn in btns)
{
btn.Enabled = false;
btn.BackColor = Color.LightCyan;
}
foreach (var btn in btns2)
{
btn.Enabled = false;
btn.BackColor = Color.LightCyan;
}
foreach (var btn in btns3)
{
btn.Enabled = false;
btn.BackColor = Color.LightCyan;
}
}
public int state;
int cc = 0;
private void button1_Click(object sender, EventArgs e)
{
foreach (var btn in btns)
{
{
if (!btn.Enabled)
{
btn.Enabled = true;
if (cc == 0)
{
cc = 1;
btn.BackColor = col[0];
}
else
{
cc = 0;
btn.BackColor = col[1];
}
return;
}
}
}
}
private void button6_Click(object sender, EventArgs e)
{
foreach (var btn in btns2)
{
if (!btn.Enabled)
{
btn.Enabled = true;
if (cc == 0)
{
cc = 1;
btn.BackColor = col[0];
}
else
{
cc = 0;
btn.BackColor = col[1];
}
return;
}
}
}
private void button7_Click(object sender, EventArgs e)
{
foreach (var btn in btns3)
{
if (!btn.Enabled)
{
btn.Enabled = true;
if (cc == 0)
{
cc = 1;
btn.BackColor = col[0];
}
else
{
cc = 0;
btn.BackColor = col[1];
}
return;
}
}
}
}
}
【问题讨论】:
-
在此之前我已经多次看到您的问题。你真的只在寻找 2 的比赛吗?我记得你说过这最终会成为一种连接 4 或 5 的游戏?
-
是的,它将是连接 4,但我在想如果我学会如何连接 2,我可以通过扩展它继续前进
-
我认为这不是一个好方法。游戏的整个网格有多大?
-
我认为这是一种合理的方法,前提是您要特别注意在较小的集合中可行但在较大的集合中不可行的事情。比如蛮力检查。
-
@Tacit 我们可以就已提供的多个答案获得一些反馈吗?这些对你有意义吗?你认为你知道足够的知识来实施这些解决方案吗?您需要更多说明吗?等
标签: c# .net winforms visual-studio-2010 visual-c#-express-2010