用Lua / C ++写一个炸弹人AI

时间:2014-05-07 09:57:03

标签: c++ lua artificial-intelligence

首先,英语不是我的母语,但我会尽我所能!

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

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

我已经看到了不同的意见"为什么在人工智能开发中使用Lua很酷#34;

我已经看到很多关于如何在C ++中使用它的解释,但我仍然没有得到它。

例如,承认我有一个包含炸弹人地图的物体地图,以及一个会破坏这张地图上一些墙壁的物体怪物。 我想将Map传递给Lua代码,允许它改变它的内容吗?或者Lua文件不应该改变C ++对象中的任何内容?

我已经读过关于Luabind允许将一些对象从C ++传递给Lua的内容,但我不确定这是不是一个好主意。

关于Lua和C ++有一些更普遍的问题:

Lua如何意识到C ++值和内容的某些变化(例如,如果某些其他线程正在处理它)?

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

我认为,在游戏开始时,能够启动AI脚本并让它完成所有操作,之后不用C ++处理它,这真的可能吗?

1 个答案:

答案 0 :(得分:0)

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

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

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

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

在C ++中,您创建一个userdata,存储在指向Monster实例的userdata指针中,并指定userdata Monster metatable。在此metatable中,您可以注册函数movedestroyWall等。您可以通过存储在userdata中的指针使这些函数在Monster的实例上运行。在分配元数据后,您只需将您的用户数据返回给Lua,在那里您可以操纵您的怪物。

这实际上也是对第二个问题的回答:

2。看起来当你从C ++向Lua传递一个参数时,它是重复的,有没有办法将指针传递给Lua,所以它总能看到变化的变量?

3。我认为,在游戏开始时,它能够启动AI脚本并让它完成所有操作,之后不用C ++处理它,这真的可能吗?

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

你的问题很广泛,所以我不能再具体了。如果你有疑问,请随便询问。