这里是c ++的初学者。
for (int z = 0; z < arraysize; z++) {
if (generated[z][0] == generated[z][1] && generated[z][1] == generated[z][2]) {
wins++;
}
if (generated[0][z] == generated[1][z] && generated[1][z] == generated[2][z]) {
wins++;
}
如您所见,它会检查水平线。我想检查是否有对角线连续3个。如果有,wins变量应该添加一个。有什么想法吗?
答案 0 :(得分:2)
您可以使用z
作为两个范围的索引而不是一个范围来执行此操作。
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;
答案 1 :(得分:1)
从两个if条件开始,你使用过,我认为你正在尝试类似3 * 3 Tic-tac-toe的东西。
因此,如果您的arraysize为3,则无法在循环中使用以下检查:
if (generated[z][z] == generated[z+1][z+1] && generated[z+1][z+1] == generated[z+2][z+2])
{
wins++;
}
z + 2和z + 1将越过数组限制。
所以你可以在循环之外检查它:
generated[0][0] == generated[1][1] && generated[1][1] == generated[2][2]
generated[0][2] == generated[1][1] && generated[1][1] == generated[2][0]