你可以这样做:
所以,你可以检查一下你的循环之外。
for (int z = 0; z < arraysize; z++)
{
if (generated[z][z] == generated[0][0])
{
//... handle it
}
if (generated[arraysize - z - 1][z] == generated[arraysize - 1][0])
{
//... handle it
}
}
不幸的是,这只会让你到目前为止。您的代码中的当前逻辑不会像您期望的那样工作。问题是它保持横向和纵向所有线的累计计数。如果你有几个部分匹配,你可能会得到一个不正确的win
值。您可以通过在执行扫描时添加几个附加循环来检查每条垂直和水平线的内容来避免此问题。这将需要添加一些额外的标志以跟踪在任一方向是否有胜利。以下示例应该为您提供一组灵活多变的检查,可用于任何大小的数组。
bool hwin = false;
bool vwin = false;
int d1wins = 0;
int d2wins = 0;
for (int z = 0; z < arraysize; z++)
{
int hwins = 0;
int vwins = 0;
// Check horizontal line
for (int i = 0; i < arraysize; ++i)
{
if (generated[i][z] == generated[0][z])
{
hwins++;
}
}
hwin = hwin || hwins == arraysize;
// Check vertical line
for (int i = 0; i < arraysize; ++i)
{
if (generated[z][i] == generated[z][0])
{
vwins++;
}
}
vwin = vwin || vwins == arraysize;
// Check diagonal
if (generated[z][z] == generated[0][0])
{
d1wins++;
}
// Check diagonal
if (generated[arraysize - z - 1][z] == generated[arraysize - 1][0])
{
d2wins++;
}
}
bool dwin = d1wins == arraysize || d2wins == arraysize;
(不是一个答案)使用'arraysize'很好,但是你通过在代码本身中使用'2'来抵消它......考虑在内部使用循环;这接近于硬编码到固定大小。 – usr2564301
@Peter,你的数组大小是多少? – aerokite
@AerofoilKite const int = 3; – Peter