我是游戏编程的新手,正在尝试制作一款基本的2d自上而下的太空游戏,其中包含2艘相互竞争的太空船。我在用户控制的太空飞船上做得很好,但不知道如何开始编写AI。某些方法/模式是否适合这种情况?我什至要从哪里开始?
我是游戏编程的新手,正在尝试制作一款基本的2d自上而下的太空游戏,其中包含2艘相互竞争的太空船。我在用户控制的太空飞船上做得很好,但不知道如何开始编写AI。某些方法/模式是否适合这种情况?我什至要从哪里开始?
Answers:
如果这是您第一次开发AI,那么您不必担心状态模式,行为数学之类的问题,甚至不必为该主题准备一本书。
您可以从字面上摆脱这样的事情:
if( targetInRange == true )
{
FireAtTarget();
}
else if( bulletComingTowardsMe == true )
{
MoveAwayFromBullet();
}
else
{
WanderAroundAimlessly();
}
使AI正确的主要方面是通过思考角色希望角色具有哪些行为以及如何实际实现这一目标。因此,对于一个基本的太空飞船敌人来说,我想它可能会采取以下行动:
这些动作什么时候会发生?
由于角色可以进入的“状态”数量少而完成此操作后,可以使用简单的if语句,例如上面的语句。然后,我建议您查看“转向行为”,因为这些是非常简单的实施行为,可导致看起来非常好看的运动。
可以在这里找到更多信息:http : //www.red3d.com/cwr/steer/
我肯定会推荐Mat Buckland的《Programming Game AI By Example》一书,尤其是在您入门之初。
当您真正适应这些条件时,我建议您查看状态和策略模式。
重点是从小而简单开始。不用担心所有这些术语,每个人都会四处搜寻FSM,设计模式等等。首先设计和构建,然后担心如何使用现有方法或标准进行改进。
希望有帮助!
您可能想看看Strategy设计模式。基本上就船只的行为写出相同的基本策略:
然后,您将使用逻辑(状态机)在这些策略之间进行选择。例如:如果船上的护盾降到了50%以下,则远离目标,朝着电源提升/治疗用品等方向移动。
我可以建议您买Ian Millington的《游戏的人工智能》一书-太好了!:) http://www.ai4g.com/
源代码位于Github-MIT许可下。
当然,如果您不使用C / C ++,那么这可能不太重要。
但是,对人工愚蠢/智能世界的介绍确实很棒。
您将需要的是转向和状态机。对于初学者。
如果您要使用状态机,请提供一些实用建议:当心大状态。
具有“逃逸”状态的诱惑很诱人,该状态可以处理要逃离的位置,设置高目标速度,清除所有目标等情况。最好有许多状态机,每个状态机都处理一个或几个船舶控制,例如处理目标位置的状态机,处理枪支的状态机等。
这看起来很愚蠢,因为您必须向每台机器添加逃逸状态,但是由于只限于一个或两个输出,因此状态最终很小,所以这不成问题。
另外,由于现在每个控制都在单独的控制下,因此您最终可以选择逃跑目标位置,同时仍然让攻击状态控制您的枪支。您可以在冷却液泄漏的情况下空袭敌人,同时仍然节省发动机功率。您可以在避免对策的同时转向以避免碰撞。使用单个无所不包的状态机,所有这些都是不可能的。
如何创建AI是一个棘手的问题,因为它包含许多部分:
其他海报推荐了好书,我也喜欢jacmoe推荐的AI4Games,尽管它在部分内容上非常通用(例如很多书,这当然是可以理解的)。
当然,每种类型的游戏都有其特定的需求,街机/射击游戏不需要复杂的架构即可支持有趣的游戏玩法。简单的操纵库就可以作为行为的基础,然后为各种类型的敌人添加详细信息(有些可以定期射击,有些可以通过预测玩家的移动来射击,有些可以面对敌人转弯,有些可以协调他们的攻击等)。