【问题标题】:Loop for a game that checks if move is legal or not循环检查移动是否合法的游戏
【发布时间】: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),这是当前位置,但我不确定它会更有效率还是更漂亮比你有什么。
  • 定义“高效”。

标签: c function loops


【解决方案1】:

好问题!

像往常一样,有几种可能的方法,但最标准的可能是创建这八个点的坐标的嵌套列表:

[[0, -1], [-1, -1], ... ]

然后你可以遍历该列表。语法应该相当简单,但如果需要,请随时发布后续跟进。不想缩短你的学习过程,弄清楚这些事情是学习如何成为一名开发人员的重要组成部分!

不管您是否可以在此示例中使用它,请快速搜索并尝试理解什么是“可迭代对象”——这是一个强大的编程概念。

哦,作为一般规则,在帖子中包含编程语言、依赖关系等是有帮助的,这样其他人可以更轻松地提供帮助。没什么大不了的,尽管其他人可能会如何回应:)

祝你好运,欢迎光临!

【讨论】:

    猜你喜欢
    • 2018-02-09
    • 1970-01-01
    • 2013-09-29
    • 2013-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-21
    相关资源
    最近更新 更多