【问题标题】:Writing a bomberman AI with Lua / C++ [closed]使用 Lua / C++ 编写炸弹人 AI [关闭]
【发布时间】:2014-05-07 09:57:03
【问题描述】:

首先,英语不是我的母语,但我会尽力而为!

我实际上正在为一个学校项目用 C++ 开发一个 Bomberman,我想学习 Lua 并用它来开发不同的 AI。不幸的是,我的学校似乎没有人知道 Lua 编程,所以我正在使用互联网!

我已经看到了 Lua 的样子,并将它链接到一些 C++ 代码以查看传递参数等时的不同行为...

对于“为什么在 AI 开发中使用 Lua 很酷”,我看到了不同的看法。

我看过很多关于如何在 C++ 中使用它的解释,但我仍然不明白。

例如,承认我有一个包含轰炸机地图的对象地图,以及一个将摧毁这张地图上的一些墙壁的对象怪物。 我是否想将 Map 传递给 Lua 代码,允许它更改其内容?或者 Lua 文件不应该改变 C++ 对象中的任何内容?

我读过关于 Luabind 的文章,它允许将一些对象从 C++ 传递到 Lua,但我不确定这是否是个好主意。

关于 Lua 和 C++ 的一些更一般的问题:

Lua 应该如何知道 C++ 值和内容的一些变化(例如,如果其他一些线程正在处理它)?

当你从 C++ 向 Lua 传递一个参数时,它似乎是重复的,有没有办法将指针传递给 Lua,所以它总是可以查看变化的变量?

我以为它可以在游戏开始时启动 AI 脚本并让它做所有事情,而不用事后用 C++ 处理,这真的可能吗?

【问题讨论】:

    标签: c++ lua artificial-intelligence


    【解决方案1】:

    1. Lua 如何知道 C++ 值的一些变化?

    这是通过所谓的绑定来实现的。您使用 Lua 注册您的类以及可以从 Lua 调用的方法。

    例如,你有一个 C++ 中的 Monster 类,并希望 Lua 处理它的行为。您可以在 Lua 中注册一个 globan 函数,称为 getMonsterIDsOnTheMap。该函数将返回一个 Lua 表,其中包含地图中生成的怪物的 ID。

    接下来,您将注册一个名为 getMonster 的函数,该函数会将特定怪物的实例返回给 Lua。这是你做绑定的地方,可以让你从 Lua 操纵怪物。比如说,你的 Monster 类有函数movedestroyWallgetTilePosition 等等。要让 Lua 访问这个 Monster 实例,您需要一个 userdata 对象。

    在 C++ 中,您创建一个用户数据,将用户数据指针存储到您的 Monster 实例中,分配用户数据 Monster 元表。在这个元表中,您注册函数movedestroyWall 等。通过存储在用户数据中的指针使这些函数对Monster 的实例进行操作。分配元表后,您只需将用户数据返回到 Lua,您就可以在其中操作您的怪物。

    这其实也是你第二个问题的答案:

    2.好像当你从 C++ 向 Lua 传递一个参数时,它是重复的,有没有办法将指针传递给 Lua,所以它总是可以查看变化的变量?

    3.我以为它可以在游戏开始时启动 AI 脚本并让它做所有事情,而不用事后用 C++ 处理,这真的可能吗?

    是的,这是可能的。您可以在 C++ 中编写核心功能(声音、图形等),并让 Lua 通过您绑定的函数处理所有内容。当然,这可能不是一件容易的事,但它是可能的。

    您的问题非常广泛,所以我不能再具体了。如果您有任何疑问,请随时询问。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-18
      • 1970-01-01
      • 2015-10-03
      • 2010-09-26
      • 2011-08-27
      • 1970-01-01
      • 2010-10-05
      • 2017-05-06
      相关资源
      最近更新 更多