我正在编写一个游戏模拟,测试棋盘上是否有任何棋子。如果一块不是我希望AI在板上放置一块,为此我创建了一个bool函数来测试所有块是否都设置为0,这意味着它们还没有进入板。当前的功能启动,但我觉得有一个更简单的方法:
bool checkPiece(int a[])
{
int n = 0;
bool e = true;
while (e == true && n < 4)
{
if (a[n] == 0 )
{
n++;
}
else
{
return false;
}
}
return true;
}
答案 0 :(得分:3)
我使用标准库,这是一般订单:
bool checkPiece(int const *a) {
return std::all_of(a, a+4, [](int i) { return i == 0; });
}
如果你真的想自己做这个工作,也许就是这个订单上的东西:
bool checkPiece(int const *a) {
for (int i=0; i<4; i++)
if (a[i] != 0)
return false;
return true;
}
大多数情况下,您还要传递类似集合的内容,例如std::array
或std::vector
(通过const引用),或类似范围的内容,例如{ {1}}而不是指针。这将(通过一个明显的例子)使获得通过的大小变得微不足道,而不是盲目地假设是4项。
答案 1 :(得分:2)
这基本上就是你所需要的:
for (size_t n = 0; n < 4; ++n) {
if (a[n]) return false;
}
return true;
你不需要e
,当从开始到结束迭代数组(或之前返回)时,for
循环比一段时间更容易读写。您可以使用算法,但我怀疑它会使您的代码更具可读性,您应该避免像瘟疫这样的幻数(如果您将数组的大小更改为4以外的其他内容会怎么样?)。
答案 2 :(得分:1)
您可以使用std::count
以少量代码解决此问题。
bool checkPiece(int const *a) {
return std::count(a, a+4, 0) == 4;
}
答案 3 :(得分:0)
首先,不要使用幻数而不是传递数组大小。如果您更改了电路板的大小,则必须在程序中找到每个4
并确定它实际上是数字4还是数组的大小。将大小传递给您的函数。
其次,给函数一个描述它的功能的名称。 checkPiece
没有告诉我任何事情。
当您进行这些更改时,请使用标准算法:
bool noPieces(int const *a, int size) {
return std::all_of(a, a + size, [](int pc) { return pc == 0; }
}