【发布时间】:2022-12-08 02:25:55
【问题描述】:
在我开始之前,我是编程新手并且只学习了几周的 IT,所以不要对我太苛刻 :)。
我目前需要创建一个简单的游戏,现在我需要找到一个函数来检查玩家的移动是否“合法”。
我通过创建以下函数来完成此操作。
bool legal(Game* g, int x, int y) {
if (out_of_bounds(x,y))
{
return false;
} else
if (!out_of_bounds(x,y))
{
return (g ->board[x][y] == '_') &&
(
legal_dir(g,x,y, 0, -1) ||
legal_dir(g,x,y, -1, -1) ||
legal_dir(g,x,y, -1, 0) ||
legal_dir(g,x,y, 1, -1) ||
legal_dir(g,x,y, -1, 1) ||
legal_dir(g,x,y, 1, 0) ||
legal_dir(g,x,y, 0, 1) ||
legal_dir(g,x,y, 1, 1)
);
}
}
超出范围的功能已经实现,应该可以正常工作。给我们的评论如下。
// Check whether (x,y) is a legal position to place a stone. A position is legal // if it is empty ('_'), is on the board, and has at least one legal direction.
我确定必须有一个循环来遍历这 8 种可能性。
我尝试创建上面显示的函数并且它有效,但必须有更有效的方法来实现它。
【问题讨论】:
-
当然,您可以在嵌套循环中将 deltaX 和 deltaY 从 -1 更改为 1,过滤掉 (0,0),这是当前位置,但我不确定它会更有效率还是更漂亮比你有什么。
-
定义“高效”。